String属性GET返回什么?

Ant*_*ell 2 c# theory string

在C#中

假设我有以下内容:

public String whatHappens{ get; set; }
Run Code Online (Sandbox Code Playgroud)

假设已初始化并设置属性.

然后我在这里打电话

Console.WriteLine(whatHappens);
Run Code Online (Sandbox Code Playgroud)

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

这不是一个学校的问题,这是我的同事和我所拥有的论点.

Mar*_*der 7

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

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

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

简而言之:任何ToString()地方都不会被召唤.

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

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