Objectクラス

C#Javaと同様、全てのクラスは必ずObjectクラスを継承していることになる。また、構造体もObjectクラスを継承している*1


Objectクラスは引数なしのコンストラクタと、いくつかのメソッドを持っている。

宣言 概要
public virtual bool Equals(Object obj) このオブジェクトがobjと等しいかどうかを返す
public static bool Equals(Object objA, Object objB) objAとobjBが等しいかどうかを返す
public virtual int GetHashCode() コレクションで使用するハッシュ関数
public Type GetType() Typeオブジェクトを取得する*2
public virtual string ToString() オブジェクトの文字列表現を取得する
~Object() デストラクタ*3
protected Object MemberwiseClone() オブジェクトを複製する*4
public static bool ReferenceEquals(Object objA, Object objB) objAとobjBが同じ実体かどうかを返す

で、一つ注意。

using System;

class Program
{
    static void Main(string[] args)
    {
        int a = 10;
        Console.WriteLine(object.ReferenceEquals(a, a).ToString());
    }
}

このプログラムはFalseを出力する。これは引数が参照型のObjectだからボックス化されるから。

*1:C++と違ってC#ではclassとstructにはかなりの違いがあるのに、これはなかなか驚きだ

*2:JavaのClassオブジェクトのようなもの

*3:C++のデストラクタより、Javaのファイナライザに近い、というかファイナライザ

*4:Javaのcloneメソッドのようなもの