
C# Sealed Class(開発者向けの動作方法)
オブジェクト指向プログラミングの世界では、C# 言語は開発者に汎用性のあるツールセットを提供し、堅牢なソフトウェアを設計し実装することができます。 クラス継承に追加の制御層を加える機能のひとつは、sealed クラスの概念です。 Sealed クラスは、継承階層を制限する独自の方法を提供し、特定のシナリオで有益なセキュリティとカプセル化のレベルを提供します。 この記事では、C# sealed クラスの詳細に触れ、IronPDF の Iron Software からの NuGet パッケージについても探ります。
Sealed クラスと Sealed メソッドとは何ですか?
Sealed クラス: C# では、sealed クラスは継承できないクラスです。 開発者はsealedキーワードを使用することで、他のクラスが密封されたクラスから派生または拡張するのを防ぐことができます。 この意図的な制限により、sealed クラスが他のクラスの基底クラスとして使用されることを防ぎ、継承階層の範囲を制限します。 Sealed クラスは、開発者がクラスの構造を制御し確定したい場合によく使用されます。
次の例を考えてみましょう。
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'
' {
' }構造体とは異なり、密封クラスは暗黙的に密封されているため、上記のようにsealedキーワードを使用して宣言する必要があります。 この例では、Animalクラスが密封として宣言されており、他のクラスがそれを継承することができません。
Sealed Method: In addition to sealing entire classes, C# also allows developers to seal individual methods within a class. Sealed メソッドは、派生クラスによってオーバーライドできないメソッドです。これにより、アプリケーションの論理の中でメソッドの動作がすべてのサブクラス間で一貫していることが保証されます。
メソッドを密封するには、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 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 Classsealedキーワードはその後のサブクラスで基底クラスの仮想メソッドのさらなるオーバーライドを防ぎます。
Sealed クラスとクラス メンバー: Sealed クラスは、プロパティ、メソッド、およびイベントなどの sealed メンバーを含めることもできます。 この sealed クラスと sealed メンバーの組み合わせにより、クラスの動作と構造に対するコントロールの高いレベルが確立されます。
次の例を考えてみましょう。
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この例では、ControlledClassのあらゆる側面が密封されており、プロパティ、メソッド、イベント、さらにはインデクサーも該当します。 このシールレベルは強固で改変不可能な構造を提供し、クラスの設計が固定されるべきシナリオに理想的です。
シールド クラスの背後にある理由
コード セキュリティ: Sealed クラスは、無許可のアクセスや変更を防ぐことでコード セキュリティに貢献します。 クラスがシールされていると、明確なインターフェイスと動作を持つクローズド エンティティとして機能します。 このカプセル化により、コードベースの安定性やセキュリティを潜在的に損なう可能性のある意図しない副作用や変更のリスクが最小限に抑えられます。
設計の一貫性: 大規模なコードベースやフレームワークでは、設計の一貫性の維持が非常に重要です。 シールされたクラスは、固定された構造を持つ基礎となるビルディング ブロックとして機能し、意図しない変更の可能性を減らします。 これは、クラスがシステムのコアコンポーネントとして機能し、その動作が異なるモジュール間で一貫しているべきであるシナリオに特に有益です。
Best Practices for Using Sealed Class
- シールされたクラスを控えめに使用する: シールされたクラスは利点を提供しますが、慎重に使用する必要があります。 Sealed クラスの過剰使用は、固定されたコードになる可能性があります。
- 意図を文書化する: クラスまたはメソッドをシールする際は、この決定の背後にある意図を文書化することが重要です。 特定のクラスがシールされている理由や、その選択につながった設計上の考慮事項を説明します。
- 将来の拡張性を考慮する: クラスをシールする前に、将来の要件が拡張性を必要とする可能性を考慮してください。 クラスが拡張される必要がある可能性がある場合、シールすることは将来の開発を妨げる可能性があります。
- 安定性のためにシールされたメソッドを使用する: メソッドのコアの動作を異なるサブクラスで安定させる必要がある場合、メソッドをシールすることは有益です。 これにより、コードの予測可能性が向上します。
- 抽象化できない: Sealed クラス/メソッドは、抽象クラス/メソッドとして抽象化することはできません。抽象クラスは他のクラスによって継承されるように設計されていますが、シールされたクラスは継承を制限します。
IronPDFの紹介

IronPDF は、Iron Software の C# PDF ライブラリであり、最新の PDF ジェネレーターおよびリーダーです。
インストール
IronPDF は、NuGet パッケージ マネージャー コンソールまたは Visual Studio パッケージ マネージャーを使用してインストールできます。 以下はコンソール用のコマンドです:
または、NuGetパッケージマネージャーを使用してIronPDFをインストールするには、NuGetパッケージマネージャーの検索バーに"IronPDF"と入力します。

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();
}
}
// 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 As 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
以下は IronPDF から生成された PDF です。

ライセンス (無料トライアル利用可能)
IronPDF. このキーはappsettings.jsonに配置する必要があります。
{
"IronPdf.LicenseKey": "your license key"
}
トライアルライセンスを取得するには、メールアドレスを提供してください。
結論
C# sealed クラスは、開発者に継承階層を制御し、特定のクラスやそのメンバーを拡張やオーバーライド不可能にする強力なメカニズムを提供します。 Sealed クラスの使用は慎重に考慮されるべきですが、機能をカプセル化し、意図しない変更を防ぐ効果的な手段を提供します。 Sealed クラスとメソッドの概念を理解することで、開発者はこの制限を適用すべき状況を判断し、メンテナンス性、セキュリティ性、一貫性のあるソフトウェア システムの実現に寄与することができます。 また、IronPDF と共に PDF ドキュメントを印刷することもできます。

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。
関連する記事


