接口笔记

 

 

接口

 

 

接口(interface)定义了一个可由类和结构实现的协定。接口可以包含方法、属性、事件和索引器。接口不提供它所定义的成员的实现--它仅指定实现该接口的类或结构必须提供的成员。

抽象类是虚方法的特例,接口又是抽象类的特例;

  一个接口声明可以声明零个或多个成员。

  接口的成员必须是方法、属性、事件或索引器。

  接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型,也不能包含任何种类的静态成员。

  所有接口成员都隐式地具有public访问属性

  接口成员声明中包含任何修饰符都属于编译时错误。具体来说,不能使用修饰符abstract、public、protected、internal、private、virtual、override或static来声明接口成员。

 

完全限定接口成员名:

 

接口成员有时也用它的完全限定名(fully qualified name)来引用。接口成员的完全限定名是这样组成的:声明该成员的接口的名是这样组成的:声明该成员的接口的名称,后跟一个点,再后跟成员的名称。成员的完全限定名将引用声明该成员的接口。

 

显示接口成员实现:

 

  为了实现接口,类或结构可以声明显示接口成员实现(explicit interface memeber implementation)。显示接口成员实现的就是一种方法、属性、事件或索引器声明,它使用完全限定接口成员名称作为标识符。

 

显示接口成员实现由两个主要用途:

 

  由于显示接口成员实现不能通过类或结构实例来访问,因此它们就不属于类或结构的自身的公共接口。当需要在一个公用类或结构中实现一些仅供内部使用(不允许外界访问)的接口时,这就特别有用。

  

  显示接口成员的实现可以消除因同时含有多个相同签名的接口或成员所引起的多义性。如果没有显示接口成员实现,一个类或结构就不可能为具有相同签名和返回类型的接口成员分别提供相应的实现,也不可能为具有相同签名和不同返回类型的所有接口成员中的任何一个提供实现。

 

显示接口成员实现:

 

   在方法调用、属性访问或索引器访问中,不能直接访问“显示接口成员实现”的成员,即使用它的完全限定名也不行。“显示接口成员实现”的成员只能通过接口实例访问,并且在通过接口实例访问时,只能用该接口成员的简单名称来引用。

   显示接口成员实现中包含访问修饰符属于编译时错误,而且包含abstract、virtual、override、或static修饰符也属于编译时错误。

   显示接口成员实现具有与其他成员不同的可访问性特征。由于显示接口成员实现永远不能在方法调用或属性访问中通过它们的完全限定名来访问,因此,他们似乎是private(私有的)。但是,因为它们可以通过接口实例来访问,所以他们似乎又是public(公共的)。

public interface IDlicence 
    {
        void GetLicen();
    }

   public class Teacher:IDlicence
    {
        public void GetLicen() 
        {

            Console.WriteLine("获得驾照");
        }

    }
    class Test 
    {
       public static void DriveCar(string name, object o)
        {

            IDlicence dl = o as IDlicence;//实现接口,相当于JSP中的implement
            dl.GetLicen();
            if (dl != null)
            {
                Console.WriteLine(name + "开动了汽车");
            }
            else
            {
                Console.WriteLine(name + "没有驾照不能开车!");
            }
        }


    }


    class Program
    {
        
        static void Main(string[] args)
        {
            
           
            Teacher t = new Teacher();
            Test.DriveCar("教师",t);
            
            Console.ReadLine();



        }
    }

 

posted @ 2013-10-19 22:18  勿念  阅读(195)  评论(0编辑  收藏  举报