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中该方法被密封,无法重写。
        }*/
    }




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

C#_密封类和密封方法

// 密封类,子类不能继承父类 public sealed class Person { private string name; private in...

C# 中的接口和密封类

API Application Programming Interface 应用程序接口 接口: 定义 :指描述可属于任何类或结构的一组相关功能。就是规范、功能 接口的成员可以是方法,属性,事件和索...
  • Czhenya
  • Czhenya
  • 2017年07月26日 20:51
  • 364

为什么要使用Get和Set访问器

使用到实体,那么无可避免的就要涉及到get和set属性访问器了。可以说从我们接触面向对象的编程开始,它就一直伴随着程序的开发而存在。虽然我们一直在使用,但是很多人其实并不知道它的来龙去脉,在这篇博客中...

c#中接口可以包含字段吗

在c#中接口可以被看成是一个抽象类,而大家都知道抽象类包括:字段,方法,属性,索引,事件!而接口中也包括:方法、属性、索引器、事件等,而字段一般是private类型,封装后成为属性,既然属性是属于接口...

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

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

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

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

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

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

C#之抽象类、虚方法、重写、接口、密封类

前言    学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷。每次敲代码的时候都没有一种随心所欲的感觉。所以不得不在网上搜集一些资料,look 了 look~ 内容   ...

C#——类 : 密封类 & 静态类

[背景介绍]Oh, My God我现在也没有参透有什么卵用的东西 内容较少就和 static 操到一起来写吧sealed密封类和abstract不一样,abstract要求使用的时候,必须从这个ab...

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

C# 继承,抽象类,密封类,类的多态性类可以从其他类中继承。  新类(即派生类)将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据或行为。因此,新类具有两个有效类型:新类的类型和它继承的...
  • rise51
  • rise51
  • 2011年01月19日 15:55
  • 596
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#入门10.6——密封类与密封方法
举报原因:
原因补充:

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