ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
オブジェクト指向プログラミングの世界では、C# 言語は開発者に対して堅牢なソフトウェアを設計および実装するための多用途なツールセットを提供します。 クラス継承に追加の制御層を提供する特徴の一つに、シールドクラスの概念があります。 シールドクラスは、継承階層を制限するユニークな方法を提供し、特定のシナリオで有益なセキュリティとカプセル化のレベルを提供します。 この記事では、C#のシールドクラスの複雑さに深入りし、その詳細を探求します。また、IronPDFNuGetパッケージIron Software.
シールドクラス: C#では、シールドクラスは継承できないクラスです。 sealedキーワードを使用することで、開発者は他のクラスが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
{
}
Public NotInheritable Class Animal
Public Property Species() As String
Public Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
Public Class Dog ' Error: Cannot be inherited
Inherits Animal
End Class
構造体とは異なり、暗黙的に封じられるものですが、封印されたクラスは上記のようにsealedキーワードを使用して宣言する必要があります。 この例では、Animal クラスは sealed として宣言されているため、他のクラスがこのクラスを継承することはできません。
シールドメソッド(Sealed Method): 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");
}
}
Public Class Animal
Public Property Species() As String
Public Overridable Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
Public Class Dog
Inherits Animal
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
仮想(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 */ }
}
}
Public NotInheritable Class ControlledClass
Public NotOverridable Property ControlledProperty() As String
Public Overridable NotOverridable Sub ControlledMethod()
' Method implementation
End Sub
' Sealed event
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)
End Set
End Property
End Class
この例では、クラス ControlledClass
のすべての側面が封印されています—プロパティ、メソッド、イベント、そして必要に応じてインデクサもです。 このレベルのシーリングは、堅牢で変更不可能な構造を提供し、クラスの設計が固定されているべきシナリオに理想的です。
コードのセキュリティ: シールドクラスは、無許可のアクセスや変更を防ぐことでコードのセキュリティに貢献します。 クラスがシールドされると、それは明確なインターフェースと振る舞いを持つ閉じたエンティティとして機能します。 このカプセル化により、誤って副作用や変更が発生し、コードベースの安定性やセキュリティが損なわれるリスクを最小限に抑えることができます。
デザインの整合性: 大規模なコードベースやフレームワークでは、デザインの整合性を維持することが最も重要です。 シールドクラスは、固定された構造を持つ基礎的なビルディングブロックとして機能し、意図しない変更の可能性を減らします。 これは、クラスがシステムの中核コンポーネントとして機能し、その動作が異なるモジュール間で一貫しているべきシナリオにおいて特に有益です。
シールドクラスは控えめに使用: シールドクラスは利点を提供しますが、慎重に使用する必要があります。 シールドクラスの過剰使用は、硬直的で保守性の低いコードにつながる可能性があります。
ドキュメントの意図: クラスやメソッドをシールする際には、この決定の背後にある意図を明確にドキュメント化することが重要です。 特定のクラスがsealedとして定義されている理由と、その選択に至った設計上の考慮事項を説明してください。
将来的な拡張性を考慮する: クラスをシールする前に、将来の要件が拡張性を必要とする可能性があるかどうかを考慮してください。 クラスが将来的に拡張される可能性がある場合、そのクラスをシールすることは今後の開発を妨げるかもしれません。
安定性のための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");
}
}
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
' Sealed 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
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
Public NotOverridable Overrides Sub Print()
Dim pdfDocument = 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>"
ignore ignore ignore ignore ignore ignore ignore ignore pdfDocument.RenderHtmlAsPdf(content).SaveAs("dog.pdf")
End Sub
End Class
End Namespace
以下は IronPDF から生成された PDF です。
IronPDF. このキーはappsettings.jsonに配置する必要があります。
"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"IronPdf.LicenseKey": "your license key"
試用ライセンスを取得するためにメールアドレスを提供してください。
C#のsealedクラスは、開発者に継承の階層を制御し、特定のクラスおよびそのメンバーが拡張されたりオーバーライドされたりしないようにするための強力なメカニズムを提供します。 シールドクラスの使用は慎重に検討すべきですが、機能をカプセル化し、意図しない修正を防ぐための効果的な手段を提供します。 シールドクラスとメソッドの概念を理解することで、開発者はこの制約をいつどこで適用するかについて情報に基づいた決定を下すことができ、それによって保守性が高く、安全で予測可能なソフトウェアシステムを作成することに貢献します。 IronPDFと一緒に、PDFドキュメントを印刷することもできます。
9つの .NET API製品 オフィス文書用