C#入门10.6——密封类与密封方法

原创 2016年08月29日 20:22:37

并不是所有的类都可以被继承,不能继承的类称为密封类,用关键字sealed。

适用场合:

如果要对库、类或自己编写的其他类进行操作,则重写某些功能会导致编译错误。

因为商业原因把类或方法标记为sealed,以防第三方以违反注册协议的方式扩展该类。

注意:

密封类中不能包含虚方法(Virtual)和抽象方法(abstract),因为在密封的类没有为派生类提供实现其虚方法和抽象方法的机会。

在把类或方法标记为sealed时要小心,因为这么做会严重限制它的使用。即使不希望它能继承一个类或重写类的某个成员,仍有可能在将来某个时刻,有人会遇到没有预料到的情形。

.NET基类库大量使用了密封类,使希望从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如string就是一个密封类。

定义:用修饰符sealed进行标记的方法

作用:使用sealed修饰符可以防止派生类进一步重写该方法

注意:如果实例方法声明包含sealed修饰符,则它必须也包含override修饰符。

要在方法中使用sealed关键字,必须先在基类上将其声明为重写。如果基类上不希望有重写的方法或属性,就不要将其声明为virtual。

密封类除了不能被继承外,其他与非密封类一样,密封方法则必须通过重写基类中的虚方法来实现。

Talk is cheap,show you the code.

class Program
    {
        static void Main(string[] args)
        {
            Class2 myclass2 = new Class2();
            myclass2.Write();
            Console.ReadKey();
        }
    }
public/*基类的可访问性一定要高于子类的,平级也可以*/class Class1
    {
        public virtual void Write()
        {
            Console.WriteLine("未密封方法");
        }
    }
//如果一个类不希望将来在使用的过程中被继承,被派生,这时候可以采用关键字sealed
    //虚方法virtual 抽象方法abstract的存在就是为了继承,为了派生,因此不能被放在sealed类中
    public class Class2:Class1
    {
        public sealed override void Write()
        {
            Console.WriteLine("密封方法");
        }
    }
public class Class3:Class2
    {
       /* public override sealed void Write()
        {
            在Class2中该方法被密封,无法重写。
        }*/
    }




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Kotlin最简单的入门教程——可见性修饰符,扩展,数据类,密封类

1 可见性修饰符在 Kotlin 中有这四个可见性修饰符:private、 protected、 internal 和 public。 如果没有显式指定修饰符的话,默认可见性是 public文件名和类...

c# 中的抽象类、接口、密封类、虚方法介绍

1、抽象类 如果一个类没有具体的实现,只表现一种抽象概念,并且仅仅只作为自己派生类的一个基类出现,那么这样的类称作抽象类。抽象类中由abstract修饰的方法称之为抽象方法。 (1)抽象类声明和特...

.Net C#(类的继承/虚函数/抽象函数/密封类/静态类/抽象类)——学习笔记

类的继承 隐藏基类的成员: 派生类不可以删除它继承的任何成员,但可以隐藏他们。 要声明新的相同类型的成员,并使用相同的名称。 要使用new修饰符,否则编译器会警告。静态成员...

C# 中的接口和密封类

API Application Programming Interface 应用程序接口 接口: 定义 :指描述可属于任何类或结构的一组相关功能。就是规范、功能 接口的成员可以是方法,属性,...

基础_C# 继承,抽象类,密封类,类的多态性

C# 继承,抽象类,密封类,类的多态性类可以从其他类中继承。  新类(即派生类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据或行为。因此,新类具有两个有效类型:新类的类型和它继承的...

C#之密封类

密封类概述        并不是所有的类都可以被继承,C#语言中就是密封类。在C#语言中我们可以把类声明为sealed。这表示不能继承该类,如果想要继承那么编译器肯定会报错。在把类或方法标记为sea...

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

使用 abstract 关键字可以创建不完整且必须在派生类中实现的类和类成员。使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员。

单继承,聚合和Sealed密封(C#)

C#是单继承语言 在需要多继承类结构时,一种解决方法是利用聚合:将希望的"基类"作为派生类的一个字段添加,然后将相关属性委 托为聚合类的属性。 密封类,关键词是Sealed 字面意思就是将类密封起来,...

C#中修饰符用法“virtual(虚拟函数)、override(函数复写)、static(静态函数)、abstract(抽象函数)、sealed(密封函数)”

1、virtual用于修饰方法、属性、索引器或者事件声明,并使它们可以在派生类中被重写。virtual不能与static、abstract、private或者override修饰符一起使用。 声...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)