次のsealed
の使用がコンパイルされない理由として、誰か教えてください。一方、sealed
をfinal
に置き換えて、Javaとしてコンパイルすると、機能します。
private sealed int compInt = 100;
public bool check(int someInt)
{
if (someInt > compInt)
{
return true;
}
return false;
}
これは、Javaのfinal
は、使用する場所に応じてさまざまな意味を持ちますが、C#のsealed
はのみ適用されるためです。 クラスおよび潜在的に仮想メンバー(メソッド、プロパティ、イベント)。
In Java final
は以下に適用できます:
sealed
と同等です。virtual
として宣言しない限り、C#のデフォルトであり、派生クラスでは、sealed
を使用してさらに派生クラスでこれを防ぐことができます。readonly
です。Sealed
in C#
は参照型にのみ適用でき、継承ツリーに影響を与えます。
実際には、sealed
としてマークされた型は、継承ツリーの最後の「葉」であることが保証されています。つまり、sealed
のように宣言された型から派生することはできません。
public sealed class Child : Base
{
}
public class AnotherAgain : Child //THIS IS NOT ALLOWED
{
}
会員には適用できません。
ジョーイの答えは少し間違っていますが、ティグランの答えは間違っていません。
最初に、このページを調べることができます: C#でのJavaのファイナルに相当するものは何ですか? 。sealed
キーワードはclass
、instance method
およびproperty
に適用できますが、変数やインターフェースのメソッドには適用できません。 sealed
のクラスは継承できません。 sealed
がメソッドを使用する場合、それは会社のoverride
によるものでなければなりません。すべてのstruct
はsealed
であるため、struct
を継承することはできません。この画像を確認してください: