String属性GET返回什么?

时间:2013-05-01 18:54:55

标签: c# string theory

在C#中

假设我有以下内容:

public String whatHappens{ get; set; }

假设已初始化并设置了该属性。

然后在这里我打电话

Console.WriteLine(whatHappens);

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

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

1 个答案:

答案 0 :(得分:7)

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

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

Console.WriteLine有很多重载。其中一个重载接受string类型的参数。因此,在Console.WriteLine内,无需调用ToString(),因为该参数已经是该类型。

简而言之:任何地方都不会调用ToString()

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

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