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 进行通讯和共享数据,而不管所采用 ...
随机推荐
- WPF:获取DataGrid控件单元格DataGridCell
转载:http://blog.csdn.net/jhqin/article/details/7645357 /* ------------------------------------------- ...
- python3.6安装Scrapy
环境:win10(64位), Python3.6(64位) 1.安装pyhthon 这个就不多说了,对应版本就下载对应的依赖包 2.安装pywin32 在windows下,必须安装pywin32,安装 ...
- js 查询 添加 删除 练习
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- LeetCode 136. Single Number (落单的数)
Given an array of integers, every element appears twice except for one. Find that single one. Note:Y ...
- python实现进度条和百分比同时显示
python中同时打印进度条和百分比 仅打印进度条: import sys,time for i in range(100): sys.stdout.write('>') sys.stdout. ...
- AsposeCell特定格式表格
效果图: Workbook workbook = new Workbook(); Worksheet sheet = (Worksheet)workbook.Worksheets[0]; Cells ...
- .13-Vue源码之patch(3)(终于完事)
怎么感觉遥遥无期了呀~这个源码,跑不完了. 这个系列写的不好,仅作为一个记录,善始善终,反正也没人看,写着玩吧! 接着上一节的cbs,这个对象在初始化应该只会调用create模块数组方法,简单回顾一下 ...
- TIDB 参数解释
地址:https://github.com/pingcap/docs-cn/blob/master/op-guide/configuration.md#tidb TiDB --store 用来指定 T ...
- 小程序组件之picker和range-key的用法
因为在微信小程序的官网上并没有range-key的例子以及实际用法,所以好多人不知道具体如何使用.然后我在这里对其进行一个简单的实现,并记录一些注意事项. 以下是官网给的说明: 具体的用法 ...
- (转)IDEA破解 2017 IDEA license server 激活(可用)
进入ide主页面,help-register-license server,然后输入 http://idea.iteblog.com/key.PHP(注意:php要小写)即可~