2010-12-12 24 views
2

インスタンスのクラス 以内プロパティの型としてIEnumerable<T>を使用しても大丈夫ではないのはなぜ申し訳ありませんが、問題はそれがコンパイルされなかったことはなかったIEnumerableを<T>質問

public class Example 
{ 
    public IEnumerable<Int32> Ids {get; private set;} 
    publicIEnumerable<string> Names {get; private set;} 
} 

のようなもの、私は逃しましたここに物事を書く上で公共のアクセサリー、質問はなぜプロパティのIEnumerableを使用しないようにされました。しかし、私がさらに読むと、IEnumerableを使用してこれを修正しないで(追加、削除する)何かが必要であれば、それは完全に受け入れられることに気付きました。

+5

それはだと述べましたよくない? –

+0

スタイルコップがそれについて不平を言うと思います。私もあまりにもわかりません – devrooms

+4

なぜ「このコンパイルではないのですか」という質問がある場合は、少なくともコンパイラエラーを含めることができます。 –

答えて

13

問題は、クラスのメンバのデフォルトのアクセスは、すでに民間であるので、あなたのコードと等価であるということです:あなたはゲッターやセッターのための余分なアクセス修飾子が含まれている場合ので、コンパイルに失敗し

public class Example 
{ 
    private IEnumerable<int> Ids {get; private set;} 
    private IEnumerable<string> Names {get; private set;} 
} 

それは、プロパティの全体的なアクセスよりも制限的でなければなりません。この場合ではありません。

あなたがが、全体的なプロパティを公開する場合、それは問題なくコンパイルされます:

public class Example 
{ 
    public IEnumerable<int> Ids {get; private set;} 
    public IEnumerable<string> Names {get; private set;} 
} 

(。それはもちろん、あなたがSystem.Collections.Generic名前空間のusingディレクティブを持っていると仮定しています)

関連する問題