2011-01-07 9 views
1

私は愚かに見えるかもしれない質問があります。 ToStrin()、GetHashCode()、GetType()などのメソッドを基本オブジェクト型に定義する背後には、何らかの理由がありますか。これらのメソッドは、内部的に.Netフレームワークによってあらゆる目的で使用されますか?このデザインの背後にあった考えを知りたいだけなのです。ToString()、GetHashCode()、GetTypeなどのメソッドを持つオブジェクト型の背後にある理由は何ですか

おかげで、 sveerap

+1

を生成することが可能になりますか? –

+0

@Anonインターフェイスでは?関連のある質問:http://stackoverflow.com/questions/1561617/edited-why-does-object-tostring-exist –

答えて

5

これらのメソッドは、すべてのオブジェクトが必要とする最小限のものとみなされていました。それらをSystem.Objectクラスに導入することにより、.NET内のすべてのオブジェクトで使用できます。

それぞれが目的を果たす:

  • EqualsReferenceEquals
  • GetHashCodeを確認平等に使用されるオブジェクトはハッシュコレクションに
  • GetTypeを使用することを可能にするが
  • ToString可能に動作するように反射するために必要とされます型に関係なくすべてのオブジェクトが文字列形式で表現され、非常に便利です
  • Finalizeリソースは、ガベージコレクタ
  • MemberwiseCloneによって適切に処理することを可能にするオブジェクトの浅いコピーはあなたがそれらを他を置く
+0

応答に感謝し、それは基本的な方法と理由のほとんどをカバーします。BrennanとPandaWoodの文字列には、より詳細な説明があります – sveerap

0
  • メソッドGetType()は、メイン.NET言語はダックタイピングを持たない
+0

応答に感謝します。みんなが役に立つ意見を共有しているので、私が複数の回答に投票することができれば、良いことになりました。 – sveerap

+0

GetHashCode()はオブジェクトの比較には使用されませんが、等しいオブジェクトには等しいハッシュコードが割り当てられます。 –

0

オブジェクト比較のために使用される()反射に

  • GetHashCodeメソッドが使用されていますしたがって、たとえ2つの異なるクラスT1とT2が "ToString"と呼ばれるメソッドを持っていても、T1またはT2タイプのオブジェクトに作用するコードを書くことはできません。そのため、多型コードでよく使用されるメソッドがObjectで宣言されているのはこのためです。そして、あなたが言ったメソッドがほぼすべてのクラスにとって意味をなさないので、これは本当に害を及ぼすことはできません。

    編集:実際には、C#は最新のインカネーションでダックタイピングをサポートしています。しかし、これは反射のオーバーヘッドを招き、ToStringと企業は、誰もがC#のダックタイピングに優しいと思っていたずっと前から定義されていました。

  • +0

    C#4.0では、動的キーワードを使用したダックタイピングをサポートしています。つまり:private void test(動的テスト) { \t test.someMethod(); \t } – Rob

    +0

    右。そのことを考えていなかった - 私は3.0以下を使用しただけです。住所への回答を編集する。 –

    +0

    応答していただきありがとうございます。みんなが役に立つ意見を共有しているので、私が複数の回答に投票することができれば、良いことになりました。 – sveerap

    関連する問題