C# 类公共属性的内部用法

C# 类公共属性的内部用法,c#,C#,假设我有一个公开一个属性的类。在类内部使用私有“holder变量”是否被认为是一种好方法?或者我应该将该属性也用于内部使用 为了解释,我应该使用: public class foo { String _statusHolder; public String myStaus { get { return _statusHolder; } set{ _statusHolder = value; } } public void

假设我有一个公开一个属性的类。在类内部使用私有“holder变量”是否被认为是一种好方法?或者我应该将该属性也用于内部使用

为了解释,我应该使用:

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

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

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


编辑:

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

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

对于C#3.0,我将遵循这些原则(并且只有在真正需要时才显式地创建支持字段)


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

这样做的好处是将来对业务逻辑的更改可能会放在getter中,然后您的类将自动利用它,而无需进行太多重构

当然,缺点是,在某些情况下,您可能希望避免使用新的业务逻辑,因此需要根据a)逻辑更改的可能性和b)可能需要规避的逻辑来考虑这一点


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

如果有自动属性,请使用该属性。属性可能会有一些副作用,如延迟初始化,无论从何处访问该变量,都会产生这些副作用

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


最后,属性使重构更容易,例如,当以后的值不再存储在变量中,而是在属性访问器中计算,或者来自其他源变量时。

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

注意,在本例中,可以显式地将setter设置为private。因此变量只能由这种类型的成员写入。性能问题可以忽略不计。如果您分析代码,您会发现它在频繁访问的属性上浪费了1-5%的CPU。这个问题很微妙,因为JIT编译器只会在程序没有附带调试器的情况下启动时优化代码(内联)。如果探查器插入属性getter,以便告诉您在它们上花费了多少CPU时间,那么这将影响它们是内联的还是以其他方式优化的。这是一件很难衡量的事情。+1表示内部代码可能不希望访问与属性关联的业务逻辑。我真的希望C#为与自动属性相关联的支持字段提供了可用的名称,这样,预期将绕过未来属性处理程序中可能包含的逻辑的代码就可以直接使用支持字段(例如,设置多个属性的方法在许多情况下应验证所有参数,然后设置所有支持字段,然后执行所有更新通知)。
public class foo
{
    String _statusHolder;
    public String myStaus
    {
        get { return _statusHolder; }
        set{ _statusHolder = value; }
    }

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

    public String Status
    {
        get;
        set;
    }

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