c# - 什么时候使用方法而不是属性来定义类?

标签 c# properties methods class-design

an earlier question of mine 部分相关,我有一个系统,我必须在其中将复杂数据存储为字符串。我没有将这些字符串解析为各种单独的对象,而是创建了一个包含所有这些对象的类,它具有一些解析器逻辑,可以将所有属性编码为字符串,或解码字符串以获取这些对象。这一切都很好。这个问题不是关于解析器本身,而是关于我应该在哪里放置解析器的逻辑。将其作为属性还是方法更好?

在属性的情况下,比如 public string DataAsStringget 访问器将包含将所有数据编码为字符串的逻辑,而 set 访问器将解码输入值并设置类实例中的所有数据。看起来很方便,因为输入/输出确实是一个字符串。

在方法的情况下,一种方法是 Encode(),它返回编码后的字符串。然后,构造函数本身将包含解码字符串的逻辑并需要字符串参数,或者我编写一个单独调用的 Decode(string str) 方法。在任何一种情况下,它都会使用方法而不是属性。

那么,就代码的实际运行而言,这些路径之间是否存在功能差异?还是它们基本上是等同的,然后归结为个人喜好的选择或哪个看起来更好?在那种问题中……哪个看起来更干净?

最佳答案

没有功能上的区别;从行为的角度来看,属性只是一对 getset 方法。

但是,属性通常是轻量级的。如果您的属性的 getter 或 setter 正在执行大量计算,那么通常鼓励将它们移至方法。

这有明显的异常(exception)(即 ORM 领域中的延迟加载,其中 get 可以触发数据库调用)。

关于c# - 什么时候使用方法而不是属性来定义类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2675369/

相关文章:

c# - 本地数据库插入查询不执行任何操作

C# 如何调整来自另一个类的表单中的文本框属性?

C# 无法将方法转换为非委托(delegate)类型

c# - 使用 Visual Fox Pro OleDb

c# - 使用 IExcelDataReader 从 excel 中获取正确的文本显示

c# - 在异步方法中捕获异常后激活

javascript - 在 Javascript 中,如何转换字符串以便它可以用于调用属性?

Qt ENUMS - setProperty 隐式转换

python - 对象用作 "self"参数?

C++ 链接类定义中定义的方法