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

最新文章

  1. go语言结构体
  2. django静态文件配置
  3. CSS样式-文字超出宽部分用省略号代替
  4. web测试常用的用例及知识
  5. ARC 类型转换:显式转换 id 和 void *
  6. asp.net dataTable添加列
  7. js http 请求 多个相同参数名传值
  8. android 透明状态栏方法及其适配键盘上推(一)
  9. springmvc图片上传(兼容ie8以上,实时预览)
  10. 华为oj之字符个数统计
  11. JS高级总结
  12. latex中的希腊字母
  13. oracle中查询用户表/索引/视图创建语句
  14. linq not in 查询
  15. 在im4java中使用GraphicsMagick
  16. 《程序员面试金典》习题解答(C/C++)
  17. MVC之路由
  18. bzoj 1513 POI2006 Tet-Tetris 3D 二维线段树+标记永久化
  19. Spring核心概念(二)
  20. Excel中使用VBA访问Access数据库

热门文章

  1. UpdatePanel控件的使用和局部刷新
  2. 深刻理解反射(Reflection)
  3. iOS开发之AutoLayout中的Content Hugging Priority和 Content Compression Resistance Priority解析
  4. 知识树杂谈Java面试(4)
  5. 用Python解答百度测试开发算法面试题
  6. win10 uwp BadgeLogo 颜色
  7. 基于nginx搭建简易的基于wcf集群的复杂均衡
  8. 小技巧:Oracle:sqlplus 显示行列字符数
  9. python web框架篇:views视图函数
  10. HDU1150 Machine Schedule(二分图最大匹配、最小点覆盖)