如何防止更改属性的属性?

moh*_*mad 0 c#

我有一个名为Class1的类,在这个类中我有一个名为MyProperty的属性.在另一个类中,我声明了Class1属性,但我希望在这种情况下MyProperty是readonly.我怎样才能做到这一点?

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

public class Class2
{
     public Class1 Class1Property { get; }
}

public class Class3
{
    void Method()
    {
        Class2 obj = new Class2();
        obj.Class1Property.MyProperty = 2;//I want this be illegal (In this place only)
    }
}
Run Code Online (Sandbox Code Playgroud)

Car*_*ten 5

做一些进一步的抽象并创建一个接口Class1:

public interface IClass1
{
    int MyProperty { get; }
}
Run Code Online (Sandbox Code Playgroud)

然后Class1实现这个接口:

public class Class1 : IClass1
{
    public int MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Class2不应该暴露Class1实例,而是实例IClass1:

public class Class2
{
    public IClass1 Class1Property { get; }
}
Run Code Online (Sandbox Code Playgroud)

现在你得到了你想要的行为:

public class Class3
{
    void Method()
    {
        Class2 obj = new Class2();
        obj.Class1Property.MyProperty = 2; // Doesn't work.
    }
}
Run Code Online (Sandbox Code Playgroud)