2009-02-18 76 views
2

假设我有一个暴露一个财产的类。在班级内部使用私人“持有人变量”是否被认为是一个很好的方法?或者我也应该使用该财产供内部使用。公共财产的类内部使用

要解释,我应该使用:

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); 
    } 
} 

,我可以把它看作是beeing更加一致和更具可读性使用第二种方法。如果我稍后在声明中做一些修改,它也会更加有效。但是有没有任何性能问题,或者出于某种原因被认为是不好的做法?


编辑:

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

回答

2

我倾向于去调用属性将导致一次的东西变得复杂的时候,你可以把在吸气

锁定和业务逻辑对于C#3.0我的东西去沿着这些路线(只有明确创建的支持领域的真正需要时)

public class foo 
{ 

    public String Status 
    { 
     get; 
     set; 
    } 

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

请注意,在这个例子中,可以明确地将setter设置为private。所以变量只能由这种类型的成员写入。 – 2009-02-18 07:29:53

3

性能问题应该是可以忽略不计,因为JITer或编译器将愉快地工作了,你的函数调用(该属性的getter)不会做任何令人兴奋的,可内联。

的好处是业务逻辑,未来的变化可能被放置在getter方法,你的类将自动乘虚而入,不重构太多。

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

内部使用的属性的其他(电势)的优点是可以容易地移动到或从自动属性。

+0

性能问题可以忽略不计。如果你分析你的代码,你会发现它在频繁访问的属性上浪费1-5%的CPU。这个问题很微妙,因为JIT编译器只会在程序未连接调试器时启动时优化代码(内联)。 – 2009-02-18 07:35:16

2

如果有一个使用属性。无论您访问变量的位置如何,属性都可能具有懒惰初始化等副作用。

即使属性现在有没有副作用,其他开发人员可以以后再添加它们,并在使用“原始”变量地方可能出错,因为新的代码不被调用。

最后,该性质使得重构变得容易,例如,当该值以后不再存储在一个变量中,但属性访问内部计算或来自其他来源的变量。

1

编程在Java中,我更喜欢使用getter方法,因为我可以把一个断点和/或查看日志输出更改。

相关问题