net接口学习笔记

1.
类和布局能够落到实处接口

Interface/接口,interface接口

  1. 类和社团能够落到实处接口

2.
接口评释包涵如下各样档次:属性、方法、事件和目录;这么些函数评释无法包涵别的实现代码,而在每一种分子的器重点后务必利用分号

  1. 一而再接口的类或协会必须完成接口中的所有成员

  2. 显示接口的贯彻注意下边的代码

    class Program

     {
         static void Main(string[] args)
         {
             SampleClass_1 sc = new SampleClass_1();
             IControl ctr1 = (IControl)sc;
             ISurface srfc = (ISurface)sc;
             // 调用一样的方法,继承
             sc.Paint();
             ctr1.Paint();
             srfc.Paint();
             Console.WriteLine();
    
             //显式接口实现
             SampleClass_2 obj = new SampleClass_2();
             IControl c = (IControl)obj;
             ISurface s = (ISurface)obj;
             obj.Paint();
             c.Paint();
             s.Paint();
    
             Console.ReadKey();
         }
     }
     public interface IControl // 接口可以有访问修饰符
     {
         void Paint();      //成员不允许有任何访问修饰符,默认public
         int P { get; }
     }
     public interface ISurface
     {
         void Paint();
     }
     class SampleClass_1:IControl,ISurface
     {
         //IControl.Paint和ISurface.Paint都会调用这个方法
         public void Paint()
         {
             Console.WriteLine("Paint method in SampleClass");
         }
         private int _value=10;
         public int P
         {
             get { return _value; }
             set { _value = value; }  //可以添加set访问器
         }
     }
     class SampleClass_2:IControl ,ISurface 
     {
         //显式接口实现
        void IControl.Paint()  //这时候不能加访问修饰符public, 要完全和接口定义一致
         {
             Console.WriteLine("IControl.Paint");
         }
         void ISurface.Paint()
         {
             Console.WriteLine("ISurface.Paint");
         }
         public void Paint()
         {
             Console.WriteLine("SampleClass_2.Paint");
         }
         private int _value=10;
         int IControl.P
         {
             get { return _value; }
             //set { }显式接口必须和接口定义完全一致,不能任意添加set访问器
         }
     }
    

  

一.
类和结构能够完毕接口 贰.
接口注脚包罗如下各样档次:属性、方法、事件和目录;那一个函数注解不能够包蕴任何…

net接口学习笔记。一.接口的申明

  接口的宣示不可能包罗:数据成员,静态变量;只好分包如下类型的静态成员函数的宣示:方法,属性,事件,索引器。注明中不可能包罗其余完毕的代码,而在各类成员成名的主导后,必须采纳分号。

  接口评释能够有其余的梳洗符public、protect、internl或private。

  接口的分子是隐式的public,差异意任何访问修饰符,包涵public。

1 Public Interface IMyInterface
2 {
3      //接口成员是隐式的public,并且只有声明
4      int Method1(int nVar1,int nVar2) ;          
5 }

一.接口的注明

  接口的扬言无法包括:数据成员,静态变量;只好分包如下类型的静态成员函数的宣示:方法,属性,事件,索引器。注脚中不可能包括其余实现的代码,而在种种成员成名的宗旨后,必须利用分号。

  接口证明能够有其它的梳洗符public、protect、internl或private。

  接口的分子是隐式的public,不容许任何访问修饰符,包罗public。

