轻松学习C#的密封类

密封类概述
       并不是所有的类都可以被继承,C#语言中就是密封类。在C#语言中我们可以把类声明为sealed。这表示不能继承该类,如果想要继承那么编译器肯定会报错。在把类或方法标记为sealed时,最可能出现的情形时:如果要对库,类或自己编写的其他类进行操作,则重写某些功能会导致编译错误。也可以因商业原因把类或方法标记为sealed,以防第三方违反注册协议的方式扩展该类。但是在一般情况下,在把类或方法标记为sealed时要小心,因为这么做会限制它的使用。即使不希望它能继承一个类或重写类的某个成员,仍有可能在将来的某个时刻,有人会遇到没有预料到的情形。.NET基类库大量使用了密封类,使希望从这些类派生出自己的类的第三方开发人员无法访问这些类。
       密封类的声明格式为:
       访问修饰符  sealed  class  类名:基类或接口
       {
               类体
       }
       其中访问修饰符,基类或接口都是可选的。
       密封方法概述
       当实例方法声明包含sealed修饰符时,称方法为密封方法。如果实例方法声明包含sealed修饰符,则它必须包含override修饰符。使用sealed修饰符可以防止派生类进一步重写该方法。要在方法中使用sealed关键字,必须现在基类上将其声明为重写。如果基类上不希望有重写的方法或属性,就不要将其声明为virtual。
       访问修饰符  sealed  override 方法名称(参数列表)
      {
             方法体
      }
      其中访问修饰符,参数列表都是可选的。
      来看看实例

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; 

namespace qq
{
  class class1
  {
    public virtual void seaText()
    {
      Console.WriteLine("这是一个未密封的方法!");
    }
  }
  sealed class class2 : class1
  {
    public sealed override void seaText()
    {
      Console.WriteLine("这是一个密封的方法!");
    }
  }
  /*class class3 : class2//密封类不能被继承
  {
    public override void seaText()//不能重写密封方法
    {
      Console.WriteLine("这是一个不能运行的方法!");
    }
  }*/
  class Program
  {
    static void Main(string[] args)
    {
      class2 c2 = new class2();
      c2.seaText();
      Console.ReadLine();
    }
  }
}</span> 

很简单得出的输出结果:这是一个密封的方法

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; 

namespace qq
{
  sealed class Person
  {
    public void print_Person_name()
    {
      Console.WriteLine("张三");
    }
  }
  class Student : Person//密封类不能被继承
  {
  }
  class Program
  {
    static void Main(string[] args)
    {
      Student s1 = new Student();
      s1.Print_Person_name();//不能调用密封类的方法
      Console.ReadLine();
    }
  }
}</span> 

这是一个错误的实例,在我们使用密封类的时候不能出现这样的情况,再者就是这样的关键字我们一般要少用。

以上就是关于C#的密封类的全部内容介绍,希望对大家的学习有所帮助。

(0)

相关推荐

  • C# 静态变量与静态方法实例研究

    程序如下: 复制代码 代码如下: public static string 英汉(string english,翻译结果 一个或多个) { string 英汉辞典 = Settings.Default.辞典所在目录+"haou_dict.xml"; try { if (File.Exists(英汉辞典)) { XDocument dictionary = XDocument.Load(英汉辞典); var query = from p in dictionary.Descendants

  • C#中静态构造函数的几点说明介绍

    静态构造函数是C#的一个新特性,其实好像很少用到.不过当我们想初始化一些静态变量的时候就需要用到它了.这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次.也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用. 复制代码 代码如下: class SimpleClass{// Static constructorstatic SimpleClass(){//}} 在使用静态构造函数的时候应该注意几点: 1.静态构造函数既没有访问修饰符,也没有参数.因为是.NE

  • c# static 静态数据成员

    ① 静态成员属于类所有,非静态成员属于类的实例所有. ② 每创建一个类的实例,都市在内存中为非静(动)态成员新分派一块存储: 静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域. 静态数据成员区别于动态数据成员,静态变量并不是稳定的,只是静态变量在声明的时候不管有没有赋值,都市凭据它的类型分派对应的内存空间,他的可访问性和作用区间与动态变量是一样的 ==================================================

  • C#中实现伪静态页面两种方式介绍

    第一种是在页面global.asax中,相关代码如下: 复制代码 代码如下: void Application_BeginRequest(object sender, EventArgs e) { HttpContext context = ((HttpApplication)sender).Context; string oldurl = context.Request.Path.ToLower(); if ( ( oldurl.IndexOf("-") > 0 &&a

  • C#静态方法与非静态方法实例分析

    本文实例分析了C#静态方法与非静态方法,并对其用法进行了较为全面的分析.分享给大家供大家参考.具体分析如下: 通常来说,C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身.所以对静态方法不需要首先创建一个类的实例,而是采用 类名.静态方法 的格式 . 1)static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用. static内部

  • C# 静态构造函数使用总结

    •静态构造函数既没有访问修饰符,也没有参数. •如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数. •在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了. •如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行. •如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运

  • C#静态变量与实例变量实例分析

    本文实例讲述了C#静态变量与实例变量的具体用法,分享给大家供大家参考.具体分析如下: 1)在语法定义上的区别: 类变量也叫静态变量,静态变量前要加static关键字,而实例变量前则不加: 实例变量也叫对象变量,即没加static 的变量: 2)在程序运行时的区别: 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态

  • 理解C#编程中的静态类和静态成员以及密封类

    静态类 静态类与非静态类基本相同,但存在一个区别:静态类不能实例化.也就是说,不能使用 new 关键字创建静态类类型的变量.因为没有实例变量,所以要使用类名本身访问静态类的成员.例如,如果名为 UtilityClass 的静态类有一个名为 MethodA 的公共方法,则按下面的示例所示调用该方法: UtilityClass.MethodA(); 对于只对输入参数进行运算而不获取或设置任何内部实例字段的方法集,静态类可以方便地用作这些方法集的容器.例如,在 .NET Framework 类库中,静

  • c#静态方法和非静态方法详细介绍

    C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身.所以对静态方法不需要 首先创建一个类的实例,而是采用类名.静态方法的格式 .1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用!static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是 属于整

  • C#中static静态变量的用法实例

    本文实例讲述了C#中static静态变量的用法.分享给大家供大家参考.具体如下: 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类.字段.方法.属性.运算符.事件和构造函数,但不能用于索引器.析构函数或类以外的类型   静态全局变量 定义:在全局变量前,加上关键字 static 该变量就被定义成为了一个静态全局变量. 特点: ① .该变量在全局数据区分配内存. ② .初始化:如果不显式初始化,那么将被隐式初始化为0.   静态局部变量 定义:在局部

  • C#静态static的用法实例分析

    本文实例讲述了C#静态static的用法,分享给大家供大家参考.具体用法分析如下: 一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类:其次,它防止在类的内部声明任何实例字段或方法. 静态类的主要特性: 1:仅包含静态成员. 2:无法实例化. 3:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化. 4:不能包含实例构造

  • 学习C#静态函数及变量的一个精典例子与代码

    (1)用于对静态字段.只读字段等的初始化.                (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的.          (3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数  (4)静态构造函数是不可继承的,而且不能被直接调用.              (5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行.任何带有初始值设定项的静态字

随机推荐