什么是readonly财产的最佳方法

时间:2010-03-12 19:39:48

标签: c# properties

我正在使用模型UserRepository-> User

存储库用于保存和加载用户。

我希望能够在存储库中设置ID,但我不希望它被UI访问。

用户和存储库位于Core项目中,而UI位于Web中。

有没有办法做到这一点,比如属性的修饰符,还是应该将ID放在User构造函数中?

由于

2 个答案:

答案 0 :(得分:8)

您可以使用没有setter的属性和这样的私有变量:

private int _id; //Set locally
public int ID
{
  get { return _id; }
}
//in the class _id = 5;

或者使用具有私有设置器的自动属性,如下所示:

public int ID { get; private set; }
//in the class ID = 5; this won't work outside the class

在第二个/自动情况下,它实际上只是编译器执行第一个示例,只是在眼睛上更快更轻松。

答案 1 :(得分:-1)

我使用过这个模式(不熟悉C#,但这个想法应该有效):

class Foo
{
    protected int id;

    public int GetID()
    {
        return (ID);
    }
}

class MutableFoo : Foo
{
    public void SetID(int val)
    {
        id = val;
    }
}

然后UI只处理“Foo”类,它是只读的,而其他部分可以处理读/写的“MutableFoo”。您应该只能创建“MutableFoo”的实例,然后将它们传递给代码的其他部分,然后将其作为“Foo”接收,这个UI代码将具有对对象的只读访问权限,而其他部分可以读取 - 写访问。

我可能也会把“Foo”抽象化(我想不出我没有的情况)。