创建时间: 11/26/2006 10:46 PM, 更新时间: 11/26/2006 10:46 PM
为什么引入接口这个概念:
接口和类的定义很相似,但是接口主要用于负责功能的定义, 不负责功能的实现,类负责功能的具体实现
通过接口来规范类、操作类以及抽象类的概念,对类的构成进行限制
继承关系:
接口可以从一个或多个接口继承, 类也可以从一个或多个接口继承,但类只能从一个类继承,这一点和C++和Java不同(它们允许类之间的多重继承,但是多重继承是一个复杂的特性,与技术的首要使命是管理复杂性相背离,所以C#对多重继承进行了某种限制,博主注),类也可以同时从一个类和多个接口继承而来.
接口和类是有许多不同的,两者之间的区别主要体现在以下几个方面
● 接口可以用任何可访问性来声明,但接口成员必须全都具有公共可访问性。定义接口的成员时不能使用访问修饰符。
● 不能向成员或接口自身附加安全性权限。不能使用static、virtual、abstract和sealed来定义。
● 接口不能定义构造函数。因为接口只负责功能的定义,不能提供代码的实现。因此实现构造函数的定义也是没有意义的。
● 接口中不允许定义字段/field, 可以定义属性/Property,(字段是内部私有信息, 而属性是字段的访问器,当然不能在接口中保留私有信息了, 因为接口是一个公共接口, 没有一点私有特性.博主注)
如何使用:
通常使用大写字面“I”加英文单词的方式定义接口的名称,这样可以方便的识别接口和类,
类继承了接口,必须实现接口中的所有接口定义。否则编译时将会产生错误
实现接口的成员不允许是静态的,非公共的。为实现的方法和属性添加public关键字修饰才能保证编译正确。
参数类型和返回值
在实际的应用中,可以将类用作参数传递到方法中,接口同样可以作为参数应用, 通过传递一个接口,可以提高代码的重用性和灵活性.从C转过来,对于把类/接口作为参数和返回值类型总是感觉有点茫然,但是定下心来想一下,其似,类/接口就是一种数据类型,也就是说int,double这此简单数据类型可以去的地方(如参数,如返回类型)它们都可以作,而且它们还完成简单数据类型所不能完成的工作.
名称冲突
这点不比较复杂,没有理解透,继续学习中….
抽象类的定义
抽象类的用途与接口很相似。抽象类也不能实例化。这点和接口相同,但抽象类中可以定义方法的实现。可以把抽象类看作是接口和普通类的结合,这样更方便理解。接口处于更高的抽象层次上
抽象方法
抽象类中可以定义抽象方法,其定义方法为在所定义的方法前加abstract关键字
抽象成员不能是私有的: abstract public void method();
抽象方法没有实现,所以方法定义后面是分号,而不是常规的代码块
抽象类的派生类必须实现所有抽象方法
要实现抽象成员,必须使用override关键字,并且该成员不能为私有
密封类与密封方法
密封是面向对象中的另一个重要概念,密封限定了类的继承方式
密封类可以用来限制扩展性。当在程序中密封了某个类时,其他类不能从该密封类继承。使用密封类可以防止对类型进行自定义,这中特性在某些情况下与面向对象编程技术的灵活性和可扩展性是相抵触的。通常不建议使用密封的方法来处理类。密封类的定义是通过sealed关键字实现的
密封类不能用作基类
由于密封类的不可继承性,因此,它也不能是抽象类。密封类的主要作用是用于防止派生。密封类的这种特性使其从不用作基类,因此对密封类成员的调用速度略快。
密封类除了不能被继承外,与非密封类的用法大致相同
正是由于密封类的这种不可继承特性,因此在使用密封类的时候要对其可能产生的后果进行充分的考虑。通常,在类中含有敏感性信息时可以考虑使用密封类。
同密封类一样,密封方法可以保证方法不被重写
is运算符
is运算符用于检查对象是否与给定类型兼容。显然,is作为英文单词最常用的意思为“是”。可以用is来判断对象是否为某种给定的类型
强制转换
通常通过小括号“()”来执行, 某些类型之间的转换是不允许的,并且会产生错误
as运算符
as运算符用于在兼容的引用类型之间执行转换。与强制转换不同,as运算符并不会引发错误。当转换失败时,运算符将产生空,而不是引发异常
as运算符的这种特性可以避免在程序中抛出异常,保证程序的稳定性