.NET幫助 C# 密封類(對於開發者的運行原理) Curtis Chau 更新日期:6月 22, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 在面向對象程式設計的世界中,C# 語言為開發人員提供了一套多功能的工具來設計和實現健壯的軟體。 其中一個為類繼承增加額外控制層的特徵是密封類的概念。 密封類提供了一種限制繼承層級的獨特方式,為某些場景提供了有益的安全性和封裝性。 In this article, we will delve into the intricacies of the C# sealed classes and also explore the IronPDF NuGet package from Iron Software. 什麼是密封類和密封方法? 密封類: 在 C# 中,密封類是一個無法被繼承的類。 通過使用 sealed 關鍵字,開發人員可以防止其他類從該密封類衍生或擴展。 這種刻意的限制確保了密封類無法作為任何其他類的基類使用,限制了繼承層級的範圍。 密封類通常用於當開發人員希望控制並確定類的結構時,防止通過繼承而產生的意外修改。 在此示例中,IronPDF用於將HTML內容呈現為PDF文檔,然後保存到指定位置。 public sealed class Animal { public string Species { get; set; } public void MakeSound() { Console.WriteLine("Generic animal sound"); } } // The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited: // public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal' // { // } public sealed class Animal { public string Species { get; set; } public void MakeSound() { Console.WriteLine("Generic animal sound"); } } // The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited: // public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal' // { // } Public NotInheritable Class Animal Public Property Species() As String Public Sub MakeSound() Console.WriteLine("Generic animal sound") End Sub End Class ' The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited: ' public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal' ' { ' } $vbLabelText $csharpLabel 與默認為密封的結構體不同,密封類必須按照上面所示使用 sealed 關鍵字宣告。 在這個例子中,Animal 類被聲明為密封,因此其他任何類都無法繼承自它。 密封方法: 除了完全密封類外,C# 還允許開發人員密封類中的個別方法。 密封方法是一個無法被任何衍生類覆寫的方法。這確保了方法的行為在所有子類中保持一致,從而為應用程式的邏輯提供一種預測性。 要密封一個方法,使用 sealed 修飾符: public class Animal { public string Species { get; set; } // A virtual method allows derived classes to override it. public virtual void MakeSound() { Console.WriteLine("Generic animal sound"); } } public class Dog : Animal { // The sealed override prevents further overriding of this method. public sealed override void MakeSound() { Console.WriteLine("Bark!"); } } public class Animal { public string Species { get; set; } // A virtual method allows derived classes to override it. public virtual void MakeSound() { Console.WriteLine("Generic animal sound"); } } public class Dog : Animal { // The sealed override prevents further overriding of this method. public sealed override void MakeSound() { Console.WriteLine("Bark!"); } } Public Class Animal Public Property Species() As String ' A virtual method allows derived classes to override it. Public Overridable Sub MakeSound() Console.WriteLine("Generic animal sound") End Sub End Class Public Class Dog Inherits Animal ' The sealed override prevents further overriding of this method. Public NotOverridable Overrides Sub MakeSound() Console.WriteLine("Bark!") End Sub End Class $vbLabelText $csharpLabel virtual 關鍵字允許方法在衍生類中被覆寫,而 sealed 關鍵字則防止在任何後續子類中進一步覆寫基類的虛擬方法。 密封類及其成員: 密封類還可以包含密封成員,例如屬性、方法和事件。 這種密封類和密封成員的組合確保高度控制類的行為和結構。 在此示例中,IronPDF用於將HTML內容呈現為PDF文檔,然後保存到指定位置。 public sealed class ControlledClass { // A sealed property that prevents overriding. public sealed string ControlledProperty { get; set; } // A method that cannot be redefined by derived classes. public virtual sealed void ControlledMethod() { // Method implementation Console.WriteLine("Executing controlled method."); } // A sealed event that cannot be subscribed to or raised by derived classes. 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 { // A sealed property that prevents overriding. public sealed string ControlledProperty { get; set; } // A method that cannot be redefined by derived classes. public virtual sealed void ControlledMethod() { // Method implementation Console.WriteLine("Executing controlled method."); } // A sealed event that cannot be subscribed to or raised by derived classes. public sealed event EventHandler ControlledEvent; // Sealed indexers, if applicable public sealed string this[int index] { get { return "Value"; } set { // Setter implementation } } } Public NotInheritable Class ControlledClass ' A sealed property that prevents overriding. Public NotOverridable Property ControlledProperty() As String ' A method that cannot be redefined by derived classes. Public Overridable NotOverridable Sub ControlledMethod() ' Method implementation Console.WriteLine("Executing controlled method.") End Sub ' A sealed event that cannot be subscribed to or raised by derived classes. Public Event ControlledEvent As EventHandler ' Sealed indexers, if applicable Default Public NotOverridable Property Item(ByVal index As Integer) As String Get Return "Value" End Get Set(ByVal value As String) ' Setter implementation End Set End Property End Class $vbLabelText $csharpLabel 在這個例子中,ControlledClass 的每個方面都是密封的 - 屬性、方法、事件,甚至是索引器(如果適用)。 這種級別的密封提供了一個堅固和不可更改的結構,適合在類的設計應保持固定的場景中。 密封類背後的理由 代碼安全性: 密封類通過防止未經授權的訪問和修改來增強代碼安全性。 當一個類被密封時,它作為一個封閉的實體,具有明確的介面和行為。 這種封裝將意外副作用或更改的風險降至最低,這些更改可能會潛在地影響代碼庫的穩定性和安全性。 設計完整性: 在較大的代碼庫或框架中,維護設計完整性至關重要。 密封類作為具有固定結構的基石,減少了意外修改的可能性。 這在類作為系統核心組件的場景中特別有益,其行為應在不同模組中保持一致。 使用密封類的最佳實踐 謹慎使用密封類:雖然密封類具有優勢,但應謹慎使用。 過度使用密封類可能會導致代碼僵化且難以維護。 記錄意圖: 當密封一個類或方法時,記錄做出該決定背後的意圖至關重要。 解釋為什麼具體的類被密封以及什麼設計考慮導致了這樣的選擇。 考慮未來的可擴展性: 在密封一個類之前,考慮未來需求是否可能需要可擴展性。 如果有可能需要擴展一個類,密封它可能會阻礙未來的開發。 使用密封方法以提高穩定性: 當方法的核心行為應在不同的子類中保持穩定時,密封方法可以是有益的。 這可以增強代碼的可預測性。 它不能同時是抽象的: 密封類/密封方法不能同時是抽象類/抽象方法,因為抽象類設計是被其他類繼承的,而密封類限制繼承。 介绍 IronPDF IronPDF is a C# PDF library from Iron Software 的 C# PDF 庫,是一款現代化的 PDF 生成器和閱讀器。 安裝 IronPDF 可以使用 NuGet 套件管理器控制台或使用 Visual Studio 套件管理器安裝。 以下是控制台的命令: Install-Package IronPdf 或者,使用 NuGet 套件管理器安裝 IronPDF,可以在 NuGet 套件管理器的搜索欄中搜索“ironpdf”。 IronPDF 和密封類 密封關鍵字和 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(); } } // 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 { // Sealed override ensures method cannot be overridden in further derived classes. public sealed override void MakeSound() { Console.WriteLine("Bark!"); } public sealed override void Print() { var pdfRenderer = 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>"; pdfRenderer.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(); } } // 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 { // Sealed override ensures method cannot be overridden in further derived classes. public sealed override void MakeSound() { Console.WriteLine("Bark!"); } public sealed override void Print() { var pdfRenderer = 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>"; pdfRenderer.RenderHtmlAsPdf(content).SaveAs("dog.pdf"); } } } Namespace OrderBy Public Class Program Shared Sub Main() Console.WriteLine("Demo Sealed Class and IronPdf") Dim dog As New Dog() dog.MakeSound() dog.Print() End Sub End Class ' Base class Public Class Animal Public Property Species() As String Public Overridable Sub MakeSound() Console.WriteLine("Generic animal sound") End Sub Public Overridable Sub Print() Console.WriteLine("Generic animal Print") End Sub End Class Public Class Dog Inherits Animal ' Sealed override ensures method cannot be overridden in further derived classes. Public NotOverridable Overrides Sub MakeSound() Console.WriteLine("Bark!") End Sub Public NotOverridable Overrides Sub Print() Dim pdfRenderer = New ChromePdfRenderer() Dim content As String = " <!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>" pdfRenderer.RenderHtmlAsPdf(content).SaveAs("dog.pdf") End Sub End Class End Namespace $vbLabelText $csharpLabel 以下是由 IronPDF 生成的 PDF 許可(可用免費試用) IronPDF。 此金鑰需要放置在 appsettings.json 中。 { "IronPdf.LicenseKey": "your license key" } 提供您的電子郵件以獲取試用許可證。 結論 C# 密封類為開發人員提供了一種強大的機制來控制繼承層級,確保特定類及其成員無法擴展或覆寫。 雖然密封類的使用需要仔細考慮,但它們提供了一種封裝功能和防止意外修改的有效方法。 通過理解密封類和方法的概念,開發人員可以就何時何地應用此限制做出明智的決策,有助於創建可維護、安全且可預測的軟體系統。 與 IronPDF 一起,我們還可以列印 PDF 文件。 常見問題解答 C# 中的密封類是如何運作的? 在 C# 中,密封類是使用sealed關鍵字定義的。這防止其他類繼承自它,確保類的實現保持不變。 為什麼開發人員應該在 C# 中使用密封類? 密封類用來通過防止繼承來維護代碼的完整性。這確保類的行為保持一致和安全,特別是在設計完整性至關重要的大型系統中。 密封類可以有也被密封的方法嗎? 是的,密封類可以包含自身也是密封的方法。這意味著這些方法不能在衍生類中被重寫,進一步增強了類功能的安全性和一致性。 在類中使用密封方法有什麼好處? 密封方法可防止衍生類重寫,這有助於保持方法的原始行為,確保一致性並防止意外修改。 你能提供什麼時候使用密封類的例子嗎? 當您想要通過防止通過繼承進行更改來鎖定類的實現時,例如在工具類或處理需要穩定性的敏感操作時,密封類是有用的。 密封類與 C# 中的 PDF 生成有何關聯? 當使用像 IronPDF 這樣的 PDF 庫時,可以利用密封類來確保 PDF 生成過程保持一致和安全,通過防止通過繼承進行修改。 能否將密封類與像 IronPDF 這樣的第三方庫一起使用? 是的,密封類可以與像 IronPDF 這樣的第三方庫一起使用,以便將 PDF 生成邏輯封裝在安全、不可繼承的類結構中。 我如何使用 NuGet 安裝 C# PDF 庫? 您可以通過使用命令dotnet add package IronPdf或在 Visual Studio 的 NuGet 套件管理器中搜索 'ironpdf' 安裝 C# PDF 庫,如 IronPDF。 在軟件設計中使用密封類需要考慮哪些問題? 開發人員應考慮未來的可擴展性需求並記錄密封類的原因。使用密封類可以增強安全性和可維護性,但應與應用程序所需的靈活性權衡。 推薦的 C# 開發人員使用的 PDF 生成器是什麼? IronPDF 是 C# 開發人員推薦的 PDF 生成器,提供作為 NuGet 套件的強大 PDF 創建和操作功能。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新日期 9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新日期 9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 更新日期 8月 5, 2025 C#開關模式匹配(對開發者來說是如何工作的) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 C# 優先級隊列(對於開發者的運行原理)C# LINQ 連接查詢語法(對於...