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

C# ----- 接口(Interface)

2015-12-08 15:11 302 查看
根据原博概述,加自己理解,稍有改动。

1.理论概念
(1)接口类似于抽象基类,不能直接实例化接口。接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员。
显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问。
隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问,但是实现的成员必须是公有的
(2)接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、静态成员等,只能包含方法、属性、事件、索引等成员
(3)接口成员是自动公开的,访问级别默认为public,且不包含任何访问修饰符(如static,abstract,override,virtual)。
接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义
(4)接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。
(5)接口的名称一般以“I”作为首字母(非必须)。
(6)在声明接口成员的时候,不能为接口成员编写具体的代码,只需指明其成员名称和参数。

2.示例

public interface InputInterface

{
void SetDelegate (。。。参数。。。);
void SetAttack (。。。参数。。。);
}

public class InputEvent : MonoBehaviour, InputInterface

{
void InputInterface.SetDelegate(。。。参数。。。)
{
。。。显式实现接口。。。
}
public void SetAttack (。。。参数。。。)
{
。。。隐式实现接口。。。
}
}


每个方法均有实现。这是我自己参与的一个demo里的部分代码,用到了接口和委托

显式实现接口与隐式实现接口:

interface IDemoInterface1
{
void ReadThis1();
}
interface IDemoInterface2
{
void ReadThis2();
}

class MainClass:IDemoInterface1,IDemoInterface2
{
// 显式实现接口
void IDemoInterface1.ReadThis1()
{
Console.WriteLine ("This is IDemoInterface1");
}
// 隐式实现接口,需加public!!!
public void ReadThis2()
{
Console.WriteLine ("This is IDemoInterface2");
}
public static void Main (string[] args)
{
MainClass m = new MainClass();
((IDemoInterface1)m).ReadThis1();
m.ReadThis2();
}
}


3.接口与类
一个类继承接口相当于它继承抽象类。类的继承不仅是说明继承,而且也是实现继承,而接口的继承就是说明继承。
接口和抽象类的区别。
接口用于规范,抽象类用于共性。

接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。

抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。

抽象类可以提供某些方法的部分实现,接口不可以。

抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。

在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写(这就是为什么说接口是一个类的规范了)。

接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。

此外接口不能包含字段、构造函数、析构函数、静态成员或常量。
C#中的接口和类有什么异同。

异:

不能直接实例化接口。

接口不包含方法的实现。

接口可以实现多继承,而类只能是单继承。

类定义可在不同的源文件之间进行拆分。

同:

接口、类和结构可从多个接口继承。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

接口可以包含事件、索引器、方法和属性。
一个类可以实现多个接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: