C# 中的sealed修饰符学习

转载原地址 http://developer.51cto.com/art/200908/147327.htm

C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在含义上互相排斥用于方法和属性等方面。

C# sealed修饰符是干什么的?

C# sealed修饰符表示密封用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,因为使用 C# sealed修饰符的方法或属性肯定是基类中相应的虚成员通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱恰当的利用 C# sealed修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员。

示例:

using System;
2.using System.Collections.Generic;
3.using System.Text;
4.
5.namespace Example06
6.{
7.class Program
8.{
9.class A
10.{
11.public virtual void F()
12.{
13.Console.WriteLine("A.F");
14.}
15.public virtual void G()
16.{
17.Console.WriteLine("A.G");
18.}
19.}
20.class B : A
21.{
22.public sealed override void F()
23.{
24.Console.WriteLine("B.F");
25.}
26.public override void G()
27.{
28.Console.WriteLine("B.G");
29.}
30.}
31.class C : B
32.{
33.public override void G()
34.{
35.Console.WriteLine("C.G");
36.}
37.}
38.static void Main(string[] args)
39.{
40.new A().F();
41.new A().G();
42.new B().F();
43.new B().G();
44.new C().F();
45.new C().G();
46.
47.Console.ReadLine();
48.}
49.}
50.} 

转载原地址 http://www.cnblogs.com/iamdaiyuan/archive/2007/02/06/642442.html

sealed的中文意思是密封,故名思义,就是由它修饰的类或方法将不能被继承或是重写。

sealed关键字的作用:

在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。

  sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

密封类:

密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它类的基类,C#将提示出错。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的。
  在哪些场合下使用密封类呢?实际上,密封类中不可能有派生类。如果密封类实例中存在虚成员函数,该成员函数可以转化为非虚的,函数修饰符virtual 不再生效。
  让我们看下面的例子:

1 abstract class AbstractClass
2 {
3       public abstract void Method( ) ;
4 }

5 sealed class SealedClass: AbstractClass
6 {
7        public override void Method( )
8         { //... }
9 }

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

class OtherClass: SealedClass
{
}

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

密封方法:

C#还提出了密封方法(sealed method) 的概念,以防止在方法所在类的派生类中对该方法的重载。对方法可以使用sealed 修饰符,这时我们称该方法是一个密封方法。
  不是类的每个成员方法都可以作为密封方法密封方法,要作为密封方法必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed 修饰符总是和override 修饰符同时使用。请看下面的例子代码:

 1 using System ;

 2 class A
 3 {
 4     public virtual void F( )
 5     {
            Console.WriteLine("A.F") ;
        }
 6
        public virtual void G( )
 7     {
            Console.WriteLine("A.G") ;
        }
 8 }

 9 class B: A
10 {
11     sealed override public void F( )
12     {
            Console.WriteLine("B.F") ;
         }
13
        override public void G( )
14     {
             Console.WriteLine("B.G") ; }
15     }
16
    class C: B
17 {
18     override public void G( )
19     {
            Console.WriteLine("C.G") ;
        }
20 }

类B 对基类A 中的两个虚方法均进行了重载,其中F 方法使用了sealed 修饰符,成为一个密封方法。G 方法不是密封方法,所以在B 的派生类C 中,可以重载方法G,但不能重载方法F。

时间: 2024-12-21 05:11:15

C# 中的sealed修饰符学习的相关文章

java面向对象学习之——java中的类修饰符、成员变量修饰符、方法修饰符

类修饰符: public(访问控制符)-->将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类.abstract-->将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现.final-->将一个类生命为最终(即非继承类),表示他不能被其他类继承.friendly-->默认的修饰符,只有在相同包中的对象才能使用这样的类. 成员变量修饰符: public(公共访问控制符)-->指定该变量为公共的,他可以被任何对象的方法访问.private(私有访问控制符

20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. internal: 只能在当前项目中访问,在同一个项目中,internal和public的权限是一样的. protected internal: protected + internal权限. 1.1:能够修饰类的访问修饰符只有两个: public / internal 1.2:接口中的成员不允许

[.net 面向对象编程基础] (7) 基础中的基础——修饰符

[.net 面向对象编程基础] (7) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改符. 首先 修饰符是什么? 修饰符用于限定类型以及类型成员的申明 从定义可以看出按功能分为两类:访问修饰符和声明修饰符 1.访问修饰符 (5个) 访问修饰符 说明 public 公有访问.不受任何限制. private 私有访问.只限于本类成员访问,子类,实例都不能访问. protected 保护访

C#高级编程之Sealed修饰符

1.sealed 修饰符用来干什么的呢? a.修饰类时,表示被修饰的类不能再继承.不可以和abstract一起用,因为意义相反. b.修饰方法或者属性,表示被修饰方法或者属性不可以被重写.必须和 override 关键字一起使用. 因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员. 通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱,恰当的利用sealed修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员. 案例:

简述c#之sealed 修饰符

sealed 修饰符表示密封 用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥 用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员 通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱 恰当的利用 sealed 修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员 示例: Codeu

sealed 修饰符

当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承. 在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承. class A {} sealed class B : A {} 还可以在重写基类中的虚方法或虚属性的方法或属性上使用 sealed 修饰符.这将使您能够允许类从您的类继承,并防止它们重写特定的虚方法或虚属性. 在下面的示例中,C 从 B 继承,但 C 无法重写在 A 中声明并在 B 中密封的虚函数 F. class A { protected vi

(转) java中的访问修饰符

对Java中的修饰符一直记不住,现在结合网上的一些资料进行总结,并重点说明一下protected修饰符. 一. Java中的访问修饰符 Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节.访问控制分为四种级别: (1)public: 用public修饰的类.类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问: (2)protected: 用protected修饰的类.类属变量及

PHP中有三种访问修饰符 默认是public

PHP中有三种访问修饰符,分别是: public(公共的.默认) protected(受保护的) private(私有的) 它们可以分别用在类的属性和方法上(类的属性和方法统称为类的成员),用来修饰类成员的访问权限. public(公共的.默认) 在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限. /* 以下两个方法声明访问权限效果相同 */ function say(){}; publilc function say(){}; 当类的成员被声明为public的访问修饰

C#中的访问修饰符,默认访问修饰符

c#中的访问修饰符   public :公开的公共的 private:私有的,只能在当前类的内部访问 protected:受保护的,只能在当前类的内部以及该类的子类中访问. internal:只能在当前项目中访问.在同一个项目中,internal和public的权限是一样. protected internal:protected+internal 默认访问修饰符 默认情况下,类型成员是隐式私有的,而类型是隐式内部的.类型默认构造函数是私有的. protect和private拿去声明类型,除非这