接口

1、接口本质就是一个特殊的抽象类

2、定义规范。光说不做

3、默认就是public abstract,在接口中定义方法的时候不能写访问修饰符

4、接口中不能定义字段

5、接口不能包含构造函数(构造函数一般是用来初始化字段的值,而接口中是没有字段的,所以不能包含结构函数)

6、接口中也可以定义属性(属性本质就是方法,而在编译的时候这个属性的get set 块变成抽象方法等着类区实现,不会生成字段)

7、接口是不能被实例化的,实现了接口的类必须要实现接口中所有的成员

 

接口与抽象类的区别

8、抽象类中可以有非抽象成员,接口只能定义方法属性 索引器 事件

9、什么时候用抽象类,什么时候用接口

A类的成员需要被继承并且有子类必要要实现的方法   抽象类

只定义规范   接口

 

 

10、不同的族类的事物具有相同的功能 找不出父类 这个时候就可以用接口

 

11、继承的时候必须要在接口之前

 

12、一个类可以实现多个接口,如果同时实现继承与接口,类需要放在第一个

13、可以将接口的方法实现为虚方法或者抽象方法 让子类重写

 

14、接口可以相互继承并且可以多继承

 

15、显示实现接口其实是为了解决重名的问题

16、如果显示实现了接口 那么这个方法只能通过接口变量来调 因为显示实现的时private的    Void Irun Run()

17、不要把一个接口定义为一个多功能接口,会造成接口污染

 

 

静态类不能被继承,因为其本质是一个密封类

静态成员先加载,静态构造方法会在类的成员第一次访问时调用

View Code
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace Duck_接口
  8 {
  9     class Program
 10     {
 11         static void Main(string[] args)
 12         {
 13             RealDuck myR = new RealDuck();
 14             myR.Say();
 15             Duck myd = new MuDuck();
 16             myd.Swimm();
 17             IYaJiao myYa = new XiaoPiDuck();
 18             myYa.Say();
 19             DuckFactory mydF = new DuckFactory();
 20             Console.WriteLine("请输入");
 21             mydF.GetAnyDuck(Console.ReadLine()).Swimm();
 22             //调用一个会叫的鸭子
 23             Console.WriteLine("请输入会叫的鸭子");
 24             mydF.GetKnowYaJiaoDuck(Console.ReadLine()).Say();
 25 
 26             Console.ReadKey();
 27         }
 28     }
 29     //橡皮鸭子 木鸭子 真实的鸭子 三种鸭子都会游泳 而橡皮鸭子和真实的鸭子会叫 只是叫声不一样 橡皮鸭子 唧唧叫 真实鸭子嘎嘎叫 木鸭子不会叫
 30 
 31     abstract class Duck
 32     {
 33         public abstract void Swimm();
 34     }
 35     class MuDuck : Duck
 36     {
 37         public override void Swimm()
 38         {
 39             Console.WriteLine("木鸭子会游泳");
 40         }
 41  
 42     }
 43     class XiaoPiDuck : Duck,IYaJiao
 44     {
 45         public override void Swimm()
 46         {
 47             Console.WriteLine("橡皮鸭子会游泳");
 48         }
 49         public void Say()
 50         {
 51             Console.WriteLine("唧唧叫 ");
 52         }
 53     }
 54     class RealDuck : Duck,IYaJiao
 55     {
 56         public override void Swimm()
 57         {
 58             Console.WriteLine("真鸭子会游泳");
 59         }
 60         public void Say()
 61         {
 62             Console.WriteLine("嘎嘎叫");
 63         }
 64     }
 65     interface IYaJiao
 66     {
 67         void Say();
 68     }
 69     class DuckFactory
 70     {
 71         public Duck GetAnyDuck(string name)
 72         {
 73             Duck myd = null;
 74             switch (name)
 75             {   
 76                 case "真鸭子":
 77                     myd = new RealDuck();
 78                     break;
 79                 case "木鸭子":
 80                     myd = new MuDuck();
 81                     break;
 82                 case "橡皮鸭子":
 83                     myd = new XiaoPiDuck();
 84                     break;
 85                 default:
 86                     break;
 87             }
 88             return myd;
 89         }
 90         public IYaJiao GetKnowYaJiaoDuck(string name)
 91         {
 92             IYaJiao myY = null;
 93             switch (name)
 94             {
 95                 case "真鸭子":
 96                     myY = new RealDuck();
 97                     break;
 98                 case "橡皮鸭子":
 99                     myY = new XiaoPiDuck();
100                     break;
101                 default:
102                     break;
103             }
104             return myY;
105         }
106     }
107 }

 

posted on 2012-12-16 00:08  陈谨  阅读(111)  评论(0编辑  收藏  举报