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博客)

C# 基础之密封类的更多相关文章

  1. C#密封类和密封方法--C#基础

    1.密封类 1)不是所有的类都可以继承,不能别继承的类叫做密封类.如果一个类不希望被继承.被派生可以采用关键字sealed,下面Class2不能继承Class1 Class1.cs: namespac ...

  2. kotlin基础 密封类

    密封类 密封类用来表示受限的类继承结构:当一个值为有限几种的类型, 而不能有任何其他类型时.在某种意义上,他们是枚举类的扩展:枚举类型的值集合 也是受限的,但每个枚举常量只存在一个实例,而密封类 的一 ...

  3. 【C# 基础概念】抽象类、密封类及类成员

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

  4. .NET面试题系列[3] - C# 基础知识(1)

    1 类型基础 面试出现频率:基本上肯定出现 重要程度:10/10,身家性命般重要.通常这也是各种招聘工作的第一个要求,即“熟悉C#”的一部分.连这部分都不清楚的人,可以说根本不知道自己每天都在干什么. ...

  5. .NET基础知识点

    .NET基础知识点   l  .Net平台  .Net FrameWork框架   l  .Net FrameWork框架提供了一个稳定的运行环境,:来保障我们.Net平台正常的运转   l  两种交 ...

  6. Java基础常见英语词汇

    Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object ...

  7. C#/.NET 基础学习

    初识C# C#是微软公司发布的面向对象的.运行于.NET Framework之上的高级程序设计语言.与Java有着明显不同,借鉴Delphi的特点,与COM(组件对象模型)直接集成,是微软公司 .NE ...

  8. .NET ORM 的 “SOD蜜”--零基础入门篇

    PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行 ...

  9. PHP基础OOP(二) 多态

    PHP 基础  多态  ====================多态是一种思想:从一个基类中派生,响应一个虚命令,产生不同的结果.                不同的对象执行相同的方法而产生不同的行 ...

随机推荐

  1. Codeforces Round #401 (Div. 2) C Alyona and Spreadsheet —— 打表

    题目链接:http://codeforces.com/contest/777/problem/C C. Alyona and Spreadsheet time limit per test 1 sec ...

  2. CentOS系统文件和目录管理相关的一些重要命令

    我们都知道,在Linux系统中,基本上任何我们需要做的事都可以通过输入命令来完成,所以在Linux系统中命令非常的多,我们不可能也没必要记住所有的这些命令,但是对于一些常用的命令我们还是必须要对其了如 ...

  3. Jquery Plugin模版

    1. [代码][JavaScript]代码 01// remember to change every instance of "pluginName" to the name o ...

  4. 旋转屏幕导致Activity重建

    简单来说,Activity是负责与用户交互的最主要机制,任何“设置”(Configuration)的改变都可能对Activity的界面造成影响,这时系统会销毁并重建Activity以便反映新的Conf ...

  5. Android Jni(Java Native Interface)笔记

    首先记录一个问题,关于如何用javah生成头文件. 为什么要生成头文件?在含有 static{ System.loadLibrary("hellojni"); } 这样代码的类下面 ...

  6. opencv 知识点笔记

    1.Opencv中cvScalar是CV_RGB的宏,cvScalar的储存顺序是B-G-R,而CV_RGB的储存顺序是R-G-B

  7. C# 使用WebClient时,在多网卡时,指定IP发送Web请求

    需要定义一个类,重写GetWebRequest,在方法内,指定IP地址 public class MyWebClient : WebClient { private IPAddress ipAddre ...

  8. Git简单教程

    该笔记总结廖雪峰Git教程, 参考网站: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017 ...

  9. OnCtlColor

    https://baike.baidu.com/item/OnCtlColor/4750440?fr=aladdin CTLCOLOR_BTN 按钮控件 · CTLCOLOR_DLG 对话框 · CT ...

  10. C++学习笔记1-使用数组进行vector初始化

    另外,如果是定义的时候,可以直接指定复制.比如:int s[5]={1,2,3,4,5};vector<int> v(s,s+5);就可以啦.