C#参考之sealed密封类(转)
2024-09-28 01:21:24
C# 语言参考
sealed(C# 参考)
当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承。在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承。
1 class A {} 2 sealed class B : A {}
还可以在重写基类中的虚方法或虚属性的方法或属性上使用 sealed 修饰符。这将使您能够允许类从您的类继承,并防止它们重写特定的虚方法或虚属性。在下面的示例中,C 从 B 继承,但 C 无法重写在 A 中声明并在 B 中密封的虚函数 F。
1 class A
2 {
3 protected virtual void F() { Console.WriteLine("A.F");}
4 protected virtual void F2() { Console.WriteLine("A.F2");}
5 }
6 class B : A
7 {
8 sealed protected override void F() { Console.WriteLine("B.F");}
9 protected override void F2() {Console.WriteLine("A.F3");}
10 }
11 class C : B
12 {
13 // Attempting to override F causes compiler error CS0239.
14 // protected override void F() { Console.WriteLine("C.F"); }
15
16 // Overriding F2 is allowed.
17 protected override void F2() { Console.WriteLine("C.F2"); }
18 }
说明: |
---|
当在类中定义新的方法或属性时,通过不将这些方法或属性声明为 virtual,可防止派生类重写这些方法或属性。 |
重点:
1. 将 abstract 修饰符用于密封类是错误的做法,因为抽象类必须由提供抽象方法或属性的实现的类继承。
2 .当应用于方法或属性时,sealed 修饰符必须始终与 override 一起使用。
关于这一点见下面代码:
public class ClassA
{
public ClassA()
{ } public sealed void MethodA()
{
Console.WriteLine("Return A");
} public void MethodB()
{
Console.WriteLine("Return B");
}
}
以上程序,将产生如下错误信息:
'ClassA.MethodA()' cannot be sealed because it is not an override
3.由于结构是隐式密封的,因此它们不能被继承。
有关更多信息,请参见(C# 编程指南)。
示例:
1// cs_sealed_keyword.cs
2using System;
3sealed class SealedClass
4{
5 public int x;
6 public int y;
7}
8
9class MainClass
10{
11 static void Main()
12 {
13 SealedClass sc = new SealedClass();
14 sc.x = 110;
15 sc.y = 150;
16 Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
17 }
18}
输出
x = 110, y = 150
在上一个示例中,您可能试图使用下面的语句从密封类继承:
class MyDerivedC: SealedClass {} // Error
将产生一条错误消息:
'MyDerivedC' cannot inherit from sealed class 'SealedClass'.
转自http://www.cnblogs.com/Dlonghow/archive/2008/07/02/1233690.html
最新文章
- go语言结构体
- django静态文件配置
- CSS样式-文字超出宽部分用省略号代替
- web测试常用的用例及知识
- ARC 类型转换:显式转换 id 和 void *
- asp.net dataTable添加列
- js http 请求 多个相同参数名传值
- android 透明状态栏方法及其适配键盘上推(一)
- springmvc图片上传(兼容ie8以上,实时预览)
- 华为oj之字符个数统计
- JS高级总结
- latex中的希腊字母
- oracle中查询用户表/索引/视图创建语句
- linq not in 查询
- 在im4java中使用GraphicsMagick
- 《程序员面试金典》习题解答(C/C++)
- MVC之路由
- bzoj 1513 POI2006 Tet-Tetris 3D 二维线段树+标记永久化
- Spring核心概念(二)
- Excel中使用VBA访问Access数据库
热门文章
- UpdatePanel控件的使用和局部刷新
- 深刻理解反射(Reflection)
- iOS开发之AutoLayout中的Content Hugging Priority和 Content Compression Resistance Priority解析
- 知识树杂谈Java面试(4)
- 用Python解答百度测试开发算法面试题
- win10 uwp BadgeLogo 颜色
- 基于nginx搭建简易的基于wcf集群的复杂均衡
- 小技巧:Oracle:sqlplus 显示行列字符数
- python web框架篇:views视图函数
- HDU1150 Machine Schedule(二分图最大匹配、最小点覆盖)