2

在 C# 中

假设我有以下内容:

public String whatHappens{ get; set; }

假设属性已被初始化和设置。

然后我在这里打电话

Console.WriteLine(whatHappens);

GET 调用是否返回一个字符串对象并且 Console.WriteLine 调用 ToString() 或者 GET 调用是否依次调用字符串类中的 ToString() 方法并返回一个字符串。

这不是学校问题,而是我和我的同事正在争论的问题。

4

1 回答 1

7

在您的示例中,您使用自动属性。自动属性有一个额外的隐藏字段,即支持字段。此字段与属性的类型相同,在您的情况下为字符串。

在此属性内,代码不会调用ToString(),因为支持字段已经是 type string

Console.WriteLine有很多重载。其中一个重载接受类型为 的参数string。所以里面Console.WriteLine不需要调用ToString(),因为参数已经是那个类型了。

简而言之:NoToString()将在任何地方被调用。

另一方面,如果该属性不是自动属性并且其后面的字段(或多个字段)属于另一种类型,则需要将它们转换为字符串,使用ToString().

另一方面,如果Console.WriteLine调用了另一个重载 of ,其中参数的类型为object,则必须在某个时候WriteLine调用。ToString()

于 2013-05-01T19:01:45.917 回答