net接口学习笔记

By admin in 4858.com on 2019年4月10日

1.
类和结构能够落到实处接口

Interface/接口,interface接口

  1. 类和结构能够完结接口

贰.
接口注解包涵如下三种档次:属性、方法、事件和目录;这一个函数表明无法包罗其余达成代码,而在每三个成员的重心后必须选用分号

  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 }

1.接口的注脚

  接口的宣示无法包罗:数据成员,静态变量;只可以分包如下类型的静态成员函数的表明:方法,属性,事件,索引器。声明中不能包括其余实现的代码,而在每种成员成名的基点后,必须使用分号。

  接口申明能够有别的的修饰符public、protect、internl或private。

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

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

2.
接口注明包涵如下多样类型:属性、方法、事件和目录;那几个函数注解无法包罗别的达成代码,而在每1个成员的关键性后务必利用分号

2.接口的贯彻

  只有类和结构体才能促成接口,并且必须在基类列表中包涵接口名称;使用接口的类或组织亟待为接口的每一个成员提供完成。

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 }

  假如三个类即继承了基类,又完毕了接口,那么在那么些类的基类列表中的基类名称必须放在全部的接口的前头。并且三个类只好有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(a,b);
 8     //将类型转化为接口类型
 9     IMyInterface mif = mc as IMyInterface;
10     mif.Method(a,b);   
11 }

输出结果:13

       13

选择as举办强制转换的利益:假若类完结了接口就会重回接口的引用(平安无事)假诺类未有兑现接口就会抛出特别,方便及时的发现错误。

2.接口的兑现

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

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 }

  假如五个类即继承了基类,又达成了接口,那么在那么些类的基类列表中的基类名称必须放在全部的接口的前边。并且八个类只好有2个基类,列出的其余体系必须都以接口名。

  接口不仅仅是类或结构要达成的成员列表,它是三个引用类型,大家无法直接通过类对象的分子访问接口,然则大家得以经过把类对象引用强制转换为接口类型来获取指向接口的引用。那样我们就足以选拔点号来调用接口的不二等秘书籍了。那里转换推荐用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个类达成的五个接口个中有双重的成员(具有同样的签字和同样的回来类型),那么在此类达成接口成员的时候,完毕一遍就足以满意全体包蕴重复成员的接口。

 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     }

唯独如此就唯有显式接口成员的兑现,而未有类级其余贯彻,所以在实例化该类的指标后,是无能为力点出该形式的。借使有显式接口成员贯彻,类级其他达成是同意的,不过不是必须的。并且显式接口成员贯彻智能通过指向接口的引用来拜访,即便是类个中的成员函数来对接口成员进行访问。

倘使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. 映现接口的贯彻注意上边包车型大巴代码

    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访问器
         }
     }
    

四.接口的继承

要钦赐某些接口继承别的接口,应在接口评释中把接口以逗号分隔的列表方式放在接口名称从此。和类的一而再格式相同。可是又与类区别,三个接口可以三番五次任意多少个接口,能够展开多重继承。子接口除了含有本人注明的接口之外还包蕴持有父接口的具有接口成员。

四.接口的两次三番

要内定有些接口继承其余接口,应在接口评释中把接口以逗号分隔的列表方式放在接口名称从此。和类的存在延续格式相同。可是又与类分裂,八个接口能够继续任意四个接口,能够实行多重继承。子接口除了饱含自身阐明的接口之外还包蕴富有父接口的具备接口成员。

  

5.代码Demo

4858.com 14858.com 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

运维结果:

4858.com 3

  

 

4858.com ,5.代码Demo

4858.com 44858.com 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

运维结果:

4858.com 6

  

发表评论

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

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有