-1

私はこのようなコードのこぶを持っています:

public class OuterClass
{
    public static InnerClass GetInnerClass()
    {
        return new InnerClass() { MyProperty = 1 };
    }

    public class InnerClass
    {
        public int MyProperty { get; set; }
    }
}

MyPropertyとから設定可能でInnerClassありOuterClass、これらのスコープ外ではMyProperty読み取り専用であるという名前のプロパティの解決策は何ですか

4

2 に答える 2

3

そのための保護レベルはありません。internalは、同じアセンブリ内のファイルに制限されている、使用できる最もタイトなものです。提案されているようにコンストラクターパラメーターにすることができない場合は、インターフェイスを使用できます。

public class OuterClass
{
    public static InnerClass GetInnerClass()
    {
        return new InnerClassImpl() { MyProperty = 1 };
    }

    public interface InnerClass
    {
        int MyProperty { get; }
    }
    private class InnerClassImpl : InnerClass
    {
        public int MyProperty { get; set; }
    }
}
于 2014-01-29T18:15:05.703 に答える
2

残念ながら、それを許可するアクセス修飾子はありません。IInnerClassインターフェイス宣言内でインターフェイスを作成し、プロパティを読み取り専用にすることができます。

public class OuterClass
{
    public static IInnerClass GetInnerClass()
    {
        return new InnerClass() { MyProperty = 1 };
    }

    public interface IInnerClass
    {
        int MyProperty { get; }
    }

    private class InnerClass : IInnerClass
    {
        public int MyProperty { get; set; }
    }
}
于 2014-01-29T18:19:53.530 に答える