说一下接口怎么使用吧 多继承时要用,比如有些属性或方法很多类都有,那就可以将这些封装到接口中,例如系统的:System.Data.IDbConnection,SystemData.IDataReader等。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第十五章 接口摘要: 接口的应用及完全限定名方式定义接口的应用。 一、 接口与继承l C#支持单实现继承和多接口继承l 接口中可以定义:事件、无参属性(属性)、含参属性(索引器);C#不允许接口定义任何静态成员(CLR却允许定义静态成员);CLR不允许接口定义实例字段和构造器。l 缺省为public abstract 方法,但不可用任何修饰符进行修饰(包括public)l 将值类型转换为接口类型(假设其实现了某个接口),则值类型被装箱为引用类型,以调用其中的接口方法。 实现接口继承或实现继承的原则:l 存在IS-A关系使用实现继承,存在CAN-DO关系使用接口继承l 实现继承可继承父类型的实现,由于接口中没有定义方法的实现,因此继承后必须实现方法l 考虑到每个人对接口实现的不同,使用实现继承可同一部分功能的实现l 为父类型添加方法可能不影响使用继承自该类型实现的用户,而为接口添加方法导致用户必须为新方法添加实现二、 利用接口改变已装箱类型中的字段 实际上是将已装箱类型转型为接口类型,然后通过调用方法进行值改变。 因为对已装箱类型进行拆箱到原值类型将在堆栈上声称新的值类型,调用这个新的值类型的方法不能改变以装箱类型的值。 三、 实现多个有相同方法的接口使用 接口名.方法名 的形式声明实现了那个接口的方法。成为 完全限定接口名,这样定义的方法被认为是私有方法,不能使用类型本身调用;当将类型转换为接口类型时,完全限定接口名定义的方法又变成一个公有方法。(比较奇特,也很有用);使用完全限定接口名定义的方法不能使用任何访问修饰符。 四、 显示接口成员实现 问题的提出:通常接口接受的参数为Object,这样的参数非强类型安全的,可能需要在我们自定义类型的接口实现中定义强类型安全的方法,同时也需要实现“接口合同” 问题解决:通过上面的完全限定接口名方式定义接口方法,可达到这样的效果。 优点:获得强类型支持,可在编译期发现类型不匹配问题,而不是到运行期。同时,调用自定义的方法不必进行装箱操作,提高了效率。 缺点:由于我们在类型中隐藏了接口实现(必须将转型为接口才能暴露出接口定义的方法),因此可能对使用造成不便,因此应该慎用该方法。 接口是一个抽象,也是一种约束规则。规则办事,总比没有的好,更何况一个项目里有这么模块,类。接口也有缺点,一旦定义了就不能修改(接口本身就是一个约定)每添加一个功能都定义新的接口那维护接口也是烦死人的,所以什么时候选择接口或抽象类是很重要。接口本身只具描述性,它本身没有任何功能实现,属于一个抽象体。一个方法是针对接口操作的情况下,这个方法的和外界偶度很低。如果一个针对IDBCOMMAND接口操作的方法,这个方法可以操作所有IDBCOMMAND派生的对象,OledbCommand,SqlCommand等,无论你传的是什么对象,只要实现了这个接口这个方法就可以运行(而无须改变方法内部的代码)。在。NET下任何对象都可以封装object,直接把方法定义object不就行啦。object本身根本不可以说明他能做什么,在方法里判断参数是什么类型然后再去做什么是很糟糕的。方法对外不是封闭的,偶度太高。当然也可以用抽象类来解决,但在。NET下对象只能单一继承。 关于路径 一个奇怪的问题?? 问一个多表联合查询问题 。 (WinForm)我用的是VS2003,怎么就找不到datagridview控件呢?弱智的问题,大虾们别笑~ 关于c#ftp服务的开发 求一个 DataTable 与 HashTable互转类。 再次紧急求救 为什么自己做的一个纯黑色和纯白色的鼠标指针在空间中全部显示的都是一坨黑? 关于TEXTBOX为什么不能调整height? 为何ArgumentException 异常无法扑捉 关于Socket的奇怪问题,头晕啊~~ 一个带数据库(比如access)的项目能否刻进光盘,还有.net框架要不要一起刻进去?
规则办事,总比没有的好,更何况一个项目里有这么模块,类。
接口也有缺点,一旦定义了就不能修改(接口本身就是一个约定)
每添加一个功能都定义新的接口那维护接口也是烦死人的,所以什么时候选择接口或抽象类是很重要。接口本身只具描述性,它本身没有任何功能实现,属于一个抽象体。
一个方法是针对接口操作的情况下,这个方法的和外界偶度很低。
如果一个针对IDBCOMMAND接口操作的方法,这个方法可以操作所有IDBCOMMAND派生的对象,
OledbCommand,SqlCommand等,无论你传的是什么对象,只要实现了这个接口这个方法就可以运行(而无须改变方法内部的代码)。
在。NET下任何对象都可以封装object,直接把方法定义object不就行啦。
object本身根本不可以说明他能做什么,在方法里判断参数是什么类型然后再去做什么是很糟糕的。
方法对外不是封闭的,偶度太高。
当然也可以用抽象类来解决,但在。NET下对象只能单一继承。