midas+son의 크리에이티브(creative) 이야기

연산자 오버로딩 중 ==(같다), !=(다르다) 체크는 쌍으로 이루어 져야 한다.

둘 중에 하나만 존재하지 못한다.

아래의 예제 샘플은

새로운 클래스의 key라는 string변수 값이 같은지 체크하여 

bool을 리턴하도록 ==, !=연산자를 오버로딩 하였다.

//새로운 클래스

    public class EquipmentActor 

    {

        public string key;    //키값변수


        //단순하게 아래처럼 비교하면 null 과 비교 할 수 없어서 위험하다.

        //public static bool operator ==(EquipmentActor x, EquipmentActor y)

        //{

        //    if (x.key.Equals(y.key))

        //        return true;

        //    else return false;

        //}

        //public static bool operator !=(EquipmentActor x, EquipmentActor y)

        //{

        //    if (x.key.Equals(y.key))

        //        return false;

        //    else return true;

        //}


  //object로 바꾸어 null비교를 하고 진행한다.

        public static bool operator ==(EquipmentActor x, EquipmentActor y)

        {

            if ((object)x == null && (object)y == null) return true;

            else if (((object)x != null && (object)y != null) && x.key == y.key) return true;

            else return false;

        }


        public static bool operator !=(EquipmentActor x, EquipmentActor y)

        {

            return !(x == y);

        }


//근데 가장 심플한건 if비교 할때 if((object)변수 == nullptr)하는게 제일 깔끔한거 같다. 그러면 위의 object바꾸는건 다 없어질텐데...

}