密封类

想想看,如果所有的类都可以被继承,继承的滥用会带来什么后果?类的层次结构体系将变得十分庞大,类之间的关系杂乱无章,对类的理解和使用都会变得十分困难。有时候,我们并不希望自己编写的类被继承。另一些时候,有的类已经没有再被继承的必要。C#提出了一个密封类(sealed class)的概念,帮助开发人员来解决这一问题。

密封类在声明中使用sealed修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它灯的基类,C#将会提示出错。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的。

在哪些场合下使用密封类呢?密封类可以阻止其它程序员在无意中继承该类,而且密封类可以起到运行时优化的效果。实际上,密封类不可能有派生类,如果密封类实例中存在虚成员函数,该成员函数可以转化为非虚的,函数修饰符virtual不再生效。

让我们看下面的例子:

abstract class A
{
 public abstract void F();
}

sealed class B:A
{
 public override void F(){
   //F的具体实现代码
 }
}

如果我们尝试写下面的代码:

class C:B{}

C#会指出这个错误,告诉你B是一个密封类,不能试图从B中派生任何类。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, class
, 函数
, 抽象
, 密封舱
, c#密封类个方法
, 一个
sealed
抽象类和接口的区别、c#密封类、密封类的作用、密封类和密封方法、密封类和抽象类,以便于您获取更多的相关知识。

时间: 2024-11-08 21:20:17

密封类的相关文章

c#密封类个方法-C#新手在密封类和密封方法处求解

问题描述 C#新手在密封类和密封方法处求解 //程序清单P7_6.csusing System;namespace P7_6{ class Program { static void Main() { BankCard[] cards = new BankCard[] { new BankCard(""001""8888"") new CreditCard(""002""8888"")

c#.-C#新手在密封类和密封方法处的问题

问题描述 C#新手在密封类和密封方法处的问题 上个问题代码排版有问题,这次上图,希望有大神能来解........ 解决方案 抱歉,图片顺序有错.... 解决方案二: C#密封类.密封方法C# 密封类和密封方法

C#抽象类、密封类及类成员

1.抽象类和类成员 使用 abstract 关键字可以创建必须在派生类中实现的不完整的类和类成员. 例如: public abstract class A { // Class members here. } 抽象类不能实例化.抽象类的用途是提供多个派生类可共享的基类的公共定义.例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现. 抽象类也可以定义抽象方法.方法是将关键字 abstract 添加到方法的返回类型的前面. 例如: public

ArcGIS Engine开发入门教程

利用ArcGIS Engine.VS .NET和Windows控件开发GIS应用 Dixon整理 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <安装目录>/DeveloperKit/Samples/Developer_Guide_Scenarios/ ArcGIS_Engine/Building_an_ArcGIS_Control_Application/Map_Viewer 注:Ar

sealed在C#中的作用说明

sealed关键字的作用: 在类声明中使用sealed可防止其它类继承此类:在方法声明中使用sealed修饰符可防止扩充类重写此方法. sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化.具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理. 密封类: 密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承.如果试图将一个密封类作为其它类的基类,C#将提示出错.理所当然,密封类不能同时又是抽象类,因为抽象

C#体验编程技术 类与对象

编程|对象 组件编程不是对传统面向对象的抛弃,相反组件编程正是面向对象编程的深化和发展.类作为面向对象的灵魂在C#语言里有着相当广泛深入的应用,很多非常"Sharp"的组件特性甚至都是直接由类包装而成.对类的深度掌握自然是我们"Sharp XP"重要的一环. 类 C#的类是一种对包括数据成员,函数成员和嵌套类型进行封装的数据结构.其中数据成员可以是常量,域.函数成员可以是方法,属性,索引器,事件,操作符,实例构建器,静态构建器,析构器.我们将在"第五讲 构

在C#应用程序中控制输入法

程序|控制 在Windows系统一般都安装了至少三种输入法,在输入数据时常常会切换输入法,虽然Windows系统提供了切换快捷健,但对输入工作还是带来了不少麻烦.如果在应用程序中为用户提供智能输入法自动切换,那么这样的应用程序就显得更加专业.更加具有竞争力.不知你可用过Access,在表数据输入时Access自动切换输入法,很酷吧,现在你也可以实现这一切.如果也想你的程式也酷一下的话,请继续... 为了控制输入法,.NET类库在System.Windows.Forms.InputLanguage

C#基础—关于类

类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法.类定义了每个对象可以包含什么数据和功能,但类自己不能包含数据.比如一个类代表一个人,它就可以定义所以人相关的信息(身高.年龄.体重等).使用时,事例化对象表示某一个人.类的成员可以分为两大类类本身所声明的以及从基类中继承而来的类的成员有以下类型? 成员常量,代表与类相关联的常量值? 域,即类中的变量? 成员方法,复杂执行类中的计算和其它操作? 属性,用于定义类中的值并对它们进行读写? 事件,用于说明发生了什么事情? 索引

C#基础全接触

引用类型是类型安全的指针,它们的内存是分配在堆(保存指针地址)上的.String.数组.类.接口和委托都是引用类型.强制类型转换与as类型转换的区别:当类型转换非法时,强制类型转换将抛出一个System.InvalidCastException异常,而as不会抛出异常,它返回一个null值.用using创建别名:using console = System.Console;访问限定符:public  该成员可以被其他任何类访问protected 该成员只能被其派生类访问private  该成员只