[C#]クラスの比較

structのobjectの比較は、2つのobjectの構造が同じ、かつ、フィールドの値が同じであればtrue.
classのobjectの比較のデフォルトの動作は、2つのreferenceが同じobjectを指していればtrue.フィールドの値が同じであっても異なるobjectを指していればfalseとなる。

struct PointStruct
{
    public int x,y;
}
class PointClass
{
    public int x,y;
}

のobjectを比較する。

PointStruct ps1 = new PointStruct();
ps1.x = ps1.y = 55;
PointStruct ps2 = new PointStruct();
ps2.x = ps2.y = 55;
PointClass pc1 = new PointClass();
pc1.x = pc1.y = 55;
PointClass pc2 = new PointClass();
pc2.x = pc2.y = 55;
// compare
Console.WriteLine("ps1.Equals(ps2) {0}",ps1.Equals(ps2));
Console.WriteLine("pc1.Equals(pc2) {0}", pc1.Equals(pc2));

の結果は以下のようになる。

ps1.Equals(ps2) True
pc1.Equals(pc2) False

structには”==”が定義されていないので必要があれば自分で定義する。
base class(System.ObjectとSystem.ValueType)では

public virtual Equals(.....)
{ ... }

と定義されている。子classでは override 宣言で定義できる。

広告
%d人のブロガーが「いいね」をつけました。