当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C# Sealed用法及代码示例


密封类用于限制用户继承该类。可以使用以下方法密封一个类密封关键词。该关键字告诉编译器该类是密封的,因此无法扩展。任何类都不能从密封类派生。

以下是密封类的语法:

sealed class class_name
{
    // data members
    // methods
    .
    .
    .

}

方法也可以被密封,在这种情况下,该方法不能被重写。然而,方法可以被密封在继承它们的类中。如果你想将一个方法声明为密封的,那么它必须声明为虚拟的在其基类中。

以下类定义定义了 C# 中的密封类:

在以下代码中,创建一个密封类SealedClass并从程序中使用它。如果你运行这段代码,那么它会正常工作。

C#


// C# code to define
// a Sealed Class
using System;
// Sealed class
sealed class SealedClass {
    // Calling Function
    public int Add(int a, int b)
    {
        return a + b;
    }
}
class Program {
    // Main Method
    static void Main(string[] args)
    {
        // Creating an object of Sealed Class
        SealedClass slc = new SealedClass();
        // Performing Addition operation
        int total = slc.Add(6, 4);
        Console.WriteLine("Total = " + total.ToString());
    }
}

输出:

Total = 10

现在,如果它尝试从密封类继承类,则会产生错误,指出“它不能从密封类派生”。

C#


// C# code to show restrictions
// of a Sealed Class
using System;
class Bird {
}
// Creating a sealed class
sealed class Test : Bird {
}
// Inheriting the Sealed Class
class Example : Test {
}
// Driver Class
class Program {
    // Main Method
    static void Main()
    {
    }
}

错误:

Error CS0509 ‘Example’ : cannot derive from sealed type ‘Test’

考虑以下派生类中密封方法的示例:

C#


// C# program to
// define Sealed Class
using System;
class Printer {
    // Display Function for
    // Dimension printing
    public virtual void show()
    {
        Console.WriteLine("display dimension : 6*6");
    }
    // Display Function
    public virtual void print()
    {
        Console.WriteLine("printer printing....\n");
    }
}
// inheriting class
class LaserJet : Printer {
    // Sealed Display Function
    // for Dimension printing
    sealed override public void show()
    {
        Console.WriteLine("display dimension : 12*12");
    }
    // Function to override
    // Print() function
    override public void print()
    {
        Console.WriteLine("Laserjet printer printing....\n");
    }
}
// Officejet class cannot override show
// function as it is sealed in LaserJet class.
class Officejet : LaserJet {
    // can not override show function or else
    // compiler error : 'Officejet.show()' : 
    // cannot override inherited member
    // 'LaserJet.show()' because it is sealed.
    override public void print()
    {
        Console.WriteLine("Officejet printer printing....");
    }
}
// Driver Class
class Program {
    // Driver Code
    static void Main(string[] args)
    {
        Printer p = new Printer();
        p.show();
        p.print();
        Printer ls = new LaserJet();
        ls.show();
        ls.print();
        Printer of = new Officejet();
        of.show();
        of.print();
    }
}

输出:

display dimension : 6*6
Printer printing....

display dimension : 12*12
LaserJet printer printing....

display dimension : 12*12
Officejet printer printing....

说明:在上面的 C# 代码中,Printer 类具有尺寸为 6*6 的显示单元,LaserJet 类通过重写它来实现 show 方法,使其具有 12*12 的尺寸。如果任何类继承 LaserJet 类,那么它将具有相同的 12*12 尺寸,并且无法实现自己的尺寸,即它不能具有 15*15、16*16 或任何其他尺寸。因此,LaserJet 调用将密封 show 方法以防止进一步覆盖它。

为什么选择密封课程?

  • 密封类用于阻止类被继承。您不能从中派生或扩展任何类。
  • 实现了密封方法,以便其他类无法推翻它并实现自己的方法。
  • 密封类的主要目的是从用户那里撤回继承属性,以便他们无法从密封类中获取类。当您有一个包含静态成员的类时,最好使用密封类。
    e.gSystem.Drawing 命名空间的 “Pens” 和 “Brushes” 类。 Pens 类代表标准颜色的笔。这个类只有静态成员。例如,“Pens.Red”代表一支红色的笔。同样,“Brushes” 类代表标准画笔。 “Brushes.Red”代表红色画笔。


相关用法


注:本文由纯净天空筛选整理自Akanksha_Rai大神的英文原创作品 C# | Sealed Class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。