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
C#参考之sealed密封类(转)的更多相关文章
- Sealed密封类
using System; using System.Collections.Generic; using System.Linq; using System.Text; #region 概述 //在 ...
- sealed 密封类,不能被其他类继承,但可以继承其他类
public sealed class Person:继承类名 { }
- (sealed)密封类及密封方法优缺点
1. 密封类防止被继承 (有利于代码优化, 由于密封类的不被继承性, 代码在搜索此方法时可以直接定位, 不需要一层层的找继承关系) 只有本程序集可以使用 2. 密封类中不需要再写密封方法(一般密封方法 ...
- c#中的 virtual override 和abstract 以及sealed
1.如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法,而不能覆盖. 2.如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏. 3.如果子类 ...
- .NET软件工程师面试总结
1.手写画出系统架构图,系统代码架构,有什么技术难点? 2.手写画出系统部署图 CDN(一般购买别人的服务器会自动CDN,他们自己配置就OK啦) 3.asp.net 的session怎么实现会话共享 ...
- Delphi XE5教程11:Tokens
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...
- .Net Web开发技术栈
有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...
- C#图解教程 第二十四章 反射和特性
反射和特性 元数据和反射Type 类获取Type对象什么是特性应用特性预定义的保留的特性 Obsolete(废弃)特性Conditional特性调用者信息特性DebuggerStepThrough 特 ...
- C#编程基础
1..NET与C# A..NET 是 Microsoft XML Web services 平台.XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用 ...
随机推荐
- JS在可编辑的div中的光标位置插入内容或表情
<input type="button" value="插入字符" onclick="document.getElementById('test ...
- topN 算法 以及 逆算法(随笔)
topN 算法 以及 逆算法(随笔) 注解:所谓的 topN 算法指的是 在 海量的数据中进行排序从而活动 前 N 的数据. 这就是所谓的 topN 算法.当然你可以说我就 sort 一下 排序完了直 ...
- 使用phpExcel导出excel时,报500错
在自己本地导出excel没有问题,但是放到服务器出现500的错误! 解决方法:查看控制器引用的header文件,是否包含空格,如下: header('Pragma:public'); ...
- Quartz格式设置说明
这些星号由左到右按顺序代表 : * * * * * * * 格式 ...
- Cosmos OpenSSD--greedy_ftl1.2.0(一)
从主函数跳到ReqHandler,在ReqHandler内先初始化SSD--InitNandReset,然后建立映射表InitFtlMapTable void InitNandReset() { // ...
- Golang开发者常见的坑
Golang开发者常见的坑 目录 [−] 初级 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 偶然的变量隐藏Accid ...
- js math对象总结
1: Math 对象用于执行数学任务. 2:Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(), Math.sin() 这样的函数只是函数 3:通过把 ...
- 机器学习之决策树(ID3 、C4.5算法)
声明:本篇博文是学习<机器学习实战>一书的方式路程,系原创,若转载请标明来源. 1 决策树的基础概念 决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树.决 ...
- js获取本地ip和地区
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java基础笔记13
1.集合与对象数组的区别 集合与对象数组共同点:都是存放对象的容器: 区别在于:①集合是没有长度限制的:②集合容器中没有类型的限制. 2.集合(都在Java.util包下) 常用的集合:Collect ...