看看Eric Lippert关于什么时候应该使用C#的属性的建议When should I write a property?。(来源于http://fresky.github.io/2015/04/02/when-use-property-in-csharp/)
- 逻辑上是一个类的属性。
- 属性应该比较稳定,不应该自己变化。 作者指出
DateTime.Now
违反了这两条。 - 属性读和写所花的时间应该和成员变量的读和写差不多,不能超过10倍。
- 一个常用的属性的模式是用来缓存一个花费时间较多,可以延迟计算的值。但是要小心,特别是需要做到线程安全时更要小心。想想单例模式怎么做到多线程安全吧。
- 属性的读操作不应该改变对象的状态。(除非是上面那条)
- 属性的读操作应该永远成功,不能抛异常。
- 当用调试器调试程序时,如果用调试器看一个对象的状态,默认会调用这个属性的读操作,所以如果读操作会改变对象状态的话,说明调试程序会改变程序状态!
- 不要让属性的读操作返回一个数组或者list。
- 属性的读操作不要返回一个可变的值类型。因为值类型会拷贝一份,你其实没有改变原来的值。