using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

#region 概述

//在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。

//sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

//密封类:
//密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它类的基类,C#将提示出错。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的。

//在哪些场合下使用密封类呢?实际上,密封类中不可能有派生类。如果密封类实例中存在虚成员函数,该成员函数可以转化为非虚的,函数修饰符virtual 不再生效。
#endregion
namespace Sealed密封类
{
    class NOSealed
    {
        public static void OO()
        {
            Console.WriteLine("没有使用密封");
        }
    }

    sealed class YESSealed
    {
        public static void OO()
        {
            Console.WriteLine("使用了密封");
        }
    }

    class MyClass : NOSealed //YESSealed 那就错了
    {
        public new void OO()
        {
            Console.WriteLine("没有继承密封");
        }
    }

    //密封类不可以被继承,可以被调用
    sealed class mysealed   //声明为密封类
    {
        public int x;
        public int y;
    }

    class Program
    {
        static void Main(string[] args)
        {
            NOSealed.OO();
            MyClass M = new MyClass();
            M.OO();

            //调用密封类
            YESSealed.OO();
            mysealed m = new mysealed();
            m.x = 100;
            m.y = 200;
            Console.WriteLine("x={0}, y = {1}", m.x, m.y);
            Console.ReadLine();

            Console.ReadKey();
        }
    }
}

Sealed密封类的更多相关文章

  1. C#参考之sealed密封类(转)

    C# 语言参考 sealed(C# 参考) 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承.在下面的示例中,类 B 从类 A 继承,但是任何类都不能从类 B 继承. 1     ...

  2. sealed 密封类,不能被其他类继承,但可以继承其他类

    public sealed class Person:继承类名 { }

  3. (sealed)密封类及密封方法优缺点

    1. 密封类防止被继承 (有利于代码优化, 由于密封类的不被继承性, 代码在搜索此方法时可以直接定位, 不需要一层层的找继承关系) 只有本程序集可以使用 2. 密封类中不需要再写密封方法(一般密封方法 ...

  4. c#中的 virtual override 和abstract 以及sealed

    1.如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法,而不能覆盖. 2.如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏. 3.如果子类 ...

  5. .NET基础知识点

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

  6. JAVA学习笔记之与C#对比

    最近在学习java,刚学完入门课程...下面说一下入门课程中相对印象深刻的知识点 JAVA-C#差异 1. for循环 C# string [] strarr=new string[5]; forea ...

  7. 3、C#面向对象:封装、继承、多态、String、集合、文件(下)

    面向对象多态 一.装箱和拆箱 装箱:将值类型转换为引用类型.object o = 1:值类型给引用类型赋值 拆箱:将引用类型转换为值类型.int n = (int)o; 强制转换为值类型 满足条件:两 ...

  8. C# 面试的“区别”

    1.静态变量与非静态变量的区别 静态变量--static.直接类名+变量名.静态函数里不能用非静态变量. 访问同一类中所有实例同一静态变量都是同一值.非静态变量则不是. 2.const与readonl ...

  9. CLR via C#(05)- 访问限定、数据成员

    今天跟大家分享一下关于访问限定和数据成员的知识.主要包括以下两点: Abstract, sealed, virtual, new, override怎么用? Const 和 readonly好像都表示 ...

随机推荐

  1. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  2. Array与ArrayBuffer

    一.概述 二:Array使用 1.建立方式三种(数组里可以有不同的数据类型) 2.Array的简单使用 三:ArrayBuffer的简单使用 1.ArrayBuffer建立 导包 2.添加元素(+=) ...

  3. Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况.因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不 ...

  4. js中获取当前时间

    var d = new Date();var date = d.getFullYear() + "年" +(d.getMonth() + 1) + "月" +  ...

  5. paper 96:计算机视觉-机器学习近年部分综述

    计算机视觉和机器学习领域 近两年部分综述文章,欢迎推荐其他的文章,不定期更新.   [2015]   [1].    E.Sariyanidi, H. Gunes, A. Cavallaro, Aut ...

  6. JQ 全选、全不选

    $(document).ready(function() { $("#isalldebt").click(function() { if ($(this).attr("c ...

  7. java基本数据类型包装类

    Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数 ...

  8. 助手系列之连接mysql数据库

    import MySQLdbdef main(): try: conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='pass',db='a ...

  9. MySQL and Postgres command equivalents (mysql vs psql)

    MySQL and Postgres command equivalents (mysql vs psql) 博客分类: Database   From: http://blog.endpoint.c ...

  10. [已解决] windows 80端口被占用

    看下是不是IIS开着,如果是关掉就OK拉 原文地址:http://www.cnblogs.com/gifisan/p/5822156.html