参照型と値型のEquals

参照型と値型での Object.Equals メソッド の動作の違い。

  • 参照型: 同一オブジェクトならば true
  • 値型: 保持している値が同じならば true
using System;

namespace EqualForValueTypeAndReferenceType
{
    class Program
    {
        static void Main(string[] args)
        {
            ReferenceType ref1 = new ReferenceType(123);
            ReferenceType ref2 = new ReferenceType(123);
            Console.WriteLine("ref1.Equals(ref2) = {0}", ref1.Equals(ref2));

            ValueType val1 = new ValueType(123);
            ValueType val2 = new ValueType(123);
            Console.WriteLine("val1.Equals(val2) = {0}", val1.Equals(val2));
        }
    }

    class ReferenceType
    {
        private int _intValue;

        internal ReferenceType(int intValue)
        {
            _intValue = intValue;
        }
    }

    struct ValueType
    {
        private int _intValue;

        internal ValueType(int intValue)
        {
            _intValue = intValue;
        }
    }
}

f:id:tt195361:20150714135445p:plain