18

sealed次のの使用がコンパイルされない理由として誰か教えてください。一方、Javaに置き換えsealedfinalコンパイルすると、動作します。

private sealed int compInt = 100;
public bool check(int someInt)
{
    if (someInt > compInt)
    {
        return true;
    }
    return false;
}
4

3 に答える 3

66

これfinalは、Javaでは使用場所によってさまざまな意味がありますがsealed、C#ではクラスと継承された仮想メンバー(メソッド、プロパティ、イベント)にのみ適用されるためです。

Javaではfinal以下に適用できます。

  • クラス。これは、クラスを継承できないことを意味します。これはC#と同等ですsealed
  • メソッド。これは、派生クラスでメソッドをオーバーライドできないことを意味します。これはC#のデフォルトです。ただし、派生クラスでメソッドを宣言しない限り、これをさらに派生したクラスで再度宣言するvirtualことはできません。sealedそのため、C#のメンバーはJavaのメンバーsealedよりもはるかに少なくなっています。final
  • フィールド変数。つまり、初期化できるのは1回だけです。フィールドの場合、C#で同等のものはですreadonly
于 2012-04-16T08:12:55.673 に答える
6

Sealedinは参照型C#にのみ適用でき、継承ツリーに影響を与えます。

実際には、継承ツリーの最後の「リーフ」で​​あることが保証されているとマークされたタイプsealed、つまり、のように宣言されたタイプから派生することはできませんsealed

public sealed class Child : Base 
{
}

public class AnotherAgain : Child //THIS IS NOT ALLOWED
{
}

会員には適用できません。

于 2012-04-16T08:13:51.213 に答える
2

ジョーイの答えは少し間違っていますが、ティグランの答えは間違っていません。
まず、このページを調べることができます。C#でのJavaのファイナルに相当するものは何ですか?。 キーワードはに適用できますが
、変数やインターフェイスのメソッドには適用できません。のクラスは継承できません。メソッドを使用する場合は、社内で行う必要があります。すべてがであるため、継承できません。この画像を確認してください:sealedclassinstance methodpropertysealedsealedoverridestructsealedstruct封印された使用法

于 2014-05-30T06:54:54.263 に答える