14

このコードのコンパイルエラーを取得する方法があるかどうか疑問に思っています:

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」がインターフェースである場合、クラスで明示的なインターフェース実装を使用してそれを行うことができます。

ありがとう。

4

3 に答える 3

13

コンパイル時にこのコードを防止する方法はありません。 Object.ToStringすべてのオブジェクトのパブリック コントラクトの一部であり、コンパイル時に呼び出されないようにする方法はありません。この特定のケースでは、コンパイラは to を解決し+String.Concat(object, object)実装は最終的に を呼び出しObject.ToStringます。これを変更する方法はありません。あなたの最もスムーズな道は、オーバーライドToStringして呼び出すことだと思いますFormatAddress

ToStringいくつかの他の人が示唆しているように、例外をスローするように変更しないでください。ToString.Net の大部分は、それが存在し、スローされないことを期待しています。変更すると、プログラムに多くの予期しないマイナスの副作用が生じます (これらのオブジェクトのデバッグ エクスペリエンスを強制終了するなど)。

于 2013-03-11T18:11:06.747 に答える
9

顧客クラスで ToString をオーバーライドでき、その中で必要に応じて FormatAddress メソッドを呼び出すことができます。

public override string ToString()
{
    return FormatAddress();
}
于 2013-03-11T18:11:06.383 に答える