Sealed は中国語で封印されたという意味で、その名前が示すように、それによって変更されたクラスやメソッドは継承したりオーバーライドしたりすることができません。
sealed キーワードの役割:
クラス宣言で sealed を使用すると、他のクラスがこのクラスを継承できなくなります。メソッド宣言で sealed 修飾子を使用すると、拡張クラスがこのメソッドをオーバーライドできなくなります。
sealed 修飾子は主に意図しない派生を防ぐために使用されますが、特定の実行時の最適化を促進することもできます。具体的には、シールされたクラスは派生クラスを持たないため、シールされたクラスのインスタンスの仮想関数メンバーへの呼び出しは、処理のために非仮想呼び出しに変換できます。
Sealed クラス:
Sealed クラスは、その宣言で Sealed 修飾子を使用して、クラスが他のクラスに継承されるのを防ぎます。シールされたクラスを他のクラスの基本クラスとして使用しようとすると、C# によってエラーが表示されます。もちろん、抽象化は常に継承される必要があるため、シールされたクラスを同時に抽象クラスにすることはできません。
印鑑はどんな場面で使われますか?実際、シールされたクラス内に派生クラスを持つことは不可能です。仮想メンバー関数がシールされたクラス インスタンスに存在する場合、そのメンバー関数は非仮想関数に変換される可能性があり、関数修飾子 virtual は無効になります。
次の例を見てみましょう:
abstract class AbstractClass { public abstract void Method( ) ; } sealed class SealedClass: AbstractClass { public override void Method( ) { //... } }
次のコードを書こうとすると
class OtherClass: SealedClass
{
}
C# はこのエラーを指摘し、SealedClass はシールされたクラスであり、それを使用できないことを示します。 SealedClass から試行されました 任意のクラスを派生させます。
Sealed メソッド:
C# は、メソッドが配置されているクラスの派生クラスでメソッドがオーバーロードされるのを防ぐために、Sealed メソッド (sealedmethod) の概念も提案しています。メソッドで sealed 修飾子を使用できます。その場合、そのメソッドをシールド メソッドと呼びます。
クラスのすべてのメンバーメソッドをシールドメソッドとして使用できるわけではありません。シールドメソッドとして使用するには、基本クラスの仮想メソッドをオーバーロードし、特定の実装メソッドを提供する必要があります。したがって、メソッド宣言では、sealed 修飾子は常に override 修飾子と一緒に使用されます。次のコード例を見てください:
using System ; class A { public virtual void F( ) { Console.WriteLine("A.F") ; } public virtual void G( ) { Console.WriteLine("A.G") ; } } class B: A { sealed override public void F( ) { Console.WriteLine("B.F") ; } override public void G( ) { Console.WriteLine("B.G") ; } } class C: B { override public void G( ) { Console.WriteLine("C.G") ; } }
クラス B は、基本クラス A の両方の仮想メソッドをオーバーロードします。メソッド F は、sealed 修飾子を使用し、sealed メソッドになります。 G メソッドはシールされたメソッドではないため、B の派生クラス C では、メソッド G はオーバーロードできますが、メソッド F はオーバーロードできません
以上がC#におけるsealedキーワードの役割を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。