我想知道是否有办法为此代码获取编译错误:
var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer);
所以我将被迫写下这样的东西:
var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer.FormatAddress());
Console.WriteLine("Customer accounts:" + customer.FormatAccounts());
如果“ToString”是一个接口,我可以使用我班级中的显式接口实现来做到这一点。
感谢。
答案 0 :(得分:12)
在编译时无法阻止此代码。 Object.ToString
是每个对象的公共契约的一部分,并且没有办法阻止它在编译时被调用。在这种特殊情况下,编译器会将+
解析为String.Concat(object, object)
,并且实现最终会调用Object.ToString
。没有办法改变这一点。我认为您最顺畅的前进道路是覆盖ToString
,并将其调入FormatAddress
请不要像其他一些人所暗示的那样更改ToString
以引发异常。大多数.Net期望ToString
存在并且不会抛出。更改它会对程序产生许多意外的负面影响(包括终止这些对象的调试体验)
答案 1 :(得分:9)
您可以在客户类中覆盖ToString,如果需要,可以在那里调用FormatAddress方法。
public override string ToString()
{
return FormatAddress();
}
答案 2 :(得分:0)