博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#学习笔记02——接口
阅读量:6700 次
发布时间:2019-06-25

本文共 3466 字,大约阅读时间需要 11 分钟。

本身并不实现功能,但提供一种模板定义,为从它继承类或结构提供了一种定义的规范

有了接口,程序员可以把程序定义的更积极啊清晰和条理化

  • 理解接口
  1. 接口支持多继承;抽象类不能实现多继承
  2. 接口只能定义抽象规则;抽象类即可以定义规则,还可以提供已实现的成员
  3. 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念
  4. 接口可以用于支持回调;抽象类不能支持回调,因为继承不支持
  5. 接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法
  6. 接口刻意作用于值类型和引用类型;抽象类只能作用于引用类型
  • 作用上的区别 抽象类&接口
    1. 抽象类 是对象的抽象,着重表现在继承上,从抽象类派生的类和抽象类存在派生关系
    2. 接口 用来定义一组行为规范,一旦一个类从一个接口继承后,使用这个类的程序员就会知道这个类肯定包含接口定义的行为,而不用关心如何实现
      1 using cs002; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7  8  9 namespace cs00210 {11     //定义抽象类12     public abstract class Travel13         {14             protected string _name;15             public abstract string Name//抽象属性16             {17                 get;18                 set;19             }20             public void Show()21             {22                 Console.WriteLine("这是{0}", _name);23             24             }25             public abstract void GetWheel();26         }27         //定义接口28         interface IAction29         {30             void Move();31         }32        interface test33     {34         void fuck();35     }36     37        public class Car:Travel,IAction,test38         {39             public override string Name40             {41                 get42                 {43                     return _name;44                 }45 46                 set47                 {48                     _name = value;49                 }50             }51             public Car(string name)52             { _name = name; }53         54             public override void GetWheel()55             {56                 Console.WriteLine("小汽车有四个轮子");57             }58             public void Move()59             {60                 Console.WriteLine("小汽车行走在公路上");61             }62         public void fuck()63         {64             Console.WriteLine("fuck it!");65         }66     }67         }68     class Program69     {70         static void fun()71         {72             for (int i = 0; i < 10; i++)73                 Console.Write(i + " ");74             Console.WriteLine(" ");75         }76         static void Main(string[] args)77         {78         Car c0 = new Car("宇宙无敌");79         c0.GetWheel();80         c0.Move();81         c0.fuck();82         }83     }
      View Code
实现接口 接口是在其派生类中完成的 在c#中,派生类必须实现接口定义的成员;一个类可以派生自多个接口,接口之间用逗号隔开
    1. 实现接口↑
    2. 显式实现:继承多个接口,接口之间有重名的方法或属性;当显示实现接口时,类成员只能通过接口使用
      1 using cs002; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7  8  9 namespace cs00210 {11     interface It112     {13         void fuck();14     }15     interface It216     {17         void fuck();18     }19     public class test : It1, It220     {21         public test() { }22         void It1.fuck()23         {24             Console.WriteLine("fuck you!");25         }26         void It2.fuck()27         {28             Console.WriteLine("fuck me!");29         }30     }31     class Program32     {33         static void fun()34         {35             for (int i = 0; i < 10; i++)36                 Console.Write(i + " ");37             Console.WriteLine(" ");38         }39         static void Main(string[] args)40         {41             test t = new test();42             It1 t1 = (It1)t;43             t1.fuck();44             It2 t2 = (It2)t;45             t2.fuck();46 47         }48     }49 }
      View Code

       

转载于:https://www.cnblogs.com/yuelien/p/6623583.html

你可能感兴趣的文章
Command 传参的几种方式
查看>>
android 弹起键盘把ui顶上去的解决办法
查看>>
Python操作Excel删除一个Sheet
查看>>
小程序 公众号/h5相互跳转-webview
查看>>
php __FILE__,__CLASS__等魔术变量,及实例
查看>>
AaronYang WCF教程目录
查看>>
关于.net的垃圾回收和大对象处理_标记
查看>>
CentOS常用到的查看系统命令
查看>>
kafka学习总结
查看>>
第七章 数组
查看>>
***PHP 去除换行符
查看>>
Ubuntu Sudo 无法解析的主机
查看>>
Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案
查看>>
Android中SimpleAdapter的使用—自定义列表
查看>>
Java常见Jar包的用途
查看>>
P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
查看>>
MySQL同步状态双Yes的假象及seconds_behind_master的含义
查看>>
DAL调用SP时出现的异常处理
查看>>
javascript学习(11)——[设计模式]工厂模式
查看>>
BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP
查看>>