2016-09-26 4 views
0

私はこのようなChildClassをインスタンス化することはできません入れ子になった静的クラスをJavaではインスタンス化できますが、C#ではインスタンス化できないのはなぜですか?静的な定義は異なっていますか?

public class ParentClass{ 
    private parentClass(){} 
    public class ChildClass { 
     public ChildClass(){} 
    } 
} 

、次のJavaコードを仮定します

new ParentClass.ChildClass(); 

それはせずにC#で行うことができるのに対し、これは、JavaでChildClassstaticを行うことによってのみ可能です静的にします。

私の質問は、ネストされたクラスが静的である場合、なぜそれがJavaでインスタンス化され、なぜ同じものがC#で可能でないのかです。静的な定義は2つの言語で異なっていますか?

私はthis stack postを見ましたが、私の質問には答えません。

+2

C#とJavaで 'static'修飾子を使用すると、型に意味が異なるだけです。これは*プラットフォーム*の違いより*言語*の違いです。 (たとえば、Javaのアプローチを実装する別の.NETベースの言語が存在する可能性があります)。 –

答えて

1

私には単純な構文上の違いがあります。

Javaのアプローチは非常に明確です。ParentClassの静的コンテンツにはParentClass.ChildClassでアクセスし、new-new ParentClass.ChildClass();でインスタンス化しています。つまり、内部クラスはstaticとして定義する必要がありますが、コンストラクタには通常のアクセス権があります。

これまでに説明したC#の違いについてはわかりませんでした。私はC#をあまり使用しないので、このアプローチを本当に支持することはできません。

0

@Jon Skeetがコメントしたように、この問題は構文の違いであることがわかりました。

違いは、ネストされたクラス(上記の例ではChildClass)の修飾子はJavaの静的メンバーを表し、インスタンス化できない一般的な静的クラスと同じ意味を持ちません。

したがって、Javaの静的修飾子は、必ずしもそれが変更するクラスのインスタンス化を妨げません。入れ子にされた静的クラスでは、インスタンス化が可能です。 しかし、C#では、静的クラスのインスタンス化は、ネストされているかどうかにかかわらず、常に上記のあいまいさを排除するために許可されていません。

私が正しいかどうかを他の人からより多くのフィードバックを得るまで、私はこの回答を受け入れません。

関連する問題