首页 > 代码库 > 接口(学习中笔记)
接口(学习中笔记)
接口可以包含方法、属性、事件和索引器,但不能是常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。 interface IMyExample { string this[int index]{get;set;} event EventHandler Even; void Find(int value); string Point{get;set;} } public delegate void EventHandler(object sender,Event e);
类和结构可以多重实例化接口。
1、C#中的接口是独立于类来定义的,这与C++模型是对立的,在C++中接口实际上就是抽象基类。 2、接口和类都可以继承多个接口 3、类可以继承一个基类,接口根本不能继承类。 4、一个接口定义一个只有抽象成员的引用类型。C#中一个接口实际所做的,仅仅只存在着方法标志,但根本就没有执行代码。这就暗示了不能实例化一个接口,只能实例化一个派生自该接口的对象。
接口是一组包含了函数型方法的数据结构。 类的基列表同时包含基类和接口时,列表中首先出现的是基类。
接口成员默认访问方式是Public。接口成员定义不能包含任何修饰符,比如成员定义前不能加abstract,public,protected,internal,private,virtual,override或static修饰符。
对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的,如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员,但由于接口支持多继承,在多继承中,如果两个父接口含有同名的成员,这就产生了二义性(这也正是C#中取消了类的多继承机制的原因之一),这时需要尽心显示的定义;
接口作为参数示例:
//接口做为参数传递,传递的是实现了接口的对象; //接口作为类型返回,返回的是实现了接口的对象。 //定义接口 public interface IPerson { void Say(); } public class ManPerson:IPerson { public void Say() { Console.WriteLine("男人说"); } } public class WomanPerson : IPerson { public void Say() { Console.WriteLine("女人说"); } } // public class Person { public void Get(IPerson iPerson) { iPerson.Say(); } } class Program { static void Main(string[] args) { ManPerson m = new ManPerson(); WomanPerson w = new WomanPerson(); Person p = new Person(); p.Get(m); p.Get(w); Console.ReadKey(); } }
//如果类实现了某个接口,类也隐式地继承了该接口的所有父接口,不管这些父类接口有没有在类定义的基类表中列出。 using System interface IControl { void Paint(); } interface ITextBox:IControl { void SetText(string text); } interface IListBox:IControl { void SetItems(string[] items); } interface IComboBox:ITextBox,IListBox { //方法 } public class TextBox:IComboBox { //实现IComboBox接口方法以及父接口的方法 } 这里,接口IcomboBox继承了ITextBox和IListBox,类TextBox不仅实现了接口ITestBox,还实现了接口ITextBox的父接口IControl。