1

次のようなカスタム クラス構造があります。

public interface Stuff { }
public Thing : Stuff 
{ 
  public new String ToString() { return "That's the thing!"; } 
}

次に、コードの他の部分に、Stringオブジェクトをパラメーターとして受け取るメソッドがあります。最初の行はコンパイルされますが、2 番目の行はコンパイルされません。オブジェクトを送信するときにToStringがデフォルトで呼び出されると思いました。また、 Objectクラスから継承されるStuffには、 ToStringが既に実装されている必要があります (また、私の場合は実装によってシャドウされます)。

Thing thing = new Thing();
MustHaveString(thing.ToString());
MustHaveString(thing);

何が恋しいですか?

4

2 に答える 2

5

MustHaveString次のようなものと仮定します。

public void MustHaveString(string arg)

次に、 への暗黙的な変換がない限り、単純に言うとthingコンパイル エラーが発生します。暗黙の変換がなければ、 を行う必要があります。ただし、コードが次のような場合:thingstringthing.ToString()

string myString = "This is a thing: " + thing;

その後、ToString暗黙的に呼び出されるため、オプションです。

ほとんどの場合、メソッドを明示的に呼び出してToString、コードを読んでいる人に何が起こっているのかを明確にすることをお勧めします。

ToString()編集:この回答が受け入れられたので、メソッドをoverrideではなく にする必要があることにも言及する必要があると思いましたnew。これにより、上記で説明した通常の動作が期待されます。

于 2013-07-01T15:03:00.500 に答える