与 an earlier question of mine 部分相关,我有一个系统,我必须在其中将复杂数据存储为字符串。我没有将这些字符串解析为各种单独的对象,而是创建了一个包含所有这些对象的类,它具有一些解析器逻辑,可以将所有属性编码为字符串,或解码字符串以获取这些对象。这一切都很好。这个问题不是关于解析器本身,而是关于我应该在哪里放置解析器的逻辑。将其作为属性还是方法更好?
在属性的情况下,比如 public string DataAsString
,get
访问器将包含将所有数据编码为字符串的逻辑,而 set
访问器将解码输入值并设置类实例中的所有数据。看起来很方便,因为输入/输出确实是一个字符串。
在方法的情况下,一种方法是 Encode()
,它返回编码后的字符串。然后,构造函数本身将包含解码字符串的逻辑并需要字符串参数,或者我编写一个单独调用的 Decode(string str)
方法。在任何一种情况下,它都会使用方法而不是属性。
那么,就代码的实际运行而言,这些路径之间是否存在功能差异?还是它们基本上是等同的,然后归结为个人喜好的选择或哪个看起来更好?在那种问题中……哪个看起来更干净?
最佳答案
没有功能上的区别;从行为的角度来看,属性只是一对 get
和 set
方法。
但是,属性通常是轻量级的。如果您的属性的 getter 或 setter 正在执行大量计算,那么通常鼓励将它们移至方法。
这有明显的异常(exception)(即 ORM 领域中的延迟加载,其中 get
可以触发数据库调用)。
关于c# - 什么时候使用方法而不是属性来定义类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2675369/