密封類用於限製用戶繼承該類。可以使用以下方法密封一個類密封關鍵詞。該關鍵字告訴編譯器該類是密封的,因此無法擴展。任何類都不能從密封類派生。
以下是密封類的語法:
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”代表紅色畫筆。
相關用法
- C# String Clone()用法及代碼示例
- C# String Compare()用法及代碼示例
- C# String CompareOrdinal()用法及代碼示例
- C# String CompareTo()用法及代碼示例
- C# String Concat()用法及代碼示例
- C# String Contains()用法及代碼示例
- C# String Copy()用法及代碼示例
- C# String CopyTo()用法及代碼示例
- C# String EndsWith()用法及代碼示例
- C# String Equals()用法及代碼示例
- C# String Format()用法及代碼示例
- C# String GetEnumerator()用法及代碼示例
- C# String IndexOf()用法及代碼示例
- C# String Insert()用法及代碼示例
- C# String IsInterned()用法及代碼示例
- C# String IsNormalized()用法及代碼示例
- C# String IsNullOrEmpty()用法及代碼示例
- C# String IsNullOrWhiteSpace()用法及代碼示例
- C# String Join()用法及代碼示例
- C# String LastIndexOf()用法及代碼示例
- C# String LastIndexOfAny()用法及代碼示例
- C# String Normalize()用法及代碼示例
- C# String PadLeft()用法及代碼示例
- C# String PadRight()用法及代碼示例
- C# String Remove()用法及代碼示例
注:本文由純淨天空篩選整理自Akanksha_Rai大神的英文原創作品 C# | Sealed Class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。