http://blogs.wankuma.com/rti/archive/2007/08/20/91083.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門10
http://blogs.wankuma.com/rti/archive/2007/08/14/90238.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門9
http://blogs.wankuma.com/rti/archive/2007/08/10/89801.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門8
http://blogs.wankuma.com/rti/archive/2007/08/08/89397.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門7
http://blogs.wankuma.com/rti/archive/2007/08/07/89226.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門6
http://blogs.wankuma.com/rti/archive/2007/08/02/88399.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門5
http://blogs.wankuma.com/rti/archive/2007/07/31/87955.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門4
http://blogs.wankuma.com/rti/archive/2007/07/30/87742.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門3
http://blogs.wankuma.com/rti/archive/2007/07/26/87105.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門2
http://blogs.wankuma.com/rti/archive/2007/07/25/86988.aspx
R流、一瞬でわかる.NETオブジェクト指向プログラミング入門1
の続きです。
どこからフォローすれば良いのかわからないので、先頭から順に行ってます。
今回は
System.Objectとは?
というテーマです。
System.Object は、全てのクラスが継承しているクラスです。
ですから、このクラスのメンバというのは、基本的に全てのクラスに属するメンバとなります。
ちなみに object は、System.Object のエイリアスです。
public Object();
コンストラクタです。
全てのオブジェクトインスタンスが生成される都度に呼び出されることになる訳です。
public virtual bool Equals(object obj)
public static bool Equals(object obj1, object obj2)
オーバーロードになっています。
参照型の場合は、両者の Object インスタンスが等しいかどうかを判断します。
値型の場合は、両者の値が等しいかどうかを判断します。
protected override void Finalize()
Object がガベージ コレクションに収集される際に呼び出されます。
ここで、Object がアンマネージなリソースを解放することができます。
public virtual int GetHashCode()
インスタンスのハッシュコードを返します。
既定のハッシュコードは、均等性も一意性も保障されていません。
有効なハッシュ値が必要となるクラスでは、自身で有効なハッシュ値を返すようにします。
public Type GetType()
現在のインスタンスの型参照を取得します。これを利用するとインスタンスの構造を調べることができます。
リフレクションなどで使うこともありますね。
protected object MemberwiseClone()
現在の Object の簡易コピーを作成します。
public static bool ReferenceEquals(objectobj1, object obj2)
指定した2つの Object のインスタンスが同一かどうかを判断します。
public virtual string ToString()
現在の Object を表す String を返します。
既定の戻り値は、現在のインスタンスの型を表す完全修飾名になります。
このため、必要に応じてオーバーライドして、適切な文字列を返すようにしましょう。
以上、お馴染みのメンバーでした。
ざっと見ると、継承したクラス側で独自な処理を行った方が良いメンバは virtual 修飾子 が付いています。
しかし、Finalize() だけは override になっています(少なくとも、僕の手持ちの本には、そう書かれています)
全てのクラスの基本となる Object クラスのメンバにおいて、何故 override 修飾子がついているのでしょうか?
実は System.Object は実はもっと他のクラスを継承しているのか、僕の手持ちの本が間違っているのか、あるいはもっと違う深い理由があるのかはわかりません。
誰かに答えを教えて欲しいです。
ちなみに、MSDNライブラリー以下のリンク先を見ると、VB の例に Overridable と記述されています。
http://msdn2.microsoft.com/ja-jp/library/system.object.finalize(VS.80).aspx
これって C# で言うところの virtual ですよね?
やっぱり、virtual が正しいのでしょうか。