这个问题已经在这里有了答案:




11年前关闭。






在方法中,您也可以在属性中输入一些代码。例如,我有一个属性Name。当类名更改时,我想从数据库中获取一些数据并更改对象的状态。我可以添加此代码来设置属性的一部分。其他解决方案是将设置部分更改为私有(private),然后添加名为SetName的方法,并在此方法中添加我的代码。

那么区别是什么呢?什么时候不适合在getter/setter上放置一些代码,什么时候创建用于更改我的属性和类的其他部分的方法呢?

最佳答案

这是一组很好的指南,用于何时使用Bill Wagner中的属性与方法(固定链接)

  • 当所有这些都成立时,使用属性:
    setter/getter 应该很简单,因此不太可能引发异常。请注意,这意味着没有网络(或数据库)访问权限。两者都可能失败,因此将引发异常。
  • 它们不应相互依赖。请注意,这将包括设置一个属性并使其影响另一个属性。 (例如,设置FirstName属性会影响组成名和姓氏属性的只读FullName属性,这意味着要具有这种依赖关系)
  • 应该以任何顺序设置它们
  • setter/getter 没有明显的副作用。请注意,该准则并不排除某些形式的惰性求值。
  • 该方法必须始终立即返回。 (请注意,这排除了进行数据库访问调用,Web服务调用或其他类似操作的属性)。
  • 如果成员返回数组,请使用一种方法。
  • 重复调用getter(无插入代码)应返回相同的值。
  • 重复调用setter(具有相同的值)应该与单个调用没有区别。
  • get不应返回对内部数据结构的引用(请参见第23条)。方法可以返回深拷贝,并且可以避免此问题。
  • 关于c# - C#中的方法与属性-有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1294152/

    10-13 07:16
    查看更多