是否可以禁用隐式ToString()调用?

avs*_*099 13 c#

我想知道是否有一种方法可以获得此代码的编译错误:

var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer);
Run Code Online (Sandbox Code Playgroud)

所以我将被迫写下这样的东西:

var customer = new SomeCustomerClass();
Console.WriteLine("Customer address:" + customer.FormatAddress());
Console.WriteLine("Customer accounts:" + customer.FormatAccounts());
Run Code Online (Sandbox Code Playgroud)

如果"ToString"是一个接口,我可以在我的类中使用显式接口实现.

谢谢.

Jar*_*Par 12

在编译时无法阻止此代码. Object.ToString是每个对象的公共契约的一部分,并且没有办法阻止它在编译时被调用.在这种特殊情况下,编译器将解析+to String.Concat(object, object),并且实现最终会调用Object.ToString.没有办法改变这一点.我认为你最顺畅的前进道路是覆盖ToString并让它进入FormatAddress

请不要ToString像其他人建议的那样改变抛出异常.大多数.Net都希望ToString存在并且不会抛出.更改它会对程序产生许多意外的负面影响(包括终止这些对象的调试体验)

  • @bas - 问题不是我想使用ToString()或我想使用默认行为.问题是开发人员忘了按"." 在长串联子句中的客户类之后 - 而不是打印客户信息,打印类型名称.除了仔细阅读所有业务逻辑并仔细阅读之外,没有办法检查这一点.希望能更好地解释我的问题. (3认同)

Dar*_*ung 9

您可以在客户类中覆盖ToString,如果需要,可以在其中调用FormatAddress方法.

public override string ToString()
{
    return FormatAddress();
}
Run Code Online (Sandbox Code Playgroud)