如果两者都可以,我们应该在哪些情况下使用每种方式?
public override string ToString()
{
return String.Format("{0},{1}", this.field1, this.field2);
// ..or
return String.Format("{0},{1}", this.Property1, this.Property2);
}
请帮忙???
答案 0 :(得分:2)
要么可以接受。
然而,有一点需要考虑的是,属性更普遍被接受为“面向公众”,而字段通常被大多数C#开发人员视为“私有”。
因此,如果您希望能够对未直接修改的内部值调用.ToString()
,请使用字段(并将其保密)。如果你可以在外部修改它们并且通过.ToString()
返回那些外部修改的值,那就使用属性。
最后,如果在返回属性值之前需要对属性值执行任何其他“逻辑”,则属性将更可取,因为您可以在属性的getter
中修改它。
答案 1 :(得分:1)
显然,当你想要返回一个你特意准备的字符串时,你应该重写ToString方法。这不是一个要求。
答案 2 :(得分:0)
通常,属性代表字段,例如
// Property1 represent field1
public String Property1 {
get {
if (null == field1)
return "[empty]"; // <- more readable
return field1;
}
}
以及为什么属性通常更易于阅读,因此,恕我直言,更可取;但是,字段也是一个不错的选择(特别是如果没有包含该字段的属性)。
// Terse C# 6.0 syntax
public override string ToString() {
return $"{Property1},{Property2}";
}
答案 3 :(得分:0)
如果getter包含某些逻辑,例如它使用字段值来计算结果,然后使用属性。作为班级的用户,如果我使用ToString(),我会惊讶地看到UI中的不同值(如果我直接使用属性)和堆栈跟踪中。
已编辑:默认情况下,类不应提供公共或受保护的实例字段。因此,我建议您在适当的情况下避免使用ToString()中的字段,因为您可能会暴露一些敏感数据或不正确的对象状态。