1 Public Interface IMyInterface2 {3      //接口成员是隐式的public,并且只有声明4      int Method1(int nVar1,int nVar2) ;          5 }

二.
接口注解包蕴如下各种类型:属性、方法、事件和目录;这个函数证明不能够包括别的达成代码,而在每八个分子的基点后必须使用分号

2.接口的达成

  唯有类和结构体才能完成接口,并且必须在基类列表中总结接口名称;使用接口的类或结构亟待为接口的每1个分子提供完成。

1 Class MyClass:IMyInterface
2 {
3     //在进行隐式的实现接口成员的时候,访问修饰符要设为public   
4      public int Method(int a,int b)
5     {
6         Console.WriteLine("{0}",a+b);
7         return a+b;
8     }
9 }

  若是二个类即继承了基类,又达成了接口,那么在那么些类的基类列表中的基类名称必须放在全数的接口的近日。并且二个类只好有二个基类,列出的别的门类必须都以接口名。

  接口不仅仅是类或结构要完结的成员列表,它是一个引用类型,大家无法直接通过类对象的积极分子访问接口,然则大家可以因而把类对象引用强制转换为接口类型来赢得指向接口的引用。那样大家就足以应用点号来调用接口的格局了。这里转换推荐用as实行转移。

 1 Static void Main(string[] args)
 2 {
 3     int a = 5;
 4     int b = 8;
 5     MyClass mc = new MyClass();
 6     //调用类对象的实现方法
 7     mc.Method(a,b);
 8     //将类型转化为接口类型
 9     IMyInterface mif = mc as IMyInterface;
10     mif.Method(a,b);   
11 }

出口结果:1三

       13

利用as进行强制转换的益处:借使类完毕了接口就会再次回到接口的引用(平安无事)假诺类未有兑现接口就会抛出十一分,方便及时的发现错误。

二.接口的落到实处

  唯有类和结构体才能得以实现接口,并且必须在基类列表中包涵接口名称;使用接口的类或组织亟待为接口的每叁个成员提供达成。

1 Class MyClass:IMyInterface2 {3     //在进行隐式的实现接口成员的时候,访问修饰符要设为public   4      public int Method(int a,int b)5     {6         Console.WriteLine("{0}",a+b);7         return a+b;8     }9 }

  假诺一个类即继承了基类,又达成了接口,那么在这么些类的基类列表中的基类名称必须放在全数的接口的前边。并且叁个类只好有1个基类,列出的别的门类必须都以接口名。

  接口不仅仅是类或组织要促成的分子列表,它是一个引用类型,大家不可能平昔通过类对象的成员访问接口,可是大家得以由此把类对象引用强制转换为接口类型来获得指向接口的引用。那样我们就能够利用点号来调用接口的主意了。那里转换推荐用as实行更换。

 1 Static void Main(string[] args) 2 { 3     int a = 5; 4     int b = 8; 5     MyClass mc = new MyClass(); 6     //调用类对象的实现方法 7     mc.Method; 8     //将类型转化为接口类型 9     IMyInterface mif = mc as IMyInterface;10     mif.Method;   11 }

输出结果:壹3

     13

接纳as进行强制转换的益处:借使类达成了接口就会回来接口的引用假诺类没有兑现接口就会抛出十一分,方便及时的发现错误。

3.
接续接口的类或协会必须兑现接口中的全部成员

三.落到实处两个接口

  类或组织得以兑现自由数量的接口。

  全数达成的接口必须列在基类列表中且以逗号分隔。

  假诺三个类完毕的四个接口当中有双重的分子(具有同样的签字和同等的回到类型),那么在此类完结接口成员的时候,完成一回就能够满足全部包罗重复成员的接口。

 1     interface interface1 { void Method(int a ,int b);}
 2     interface interface2 { void Method(int a, int b);}
 3     //实现多个接口用逗号相隔
 4     public class MyClass : interface1, interface2
 5     {
 6         /*
 7          * 如果两个接口成员函数的返回类型和参数一致,
 8          * 那么进行一次实现就可以了
 9          */
10         public void  Method(int a, int b)
11         {
12             Console.WriteLine("{0}", a + b);
13         }
14     }

  假若想刻意的离别那多个接口的接口成员,就须要创制显式的接口成员成员贯彻。格式:接口名称+点分隔符+接口的成员函数。注意:在突显的调用接口成员的时候,已经暗中同意为public,不可能再添加访问修饰符了。

 1     interface interface1 { void Method(int a ,int b);}
 2     interface interface2 { void Method(int a, int b);}
 3     //实现多个接口用逗号相隔
 4     public class MyClass : interface1, interface2
 5     {
 6         //显示的实现interface1的接口成员
 7         //已经默认为public,不能添加访问修饰符了
 8         void interface1.Method(int a, int b)
 9         {
10             Console.WriteLine("{0}", a + b);
11         }
12         void interface2.Method(int a, int b)
13         {
14             Console.WriteLine("{0}", a + b);
15         }
16     }

不过这么就唯有显式接口成员的达成,而并未有类级其他兑现,所以在实例化该类的对象后,是力不从心点出该措施的。假诺有显式接口成员贯彻,类级其他实现是允许的,可是或不是必须的。并且显式接口成员贯彻智能通过指向接口的引用来拜访,即使是类当中的分子函数来对接口成员进行走访。

若是一个类达成了接口,那么它的子类也会持续其基类完成的接口成员,无需再一次完毕。

三.落到实处多少个接口

  类或结构可以实现自由数量的接口。

  全体达成的接口必须列在基类列表中且以逗号分隔。

  如若二个类达成的四个接口个中有再度的分子(具有同等的署名和平等的回到类型),那么在此类完结接口成员的时候,完毕二遍就足以满足全数包括重复成员的接口。

 1     interface interface1 { void Method(int a ,int b);} 2     interface interface2 { void Method(int a, int b);} 3     //实现多个接口用逗号相隔 4     public class MyClass : interface1, interface2 5     { 6         /* 7          * 如果两个接口成员函数的返回类型和参数一致, 8          * 那么进行一次实现就可以了 9          */10         public void  Method(int a, int b)11         {12             Console.WriteLine("{0}", a + b);13         }14     }

  若是想刻意的分开这七个接口的接口成员,就需求成立显式的接口成员成员贯彻。格式:接口名称+点分隔符+接口的分子函数。注意:在展现的调用接口成员的时候,已经暗中认可为public,无法再添加访问修饰符了。

 1     interface interface1 { void Method(int a ,int b);} 2     interface interface2 { void Method(int a, int b);} 3     //实现多个接口用逗号相隔 4     public class MyClass : interface1, interface2 5     { 6         //显示的实现interface1的接口成员 7         //已经默认为public,不能添加访问修饰符了 8         void interface1.Method(int a, int b) 9         {10             Console.WriteLine("{0}", a + b);11         }12         void interface2.Method(int a, int b)13         {14             Console.WriteLine("{0}", a + b);15         }16     }

而是这么就唯有显式接口成员的兑现,而从未类级别的贯彻,所以在实例化该类的指标后,是无力回天点出该方法的。要是有显式接口成员贯彻,类级其余贯彻是允许的,不过不是必须的。并且显式接口成员贯彻智能通过指向接口的引用来做客,即便是类在那之中的分子函数来对接口成员进行走访。

如若1个类完成了接口,那么它的子类也会连续其基类达成的接口成员,无需重新兑现。

  1. 来得接口的贯彻注意上边包车型地铁代码

    澳门葡京备用网址, class Program

     {
         static void Main(string[] args)
         {
             SampleClass_1 sc = new SampleClass_1();
             IControl ctr1 = (IControl)sc;
             ISurface srfc = (ISurface)sc;
             // 调用一样的方法,继承
             sc.Paint();
             ctr1.Paint();
             srfc.Paint();
             Console.WriteLine();
    
             //显式接口实现
             SampleClass_2 obj = new SampleClass_2();
             IControl c = (IControl)obj;
             ISurface s = (ISurface)obj;
             obj.Paint();
             c.Paint();
             s.Paint();
    
             Console.ReadKey();
         }
     }
     public interface IControl // 接口可以有访问修饰符
     {
         void Paint();      //成员不允许有任何访问修饰符,默认public
         int P { get; }
     }
     public interface ISurface
     {
         void Paint();
     }
     class SampleClass_1:IControl,ISurface
     {
         //IControl.Paint和ISurface.Paint都会调用这个方法
         public void Paint()
         {
             Console.WriteLine("Paint method in SampleClass");
         }
         private int _value=10;
         public int P
         {
             get { return _value; }
             set { _value = value; }  //可以添加set访问器
         }
     }
     class SampleClass_2:IControl ,ISurface 
     {
         //显式接口实现
        void IControl.Paint()  //这时候不能加访问修饰符public, 要完全和接口定义一致
         {
             Console.WriteLine("IControl.Paint");
         }
         void ISurface.Paint()
         {
             Console.WriteLine("ISurface.Paint");
         }
         public void Paint()
         {
             Console.WriteLine("SampleClass_2.Paint");
         }
         private int _value=10;
         int IControl.P
         {
             get { return _value; }
             //set { }显式接口必须和接口定义完全一致,不能任意添加set访问器
         }
     }
    

4.接口的连续

要内定某些接口继承别的接口,应在接口证明中把接口以逗号分隔的列表方式放在接口名称从此。和类的一连格式相同。不过又与类差别,三个接口能够继续任意五个接口,能够实行多重继承。子接口除了含有自身证明的接口之外还包罗全体父接口的具备接口成员。

4.接口的延续

要钦定有个别接口继承别的接口,应在接口注解中把接口以逗号分隔的列表方式放在接口名称从此。和类的继续格式相同。不过又与类不相同,2个接口能够几次三番任意两个接口,能够开展多重继承。子接口除了含有自个儿证明的接口之外还包罗持有父接口的兼具接口成员。

  

5.代码Demo

澳门葡京备用网址 1澳门葡京备用网址 2

 1 namespace ConsoleApplication2
 2 {
 3     interface ILoveWorld { void SayHello();}
 4     class Creature{}
 5 
 6     //基类和接口同时实现的时候,基类要放在最前面
 7     class Person : Creature,ILoveWorld
 8     {
 9         //隐式的声明接口,既可以被类的对象访问,又可以转换为接口引用对象访问
10         void SayHello()
11         {
12             Console.WriteLine("Hello World!");
13         }
14         //显式的声明接口成员,只能转换为接口引用对象来访问
15          void ILoveWorld.SayHello()
16         {
17             Console.WriteLine("Hello World!");
18         }
19     }
20     class Cat : Creature, ILoveWorld
21     {
22         //相对于显式的接口实现方式。类级别的接口实现不是必须的。
23         void ILoveWorld.SayHello()
24         {
25             Console.WriteLine("MiaoMiaoMiao");
26         }
27     }
28     class Dog : Creature, ILoveWorld
29     {
30         //在显式调用接口成员的时候不能用public 
31         void ILoveWorld.SayHello()
32         {
33             Console.WriteLine("WangWangWang");
34         }
35     }
36     class Program
37     {
38         static void Main(string[] args)
39         {
40             //声明一个Creature的数组
41             Creature[] pCreatureArray = new Creature[3];
42             //这里用到了上次学的面向对象的IS-A的关系
43             pCreatureArray[0] = new Person();
44             pCreatureArray[1] = new Cat();
45             pCreatureArray[2] = new Dog();
46             foreach (var creature in pCreatureArray)
47             {
48                 //利用as进行转换
49                 ILoveWorld b = creature as ILoveWorld;
50                 b.SayHello();
51             }
52             Console.ReadKey();
53         }
54     }
55 }

接口Demo

运维结果:

澳门葡京备用网址 3

  

 

5.代码Demo

澳门葡京备用网址 4澳门葡京备用网址 5

 1 namespace ConsoleApplication2 2 { 3     interface ILoveWorld { void SayHello();} 4     class Creature{} 5  6     //基类和接口同时实现的时候,基类要放在最前面 7     class Person : Creature,ILoveWorld 8     { 9         //隐式的声明接口,既可以被类的对象访问,又可以转换为接口引用对象访问10         void SayHello()11         {12             Console.WriteLine("Hello World!");13         }14         //显式的声明接口成员,只能转换为接口引用对象来访问15          void ILoveWorld.SayHello()16         {17             Console.WriteLine("Hello World!");18         }19     }20     class Cat : Creature, ILoveWorld21     {22         //相对于显式的接口实现方式。类级别的接口实现不是必须的。23         void ILoveWorld.SayHello()24         {25             Console.WriteLine("MiaoMiaoMiao");26         }27     }28     class Dog : Creature, ILoveWorld29     {30         //在显式调用接口成员的时候不能用public 31         void ILoveWorld.SayHello()32         {33             Console.WriteLine("WangWangWang");34         }35     }36     class Program37     {38         static void Main(string[] args)39         {40             //声明一个Creature的数组41             Creature[] pCreatureArray = new Creature[3];42             //这里用到了上次学的面向对象的IS-A的关系43             pCreatureArray[0] = new Person();44             pCreatureArray[1] = new Cat();45             pCreatureArray[2] = new Dog();46             foreach (var creature in pCreatureArray)47             {48                 //利用as进行转换49                 ILoveWorld b = creature as ILoveWorld;50                 b.SayHello();51             }52             Console.ReadKey();53         }54     }55 }

接口Demo

运营结果:

澳门葡京备用网址 6

  

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website