公共财产的类内部使用

时间:2009-02-18 07:02:35

标签: c#

假设我有一个暴露一个属性的类。在课堂上使用私人“持有人变量”进行内部使用是否被认为是一个很好的方法?或者我也应该将该属性用于内部使用。

要解释一下,我应该使用:

public class foo
{
    String _statusHolder;
    public String myStaus
    {
        get { return _statusHolder; }
        set{ _statusHolder = value; }
    }

    public void DisplayMyStatus()
    {
        Console.WriteLine(_statusHolder);
    }
}

或者:

public class foo
{
    String _statusHolder;
    public String myStaus
    {
        get { return _statusHolder; }
        set{ _statusHolder = value; }
    }

    public void DisplayMyStatus()
    {
        Console.WriteLine(myStaus);
    }
}

我可以看到它使用第二种方法更加一致和更具可读性。如果我稍后在set语句中做一些修改,那么它也会更有效。但是,出于某种原因,是否有任何性能问题或被认为是不良做法?


修改

似乎每个人都倾向于在内部使用该物业。我最初的想法是一样的,但作为一个新手程序员,你永远不会知道。 感谢大家的快速反馈!

4 个答案:

答案 0 :(得分:3)

性能问题应该是可以忽略不计的,因为JITer或编译器会很高兴地发现你的函数调用(属性的getter)没有做任何令人兴奋的事情,并且可以内联。

好处是可能放在getter中的业务逻辑的未来更改,然后您的类将自动利用,而不会重构太多。

当然,缺点是,您可能希望在某些情况下避免使用新的业务逻辑,因此需要根据a)逻辑发生变化的可能性来考虑,b)逻辑可能需要被规避了。

在内部使用该属性的另一个(潜在)优势是您可以轻松地移动到自动属性或从自动属性移动。

答案 1 :(得分:2)

我倾向于调用属性,因为一旦东西变得棘手,你可以在getter中放入锁定和业务逻辑

对于C#3.0,我会沿着这些方向进行处理(并且只在真正需要时才显式创建支持字段)

public class foo
{

    public String Status
    {
        get;
        set;
    }

    public void DisplayMyStatus()
    {
        Console.WriteLine(Status);
    }
}

答案 2 :(得分:2)

如果有,请使用该属性。无论从何处访问变量,属性都可能具有延迟初始化等副作用。

即使该属性现在没有副作用,其他开发人员也可以在以后添加它们,并且使用“原始”变量的位置可能容易出错,因为不会调用新代码。

最后,该属性使重构更容易,例如,当稍后的值不再存储在变量中但在属性访问器内计算或来自其他一些源变量时。

答案 3 :(得分:1)

用Java编程,我更喜欢使用getter方法,因为我可以在那里放置一个断点和/或在日志记录输出中看到它的变化。