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

 根据原博概述,加自己理解,稍有改动。
 
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#中的接口和类有什么异同。 
异: 
不能直接实例化接口。 
接口不包含方法的实现。 
接口可以实现多继承,而类只能是单继承。 
类定义可在不同的源文件之间进行拆分。 
同: 
接口、类和结构可从多个接口继承。 
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。 
接口可以包含事件、索引器、方法和属性。 
一个类可以实现多个接口。
 
posted @ 2015-12-08 15:11  王赛  阅读(2549)  评论(0编辑  收藏  举报