您的位置:首页 > 编程语言 > C#

C# 接口interface的学习

2017-02-10 10:36 399 查看
最近看了看C#语法中的接口。记录下学习的内容。

首先是普通的类继承普通的接口。

using UnityEngine;
using System.Collections;
using System;
using Interface1;

namespace Interface1
{
//接口可由方法、属性、事件、索引器这4种成员类型任意组合构成,但不能包含字段。
//接口成员不能有定义(代码体)
//不能直接实例化接口
//类或结构体可继承多个接口
//接口本身可以继承多个接口
//继承接口的任何非抽象类型都必须实现接口的所有成员
interface MyInterface
{
string ID //默认访问权限是public,但是不能加修饰符
{
set;
get;
}

string name
{
set;
get;
}
//接口中的方法(函数)不能有定义(实体)
void SetID();
}
interface MyInterface2
{
void Add();
}

//类继承接口后,需要实现接口中的所有成员
class MyClass : MyInterface
{
string id_ = "";
string name_ = "";

//实现接口成员必须有public修饰
public string ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}

public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}

public void SetID()
{
Debug.Log("MyInterface.SetID");
}
}
}

//类继承多个接口,需要实现所有接口的成员
class MyClass2 : MyInterface, MyInterface2
{
string id_ = "";
string name_ = "";
public string ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}

public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}

public void Add()
{

}

public void SetID()
{

}
}

public class Interface_Test : MonoBehaviour
{
// Use this for initialization
void Start()
{
Interface1.MyClass mc = new Interface1.MyClass();
mc.SetID();
}

// Update is called once per frame
void Update()
{

}
}


类显示实现接口成员。

using UnityEngine;
using System.Collections;
using System;
using Interface2;

//显示实现接口成员
//当一个类继承两个接口时,这两个接口中的方法名是完全相同的标识符,而其功能是不相同的。
//为了区分不同接口中相同的标识符的方法,这时就可以显示地实现接口成员,即创建一个仅通过该接口调用并且特定于该接口的类成员。
namespace Interface2
{
interface MyInterface
{
string ID
{
set;
get;
}

string name
{
set;
get;
}

void SetID();
}

public interface MyInterface2
{
string ID
{
set;
get;
}

string name
{
set;
get;
}

void SetID();
}

//继承的两个接口中的成员标识符完全一样
//显示接口成员实现中不能包含访问修饰符、abstract、override、static、const
//显示接口成员属于接口成员,而不是类的成员,不能使用类对象访问,只能通过接口对象访问
class MyClass : MyInterface, MyInterface2
{
string id_ = "";
string name_ = "";

//显示地实现MyInterface2中的ID属性
string MyInterface2.ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}
//显示地实现MyInterface中的ID属性
string MyInterface.ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}

public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}
//显示地实现MyInterface中的SetID方法
void MyInterface.SetID()
{
Debug.Log("MyInterface.SetID");
}
//显示地实现MyInterface2中的SetID方法
void MyInterface2.SetID()
{
Debug.Log("MyInterface2.SetID");
}
}
}

public class Interface_Test1 : MonoBehaviour
{

// Use this for initialization
void Start ()
{
Interface2.MyClass mc = new Interface2.MyClass();
MyInterface mi = mc; //接口不能直接实例化,这里使用类的对象实例化接口
mi.SetID(); //显示实现接口的成员只能通过接口对象访问
MyInterface2 mc2 = mc;
mc2.SetID();
}

// Update is called once per frame
void Update ()
{

}
}


基类实现接口成员。

using UnityEngine;
using System.Collections;
using System;
using Interface3;

//基类实现接口成员
namespace Interface3
{
interface MyInterface
{
string ID
{
set;
get;
}

string name
{
set;
get;
}

void SetID();
void SetName();
}

class MyClass
{
public virtual void SetName()
{
Debug.Log("MyClass.SetName");
}
}

//继承的基类中实现了继承的接口中的成员,意味着派生类隐式地支持这个接口
class MyClass2 : MyClass, MyInterface
{
string id_ = "";
string name_ = "";

string MyInterface.ID
{
get
{
return id_;
}
set
{
id_ = value;
}
}

public string name
{
get
{
return name_;
}
set
{
name_ = value;
}
}

public void SetID()
{
Debug.Log("MyClass2.SetID");
}
}
}

public class Interface_Test2 : MonoBehaviour
{

// Use this for initialization
void Start ()
{
Interface3.MyClass2 m = new Interface3.MyClass2();
m.SetID();
m.SetName();
}

// Update is called once per frame
void Update ()
{

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# interface