简述c#之sealed 修饰符

sealed 修饰符表示密封

用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥

用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员

通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱

恰当的利用 sealed 修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员

示例:

Code
using System;
using System.Collections.Generic;
using System.Text;

namespace Example06
{    
   class Program    
   {        
    class A        
    {            
       public virtual void F()            
       {                
           Console.WriteLine("A.F");            
       }            
       public virtual void G()            
       {                
           Console.WriteLine("A.G");            
       }        
    }        
    class B : A        
    {            
        public sealed override void F()
        {
           Console.WriteLine("B.F"); 
        }            
        public override void G() 
        {
            Console.WriteLine("B.G");
        } 
    }        
    class C : B
    {
         public override void G()
         {
             Console.WriteLine("C.G");
         }
    }
        static void Main(string[] args)
        {
            new A().F();
            new A().G();
            new B().F();
            new B().G();
            new C().F();
            new C().G();
            Console.ReadLine();
        }
    }
}using System;
using System.Collections.Generic;
using System.Text;

namespace Example06
{    
   class Program    
   {        
    class A        
    {            
       public virtual void F()            
       {                
           Console.WriteLine("A.F");            
       }

在基类(父类)中用virtual修饰符声明一个虚方法,然后在在派生类(子类)中用override修饰符覆盖基类虚方法。表明是对基类的虚方法重载
这种优势在于它可以在程序运行时再决定调用哪一个方法,这就是所谓的“运行时多态”
或者称动态绑定。

public virtual void G()            
       {                
           Console.WriteLine("A.G");            
       }        
    }        
    class B : A        
    {            
        public sealed override void F()
        {
           Console.WriteLine("B.F"); 
        }            
        public override void G() 
        {
            Console.WriteLine("B.G");
        } 
    }        
    class C : B
    {
         public override void G()
         {
             Console.WriteLine("C.G");
         }
    }
        static void Main(string[] args)
        {
            new A().F();
            new A().G();
            new B().F();
            new B().G();
            new C().F();
            new C().G();
            Console.ReadLine();
        }
    }
}

结果: 类 B 在继承类 A 时可以重写两个虚函数,如图所示:

由于类 B 中对 F 方法进行了密封, 类 C 在继承类 B 时只能重写一个函数,如图所示:

控制台输出结果,类 C 的方法 F 只能是输出 类B 中对该方法的实现:

A.F A.G B.F B.G B.F C.G

时间: 2024-08-28 15:23:03

简述c#之sealed 修饰符的相关文章

C# 中的sealed修饰符学习

转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在含义上互相排斥用于方法和属性等方面. C# sealed修饰符是干什么的? C# sealed修饰符表示密封用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,因

C#高级编程之Sealed修饰符

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

sealed 修饰符

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

简述C#类的修饰符

1.Public: 公有的, 是类型和类型成员的访问修饰符.对其访问不受任何限制. 2.Private:私有的,私有成员只有在声明它们的类和结构体中才是可访问的 3.Protected:保护成员,该类内部和继承类中可以访问. 4.internal:内部访问,同一个程序集中的所有类都可以访问,一般都是限于本项目内. 5 .Protected internal:受内部保护的,只限于本项目或是子类访问,其他不能访问. (一个类[包括接口,结构体,枚举,委托]上可以使用的访问修饰符有:public, i

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protected at Class Level 在创建类时,我们需要考虑类的作用域范围,如谁可访问该类,谁可访问该类成员变量,谁可访问该类成员函数. 换而言之,我们需要约束类成员的访问范围.一个简单的规则,类成员函数.类成员变量之间可以自由 访问不受约束,这里主要说的是外部的访问约束.在创建class的时候,

private、 protected、 public、 internal 修饰符的访问权限

3. 简述 private. protected. public. internal 修饰符的访问权限.private : 私有成员, 在类的内部才可以访问.protected : 保护成员,该类内部和继承类中可以访问.public : 公共成员,完全公开,没有访问限制.internal: 在同一命名空间内可以访问.4. 写出一条Sql语句: 取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键,  注意:ID可能不是连续的.)select top 10 * from A

C#语言中的修饰符汇总

1. 访问修饰符 指定声明的类型和类型成员的可访问性. (1) public:对任何类和成员都公开, 无限制访问;是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:仅仅对该类公开;是一个成员访问修饰符.私有访问是允许的最低访问级别.私有成员只有在声明它们的类和结 构体中才是可访问的. (3) internal:只能值包含该类的程序集中访问该类(只是单独的项目,而不是整个解决方案);是类型和类型成员的访问修饰符.只有在同一程序集的文件中,

【转】C# 中访问修饰符

用通过代码:  类内部 using System;class Mod{    void defaultMethod()    {        Console.WriteLine("this is a default method");    }    public void publicMethod()    {        Console.WriteLine("this is a public method");    }    private void pr

.NET4.5新特性async和await修饰符实现异步编程

开篇 每一个版本的.net都会引入一些新的特性,这些特性方便开发人员能够快速实现一些功能.虽然.net版本一直在更新,但是新版本对旧版本的程序都是兼容的,在这一点上微软做的还是非常好的.每次学一个新内容,第一次接触的方法在脑海里占的位置还是比较重要的,从刚开始接触.net的多线程编程是使用Thread类,然后后面写的程序只要用到异步或者多线程就马上会想到用Thread,虽然知道委托的异步调用也能够实现,但是脑海里面的排在前面还是Thread类,在那个时候不知道他们之间的区别和优劣,也就不懂得如何