在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()方法并返回一个字符串.
这不是一个学校的问题,这是我的同事和我所拥有的论点.
在您的示例中,您使用自动属性.自动属性具有额外的隐藏字段,即备用字段.此字段与属性的类型相同,在您的情况下为字符串.
在此属性内部,代码将不会调用,ToString()因为支持字段已经是类型string.
Console.WriteLine有很多重载.其中一个重载接受类型的参数string.所以里面Console.WriteLine没有必要调用ToString(),因为参数已经是那种类型.
简而言之:任何ToString()地方都不会被召唤.
另一方面,如果属性不是自动属性,并且其后面的字段(或字段)是另一种类型,则需要使用它们将它们转换为字符串ToString().
另一方面,如果Console.WriteLine调用另一个重载,其中参数是类型的object,WriteLine则必须ToString()在某个时刻调用.