2012-04-16 4 views
10

sealedの次の使用方法がコンパイルされない理由を教えてもらえますか?一方、sealedfinalに置き換えてJavaとしてコンパイルすると、動作します。 JavaでfinalはあなたがC#でsealedのに対し、それを使用する場所に応じて異なるものの多くを意味するので、だC#とJava finalの結びつき

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

http://stackoverflow.com/questions/2069010/is-there-any-functional-difference-between-c-sharp-sealed-and-javas-final-keywo –

+0

相当:この画像をチェックしてくださいC#のメンバの 'final'は' readonly'です。 –

答えて

45

は、クラスと潜在的に仮想メンバー(メソッド、プロパティ、イベント)にのみを適用します。クラスは継承できないことを意味し

  • クラス、:Javaのfinal

    はに適用することができます。これはC#のsealedと同等です。

  • のメソッドです。つまり、メソッドを派生クラスでオーバーライドすることはできません。これは、メソッドをvirtualと宣言し、派生クラスではsealedの派生クラスではこれを防ぐことができない限り、C#のデフォルトです。
  • フィールドおよび変数です。つまり、これらは1回しか初期化できません。フィールドの場合、C#の等価物はreadonlyです。 C#
+1

"C#で封印されたクラスはクラスにのみ適用されます" - それは真実ではなく、C#のメソッドにも適用できます。 – Maxim

2

Sealedのみ参照型に適用され、継承ツリーに影響を与えることができます。

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

public sealed class Child : Base 
{ 
} 

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

メンバーには適用できません。

2

ジョーイが少し間違っている間、ティグランの答えは間違っていません。
まず、このページをご覧ください:What is the equivalent of Java's final in C#?
sealedキーワードはclass,instance methodpropertyに適用できますが、変数やインターフェイスのメソッドには適用できません。 sealedのクラスは継承できません。 sealedの場合は会社内でoverrideである必要があります。 structはすべてsealedなので、structは継承できません。 sealed usage

関連する問題