加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

对接口的理解

发布时间:2020-12-16 23:10:12 所属栏目:大数据 来源:网络整理
导读:你要把接口也理解成一种类,比如有个基类叫baseClass,一个继承他的类叫subClass,那么subClass也算是baseClass类型的,可以有这样的写法baseClass bc=new subClass() 接口也是一样,如果一个类MyClass实现了继承一个接口interfaceClass,你事实上可以把MyCl

你要把接口也理解成一种类,比如有个基类叫baseClass,一个继承他的类叫subClass,那么subClass也算是baseClass类型的,可以有这样的写法baseClass bc=new subClass() 接口也是一样,如果一个类MyClass实现了继承一个接口interfaceClass,你事实上可以把MyClass叫做interfaceClass的子类,可以有这样的写法interfaceClass ic=new MyClass() 这就是所说的多态的一部分基础。可以举个实在点的例子,比如你想写一个方法叫EnumAll,参数是一个类的实例,作用是例举出该实例中的每个子元素并打印出元素的ToString(如窗体的子元素是窗体中的控件,数组的子元素就不用说了吧),你就遇到两个问题 首先EnumAll参数的类型是什么。参数应该可以是一个Form类型,因为窗口中有很多控件,使用EnumAll和一个Form的实例做参数可以打印出包含在该参数窗体中的每个控件的名字;但是一个数组Object[]类型应该也可以使用EnumAll方法,EnumAll可以列举Object[]中的每个元素并打印。你是要把方法写成void EnumAll(Form e)还是写成void EnumAll(Object[] e)? 然后就是EnumAll怎样实现才能得到不同类型的实例的子元素?如果是void EnumAll(Form e)的形式,要想得到子元素要用 foreach(Control c in e.Controls) { Console.WriteLine(c.ToString()); } 的写法,如果数组要用 for(int i=0;i<e.length;++i) { Console.WriteLine(e[i].ToString()); } 的实现方法。 Form和Object[]是两种完全不沾边的类型,那么EnumAll到底该怎么写? 这时就可以使用接口,可以定义一个接口 interface IEnumable { Object next();//返回下一个子元素的方法 } 然后使Form和Object[]类型都实现IEnumable接口(实现方法是不同的,如前面所说),然后这样写EnumAll方法: void EnumAll(IEnumable e)//一开始就说了,实现接口的类都可以算是接口的子类 {Object o; while((o=e.next)!=null) { Console.WriteLine(o.ToString()); } } 于是解决了上面的问题。 不知道有没有说清楚,如果理解了上面举的例子算是初步了解接口了,接口的多继承和多态性还有很多内容。 另外,上面的东西只是举例子,虽然C#中确实有IEnumable接口,但其定义要复杂的多,我只是举个简化的自己编的例子^_^。C#的(应该说是FCL吧)很多类都实现了IEnumalbe接口,像集合类和数组等。 FCL是.NET框架类库,Framework Class Library,不论在C#,J#,VB.NET或其他.NET开发语言中使用的.NET提供的类都是FCL中的类,就是说,.NET的开发其实是和语言无关的。不同语言编写的程序由于使用同一类库(其实等于被翻译成了同一种中间语言,Common Intermediate Language,CIL),使得各种不同语言写的程序集可以通用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读