“告诉,不要问”:非虚方法和吸气剂有什么区别?

时间:2010-01-18 19:21:29

标签: c# properties methods

如果不使用任何属性getter,我如何证明使用非void方法?这两个概念之间的区别是什么,吸气剂是邪恶的,但非空方法是可以接受的?

编辑:

int CalculateSomething();

int Calculation { get; }

我可以改变CalculateSomething的签名并将值传递给它,如果我想彻底放下我的想法。所以我的问题改为:getter和non-void方法之间的根本区别是参数可以传递给非void方法吗?

2 个答案:

答案 0 :(得分:9)

Microsoft已guidance for choosing between properties and methods

  • 如果成员代表该类型的逻辑属性,请考虑使用属性。
  • 如果属性的值存储在进程内存中,并且属性只提供对值的访问,请使用属性而不是方法。
  • 在以下情况下,请使用方法而不是属性。
    • 操作比字段集慢几个数量级。如果您甚至考虑提供异步版本的操作以避免阻塞线程,那么很可能操作太昂贵而无法成为属性。特别是,访问网络或文件系统的操作(初始化除了一次)应该很可能是方法,而不是属性。
    • 操作是转换,例如Object.ToString方法。
    • 每次调用操作时,操作都会返回不同的结果,即使参数没有改变也是如此。例如,NewGuid方法每次调用时都会返回不同的值。
    • 该操作具有显着且可观察到的副作用。请注意,填充内部缓存通常不会被视为可观察到的副作用。
    • 该操作返回内部状态的副本(这不包括堆栈上返回的值类型对象的副本)。
    • 操作返回一个数组。

答案 1 :(得分:3)

不是很大的区别,你不能将变量传递给吸气剂吗?

一个功能:

private int Getyear(datetime date) { }

财产:

private DateTime GetDate {
    get {return _date};
}

你不能用吸气剂属性吗?