C# 基础之密封类

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

原文地址:https://www.cnblogs.com/lbonet/p/6874532.html