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