在生產環境中測試,無水印。
在任何需要的地方都能運行。
獲得 30 天的全功能產品。
在幾分鐘內上手運行。
試用產品期間完全訪問我們的支援工程團隊
在物件導向程式設計的世界中,C#語言為開發者提供了一套多功能的工具來設計和實現健全的軟體。 添加到類別繼承中的一個附加控制層的功能就是密封類別的概念。 密封類提供了一種獨特的方式來限制繼承階層,在某些情況下可以提供有益的安全性和封裝。 在本文中,我們將深入探討 C# sealed 類的複雜性,並且還會探討IronPDFNuGet 套件來自Iron Software.
密封類別: 在 C# 中,密封類別是一種無法被繼承的類別。 通過使用 sealed 關鍵字,開發人員可以防止其他類別從該 sealed 類別衍生或擴展。 此刻意的限制確保密封類別無法用作其他類別的基礎類別,從而限制繼承階層的範圍。 密封類通常在開發人員希望控制並確定類的結構時使用,以防止通過繼承進行意外修改。
請考慮以下示例:
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal // Error: Cannot be inherited
{
}
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal // Error: Cannot be inherited
{
}
與隱式封閉的結構不同,密封類必須使用如上所示的 sealed 關鍵字來聲明。 在此範例中,Animal 類別被宣告為密封,使得其他任何類別無法從中繼承。
密封方法: 除了封裝整個類別之外,C# 還允許開發者在類別中封裝個別的方法。 密封方法是一種任何衍生類別都無法覆蓋的方法。這確保了方法的行為在所有子類中保持一致,為應用程式的邏輯提供了一定程度的可預測性。
要封裝方法,請使用 sealed 修飾符:
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
虛擬(virtual)關鍵字允許在衍生類別中覆寫方法,而密封(sealed)關鍵字則防止在任何後續子類中進一步覆寫基類的虛擬方法。
密封類別和類別成員:密封類別也可以包含密封成員,例如屬性、方法和事件。 這種密封類和密封成員的組合確保了對類行為和結構的高度控制。
請考慮以下示例:
public sealed class ControlledClass
{
public sealed string ControlledProperty { get; set; }
public virtual sealed void ControlledMethod()
{
// Method implementation
}
// Sealed event
public sealed event EventHandler ControlledEvent;
// Sealed indexers, if applicable
public sealed string this [int index]
{
get { return "Value"; }
set { /* Setter implementation */ }
}
}
public sealed class ControlledClass
{
public sealed string ControlledProperty { get; set; }
public virtual sealed void ControlledMethod()
{
// Method implementation
}
// Sealed event
public sealed event EventHandler ControlledEvent;
// Sealed indexers, if applicable
public sealed string this [int index]
{
get { return "Value"; }
set { /* Setter implementation */ }
}
}
在這個例子中,ControlledClass
的每一個方面都是密封的,包括屬性、方法、事件,甚至適用的話也包括索引子。 此級別的封裝提供了一種堅固不可更改的結構,非常適合需要保持類設計固定的情況。
程式碼安全性: 密封類透過防止未授權訪問和修改來增強程式碼安全性。 當一個類被封閉時,它作為一個具有明確定義界面和行為的封閉實體。 這種封裝減少了意外副作用或更改的風險,這些可能會潛在地危害代碼庫的穩定性和安全性。
設計完整性: 在較大的代碼庫或框架中,維持設計完整性是至關重要的。 密封類作為具有固定結構的基礎構建塊,減少了非預期修改的可能性。 這在一個類別作為系統核心組件的場景中特別有利,並且它的行為應在不同模塊中保持一致。
謹慎使用 Sealed 類別:雖然 sealed 類別具有優勢,但應該謹慎使用。 過度使用密封類可能導致代碼變得僵化且難以維護。
文件意圖:當封裝一個類或方法時,記錄此決策背後的意圖是至關重要的。 解釋為什麼特定類別是密封的,以及哪些設計考量導致了這個選擇。
考慮未來的可擴充性:在封裝類之前,請考慮未來的需求是否可能需要可擴充性。 如果某個類別有可能需要擴展,將其密封可能會阻礙未來的開發。
使用密封方法以保持穩定性:當方法的核心行為應在不同的子類別中保持穩定時,使用密封方法會很有幫助。 這可以增強程式碼的可預測性。
IronPDF是一個來自 的 C# PDF 庫Iron Software並且是一個現代的 PDF 生成器和閱讀器。
IronPDF 可以使用以下方法安裝:NuGet使用封裝管理器主控台或Visual Studio封裝管理器。 以下是控制台的命令:
dotnet add package IronPdf
或者,使用 NuGet 套件管理器安裝 IronPDF,在 NuGet 套件管理器的搜尋欄中搜尋「ironpdf」。
結合 sealed 關鍵字和 IronPDF 可以防止子類別庫或衍生類別庫重寫繼承的成員,並生成 PDF。
namespace OrderBy;
public class Program
{
static void Main()
{
Console.WriteLine("Demo Sealed Class and IronPdf");
var dog = new Dog();
dog.MakeSound();
dog.Print();
}
}
// Sealed base class
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public virtual void Print()
{
Console.WriteLine("Generic animal Print");
}
}
public class Dog : Animal
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public sealed override void Print()
{
var pdfDocument = new ChromePdfRenderer();
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, Dog!</h1>
<p>This is Print from Derived class.</p>
<p>Print Animal Dog</p>
<p>Print Animal Sound: Bark</p>
</body>
</html>";
pdfDocument.RenderHtmlAsPdf(content).SaveAs("dog.pdf");
}
}
namespace OrderBy;
public class Program
{
static void Main()
{
Console.WriteLine("Demo Sealed Class and IronPdf");
var dog = new Dog();
dog.MakeSound();
dog.Print();
}
}
// Sealed base class
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public virtual void Print()
{
Console.WriteLine("Generic animal Print");
}
}
public class Dog : Animal
{
public sealed override void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public sealed override void Print()
{
var pdfDocument = new ChromePdfRenderer();
string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, Dog!</h1>
<p>This is Print from Derived class.</p>
<p>Print Animal Dog</p>
<p>Print Animal Sound: Bark</p>
</body>
</html>";
pdfDocument.RenderHtmlAsPdf(content).SaveAs("dog.pdf");
}
}
以下是由 IronPDF 生成的 PDF
IronPDF. 此鍵需要放置在 appsettings.json 中。
"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
提供您的電子郵件以獲取試用許可證。
C# 密封類別為開發人員提供了一種強大的機制,以控制繼承層次結構,並確保某些類別及其成員無法被擴展或覆蓋。 雖然使用密封類應該謹慎考慮,但它們提供了封裝功能和防止意外修改的有效方法。 透過了解密封類別和方法的概念,開發者可以知曉何時及何地運用這種限制,進而有助於打造可維護、安全且可預測的軟體系統。 除了 IronPDF,我們還可以打印 PDF 文件。