System.Objectは、javaのjava.lang.Objectと同じく
全ての型の基底クラスです。用意されているメソッドも
ほぼjavaのそれと同じものです。なので、javaの人から
すると分かりやすいですね。
全ての型の基底クラスなだけあって、どのクラスにも
共通する振る舞いが定義されています。
大事なメソッドは、以下の3つ。
- Equals
- GetHashCode
- ToString
Equalsは、そのオブジェクトと他方のオブジェクトが同値であるかどうかに
使用するもの、GetHashCodeはそのオブジェクトのハッシュ値を返すもの、ToStringメソッドは
そのオブジェクトの文字列表現を返すものです。
自分で型を作成した場合、上記3つを必ずオーバーライドする
必要はないですが、ToString()はオーバーライドしておいた
方がデバッグの際にも楽です。
以下サンプルです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; namespace Gsf.Research.ClassLibrary.System{ /// <summary> /// System.Objectについてのサンプルクラスです. /// </summary> /// <remarks> /// System.Objectは、Javaの場合と同じく全てのオブジェクトの /// 基底クラスです。どのクラスも例外なくSystem.Objectのサブクラスと /// なります。 /// </remarks> public class ObjectResearch00 : IExecutable{ /// <summary>サンプル用のフィールド</summary> int _id; /// <summary>サンプル用のフィールド</summary> string _name; /// <summary> /// サンプル用のプロパティです。 /// </summary> public int Id{ get{ return _id; } set{ _id = value; } } /// <summary> /// サンプル用のプロパティです。 /// </summary> public string Name{ get{ return _name; } set{ _name = value; } } /// <summary> /// 処理を実行します。 /// </summary> public void Execute(){ ObjectResearch00 obj1 = new ObjectResearch00(); ObjectResearch00 obj2 = new ObjectResearch00(); ObjectResearch00 obj3 = new ObjectResearch00(); obj1.Id = 1; obj1.Name = "gsf_zero1"; obj2.Id = 2; obj2.Name = "gsf_zero2"; obj3.Id = 3; obj3.Name = "gsf_zero1"; // // Equalsによる同値確認. // Console.WriteLine("obj1とobj1をEquals : " + obj1.Equals(obj1)); Console.WriteLine("obj1とobj2をEquals : " + obj1.Equals(obj2)); Console.WriteLine("obj1とobj3をEquals : " + obj1.Equals(obj3)); // // GetHashCodeの出力. // Console.WriteLine("obj1のGetHashCode : " + obj1.GetHashCode()); Console.WriteLine("obj2のGetHashCode : " + obj2.GetHashCode()); Console.WriteLine("obj3のGetHashCode : " + obj3.GetHashCode()); // // ToStringの出力. // Console.WriteLine("obj1のToString : " + obj1); Console.WriteLine("obj2のToString : " + obj2); Console.WriteLine("obj3のToString : " + obj3); } /// <summary> /// System.Object#Equalsのオーバーライドです。 /// </summary> public override bool Equals(object obj){ // // Equalsの実装についての注意点に関しては、MSDNのSystem.Object#Equalsの // ドキュメントを参照してください。 // // 決まり事的には、javaでのequalsメソッド実装の際と大体同じイメージです。 // // // まず、型変換できるように値のチェック. // if(obj == null || obj.GetType() != GetType()){ return false; } ObjectResearch00 other = (ObjectResearch00) obj; // // IDの値が一致する場合、同値とみなす. // return (Id == other.Id); } /// <summary> /// System.Object#GetHashCodeのオーバーライドです。 /// </summary> public override int GetHashCode(){ // // GetHashCodeの実装についての注意点に関しては、MSDNのSystem.Object#GetHashCodeの // ドキュメントを参照してください。 // // 決まり事的には、javaでのequalsメソッド実装の際と大体同じイメージです。 // // Javaの場合と同じく、EqualsをオーバーライドしたらGetHashCodeもオーバーライドしましょう。 // // // Idの値は一意であると仮定. // return Id.GetHashCode(); } /// <summary> /// System.Object#ToStringのオーバーライドです。 /// </summary> /// <remarks> /// オブジェクトの文字列表現を返します. /// </remarks> public override string ToString(){ return string.Format("{0}[Id={1}, Name={2}]", GetType().FullName, Id, Name); } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場