首页 / C# / C#接口、抽象类和密封类
C#接口、抽象类和密封类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#接口、抽象类和密封类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2535字,纯文字阅读大概需要4分钟。
内容图文
![C#接口、抽象类和密封类](/upload/InfoBanner/zyjiaocheng/687/15d23530233f4e558d3c16785c4d2dc6.jpg)
定义接口
定义接口和定义类相似,只不过使用interface关键字.
在接口中按照与类和结构一样的方式声明方法,不允许指定任何访问修饰符.
此外,接口中的方法是没有实现的,它们只是声明。实现接口的所有类型都必须提供自己的实现 .下面是一个例子:
interface Icomparable
{
int CompareTo(object obj);
}
接口不含任何数据;不可以向接口添加字段.
实现接口
为了实现接口,需要声明类或结构从接口继承,并实现接口指定的全部方法.
注意:
1.实现接口方法名和返回类型完全匹配.
2.所有参数完全匹配
3.用于实现接口的所有放啊都必须具有public可访问性.但如果显示接口实现,不应该为方法添加访问修饰符.
一个类可以继承类的同时实现多个接口,基类名写在签名,接口名写在后面.
通过接口引用类
接口变量也能引用实现了该接口的类的对象。
通过接口来引用对象是一项相当有用的技术.因为能由此定义方法来获取不同类型的实参。
使用多个接口
一个类最多只能有一个基类,但可以实现数量不限的接口.
类必须实现这些接口规定的所有方法.
显示实现接口
前面的例子是隐式实现接口.但是如果Horse类实现了多个接口,并且有同名的方法怎么办?
上面实现的接口到底是实现哪一个的接口呢?
默认情况下,C#不区分方法实现的哪个接口,所有实际是用一个方法实现了两个接口.
为了解决这个问题,并区分哪个方法实现的是哪个接口,应该显示实现接口.
除了为方法附加接口名前缀,方法还去掉了public标记。方法是显示接口实现的一部分,就不能为方法指定访问修饰符。
在代码中创建一个Horse变量,两个NumberOfLegs方法都不能通过该变量来调用,因为它们都不可见。那么一下代码会调用哪一个-ILandBound接口的?还是Ijourney接口的?
Horse horse = new Horse();
int legs = horse.NumberofLegs();//无法编译
那么怎么访问这些方法呢?
答案是通过恰当的接口来引用Horse对象。
接口的限制
1.不能在接口中定义任何字段。
2.不能在接口中定义 任何构造器。
3.不能在接口中定义任何析构器.
4.不能为任何方法指定访问修饰符
5.不能在接口中嵌套任何类型(枚举、结构、类或其他接口)
6.一个接口能从另一个接口继承,但不允许从结构或类继承.
抽象类
为明确声明不允许创建某个类的实例,可以用abstract关键字实现.
比如:
abstract class GrazingMammal : Mammal, IGrazable
{
...
}
…
…
抽象方法
抽象类可以包含抽象方法,和虚方法相似,只是不含方法主体。派生类必须重写抽象方法。抽象方法不可以私有.
如一个方法在抽象类中提供默认实现没有意义,但又需要派生类提供该方法的实现,就适合定义成抽象方法.
abstract class GrazingMammal : Mammal, IGrazable
{
public abstract void DigestGrass();
}
…
…
密封类
如果不想一个类作为基类使用,可用C#提供的sealed关键字防止类被用作基类.
比如:
sealed class Horse : GrazingMammal, ILandBound
{
...
}
注意,结构隐式密封,永远不能从一个结构派生.
密封方法
可用sealed关键字声明非密封类中的一个单独的方法是密封的.只有用override关键字声明的方法才能密封,而且方法要声明为sealed override
这意味着派生类不能重写该方法.
内容总结
以上是互联网集市为您收集整理的C#接口、抽象类和密封类全部内容,希望文章能够帮你解决C#接口、抽象类和密封类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。