C#密封类

一、密封类

1. 密封类的定义

如果我们不希望自己编写的类被继承;如果有的类已经没有再被继承的必要,这时,我们可以使用sealed修饰符在类中进行声明,以达到该类不能派生其它类的目的,该类就被称为密封类。

2. 密封类与抽象类

密封类不能同时又是抽象类,因为密封类不能用作基类、也不能被继承,而抽象类总是希望被继承的。

3. 什么情况下使用密封类

需要阻止其它程序员无意中继承该类的时候;在程序运行时需要起到优化效果的时候,可以使用密封类。

4. 示例
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        sealed class A  // 密封类。不能从该类再派生出其它类
        {
            public int x;
            public int y;
        }
        static void Main(string[] args)
        {
            // C#密封类-www.baike369.com
            A a = new A();
            a.x = 10;
            a.y = 20;
            Console.WriteLine("x = {0}; y = {1}", a.x, a.y);
            Console.ReadLine();
        }
    }
}

运行结果:

x = 10; y = 20二、密封方法

1. 密封方法

对类中的方法可以使用sealed修饰符,我们称该方法为密封方法。

不是类的每个成员方法都可以作为密封方法,密封方法必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed修饰符总是和override修饰符同时使用,sealed修饰符位于override修饰符前面。

2. 示例
 
class A
{
    public virtual void F()
    {
        Console.WriteLine("A.F");
    }
    public virtual void G()
    {
        Console.WriteLine("A.G");
    }
}

class B : A
{
    sealed override public void F()
    {
        Console.WriteLine("B.F");
    }
    override public void G()
    {
        Console.WriteLine("B.G");
    }
}

class C : B
{
    override public void G()
    {
        Console.WriteLine("C.G");
    }
}

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

(摘抄至melao2006博客)

最新文章

  1. MySQL7:视图
  2. ListView遍历每个Item出现NullPointerException的异常(转)
  3. iOS开发UI篇—从代码的逐步优化看MVC
  4. ASP.NET Excel 导入 Oracle 方法2
  5. PostgreSQL的 initdb 源代码分析之二十三
  6. HDU4283:You Are the One(区间DP)
  7. 数据库和SQL面试题基础知识(持续更新)
  8. CentOS7上RabbitMQ安装
  9. bootstrap table 的简单Demo
  10. HP Gen8,9 型号系列服务器更换主板
  11. 从强制解包看 Swift 的设计
  12. (11/24) css进阶:Less文件的打包和分离
  13. spark UDF函数
  14. 【转】从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
  15. hdu 5112 (2014北京现场赛 A题)
  16. python之函数用法iter()
  17. Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
  18. 阿里中间件RocketMQ
  19. pytorch在CPU和GPU上加载模型
  20. Angular学习笔记—HttpClient (转载)

热门文章

  1. Could not find com.android.tools.lint:lint-gradle:26.1.2.
  2. ICE学习笔记 -- RFC 5245
  3. linux3 源代码安装
  4. 调用html进行android布局
  5. 自建 AppRTC
  6. 关于Froala Editor的简单使用
  7. 谈谈java中成员变量与成员方法继承的问题
  8. [转载] Android raw与assets区别
  9. vmware tools for linux 安装
  10. Flutter实战视频-移动电商-35.列表页_上拉加载更多制作