在 C# 中
假设我有以下内容:
public String whatHappens{ get; set; }
假设属性已被初始化和设置。
然后我在这里打电话
Console.WriteLine(whatHappens);
GET 调用是否返回一个字符串对象并且 Console.WriteLine 调用 ToString() 或者 GET 调用是否依次调用字符串类中的 ToString() 方法并返回一个字符串。
这不是学校问题,而是我和我的同事正在争论的问题。
在您的示例中,您使用自动属性。自动属性有一个额外的隐藏字段,即支持字段。此字段与属性的类型相同,在您的情况下为字符串。
在此属性内,代码不会调用ToString()
,因为支持字段已经是 type string
。
Console.WriteLine
有很多重载。其中一个重载接受类型为 的参数string
。所以里面Console.WriteLine
不需要调用ToString()
,因为参数已经是那个类型了。
简而言之:NoToString()
将在任何地方被调用。
另一方面,如果该属性不是自动属性并且其后面的字段(或多个字段)属于另一种类型,则需要将它们转换为字符串,使用ToString()
.
另一方面,如果Console.WriteLine
调用了另一个重载 of ,其中参数的类型为object
,则必须在某个时候WriteLine
调用。ToString()