クラス(VB.NET)ToStringにメソッドが存在するのはなぜですか?String
String.ToString()
のように使用するとオーバーヘッドになりますか
TextBox.Text.ToString()
クラス(VB.NET)ToStringにメソッドが存在するのはなぜですか?String
String.ToString()
のように使用するとオーバーヘッドになりますか
TextBox.Text.ToString()
ToStringメソッドは継承元Objectで見つかります。Stringの実装はObject.ToString、型名を出力することです。
public virtual string ToString() {
return this.GetType().ToString();
}
型 Stringはこのメソッドをオーバーライドして、それ自体を返します。
public override string ToString() {
return this;
}
コードTextBox.Text.ToString()には不要な への呼び出しがありますが、その呼び出しToStringによるパフォーマンスへの顕著な影響はほとんどありません。
すべてのオブジェクトには がToString()あるため、どのオブジェクトでも次のようになります。
obj.ToString()タイプを知らなくても呼び出すことができますobj
obj.ToString()メソッドが存在しないことを気にせずに呼び出すことができます(一般的なログ記録コードは、これを行う場所の一般的な例です)。
文字列の呼び出しのオーバーヘッドはToString()、1 行の関数の呼び出しにすぎないため、無視できることはほぼ確実です。
ToString()から派生したすべてのクラスに存在しSystem.Objectます。はい、それも含まSystem.Stringれます。
そこはおそらく少し余分であり、ドキュメントにはまったく同じインスタンスが返されると記載されています。したがって、メソッド呼び出しを除いて、パフォーマンスのオーバーヘッドはありません。
System.Stringクラスは、他のクラスと同様にクラスから派生しているため、次のようSystem.Objectなさまざまなメソッドから自動的に継承されます。
public virtual bool Equals(Object obj)
public virtual int GetHashCode()
public virtual string ToString()
したがって、比較したり、テーブルにオブジェクトを入力したり、オブジェクトを人間にわかりやすい文字列に変換したりできます。
すべてがオブジェクトです (または、オブジェクトとしてボックス化できます)。objectメソッドを定義します。つまりToString、文字列はオブジェクトであるため、ToString メソッドがあります。