问题
I have the nub of the code like this:
public class OuterClass
{
public static InnerClass GetInnerClass()
{
return new InnerClass() { MyProperty = 1 };
}
public class InnerClass
{
public int MyProperty { get; set; }
}
}
what is the solution to property named MyProperty
just be settable from the InnerClass
and the OuterClass
, and out of these scopes, MyProperty
just be readonly
回答1:
There is no protection level for that. internal
is the tightest you can use, which is limited to files in the same assembly. If you cannot make it a constructor parameter as has been proposed, you could use an interface:
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; }
}
}
回答2:
I'm afraid there is no access modifier which allows that. You can create IInnerClass
interface and make the property readonly within interface declaration:
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; }
}
}
来源:https://stackoverflow.com/questions/21439102/how-to-restrict-setting-a-property-of-innerclass-just-from-the-outer-class-in-c