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

xof*_*ofz 1 c# methods properties

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

编辑:

int CalculateSomething();

int Calculation { get; }
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*ntz 9

Microsoft提供了在属性和方法之间进行选择的指导.

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