C #에서 연산자 오버로딩을 사용하는 방법

다형성은 OOP (Object Oriented Programming)의 기본 원칙 중 하나입니다. 다형성이라는 단어는 많은 것을 의미하는 "poly"와 형태를 의미하는 "morph"라는 두 단어에서 파생됩니다. 따라서 다형성은 동일한 것이 있지만 다른 형태의 존재를 의미합니다.

연산자 오버로딩은 정적 다형성의 예입니다. 연산자 오버로딩을 활용하거나 연산자에 기능을 추가하여 기본 데이터 형식으로 작업하는 것과 동일한 방식으로 사용자 정의 형식으로 작업 할 수 있습니다.

연산자는 무엇이며 오버로드 될 수있는 연산자는 무엇입니까?

표현식에는 일반적으로 연산자와 피연산자가 있습니다. 연산자는 피연산자에서 작동하는 연산자이며 모두 식의 일부입니다. 예를 들어, 다음은 두 개의 피연산자와 하나의 연산자를 포함하는 표현식입니다. 피연산자는 X와 Y이고 연산자는 +입니다.

X + Y

연산자는 목적과 연산자가 작동하는 피연산자 수에 따라 단항, 이진, 비교, 할당 등으로 분류됩니다. 대부분의 연산자가 오버로드 될 수 있지만 특정 제한이 적용됩니다. 본질적으로 모든 연산자가 과부하 될 수있는 것은 아닙니다.

단항 연산자, 즉 하나의 피연산자와 함께 작동하는 연산자는 오버로드 될 수 있습니다. 이항 연산자와 비교 연산자 (예 : ==,! =,, =)를 오버로드 할 수도 있습니다. 그러나 =,?,->, new, is, sizeof 또는 typeof 연산자는 오버로드 할 수 없습니다. && 및 ||와 같은 조건 연산자도 오버로드 할 수 없습니다. 용이하게. 또한 배열 인덱싱 연산자 []을 오버로드 할 수 없습니다.

이 MSDN 문서에서 모든 연산자가 오버로드 될 수있는 항목에 대해 자세히 알아볼 수 있습니다.

C #에서 연산자 오버로딩 구현

이 섹션에서는 C #에서 연산자 오버로딩을 구현하는 방법을 살펴 봅니다. DistanceCalculator라는 다음 클래스를 고려하십시오.

public class DistanceCalculator

   {

       Int32 feet = 0, inch = 0;

       public DistanceCalculator(Int32 feet = 0, Int32 inch = 0)

       {

           this.feet = feet;

           this.inch = inch;

       }

   }

위의 코드 목록을 참조하십시오. DistanceCalculator 클래스에는 Int32 형식의 두 데이터 멤버 (피트 및 인치)가 포함되어 있습니다. 이제 연산자를 오버로드하는 방법을 설명하기 위해이 클래스에 더 많은 메서드를 추가합니다.

연산자 오버로딩으로 작업 할 때 특정 사항을 염두에 두어야합니다. 오버로드 할 연산자에는 키워드 연산자로 표시된 해당 메서드가 있어야합니다. 연산자 함수에 대한 인수는 피연산자이며 연산자 함수는 값을 반환 할 수 있습니다. 연산자 함수는 정적이어야하며 포함하는 유형의 멤버 여야합니다.

다음 코드 조각은 일반적인 연산자 함수가 어떻게 생겼는지 보여줍니다. 이 예제는 == 및! = 연산자가 오버로드 될 수있는 방법을 보여줍니다.

public static bool operator ==(DistanceCalculator obj1, DistanceCalculator obj2)

       {

           return obj1.Value == obj2.Value;

       }

       public static bool operator !=(DistanceCalculator obj1, DistanceCalculator obj2)

       {

           return obj1.Value != obj2.Value;

       }

Value는 인치 단위로 값을 반환하는 속성입니다.

public Int32 Value

       {

           get

           {

               return (feet * 12) + inch;

           }

       }

다음은 DistanceCalculator 클래스의 전체 코드 목록입니다.

public class DistanceCalculator

   {

       Int32 feet = 0, inch = 0;

       public DistanceCalculator(Int32 feet = 0, Int32 inch = 0)

       {

           this.feet = feet;

           this.inch = inch;

       }

       public static bool operator ==(DistanceCalculator obj1, DistanceCalculator obj2)

       {

           return obj1.Value == obj2.Value;

       }

       public static bool operator !=(DistanceCalculator obj1, DistanceCalculator obj2)

       {

           return obj1.Value != obj2.Value;

       }

       public override bool Equals(object obj)

       {

           DistanceCalculator distanceCalculator = obj as DistanceCalculator;

           if (distanceCalculator != null)

           {

               return (distanceCalculator == this);

           }

           return false;

       }

       public override int GetHashCode()

       {

           return Value.GetHashCode();

       }

     public Int32 Feet

       {

           get { return feet; }

       }

       public Int32 Inch

       {

           get { return inch; }

       }

       public Int32 Value

       {

           get

           {

               return (feet * 12) + inch;

           }

       }

   }

다음 코드 스 니펫은 DistanceCalculator 클래스를 사용하는 방법을 보여줍니다.

static void Main(string[] args)

       {

           DistanceCalculator obj1 = new DistanceCalculator(1, 2);

           DistanceCalculator obj2 = new DistanceCalculator(1, 2);

           Console.WriteLine((obj1 == obj2).ToString());

           Console.Read();

       }

다음 코드 조각은 + 연산자를 오버로드하여 두 개체를 추가하는 방법을 보여줍니다.

public static DistanceCalculator operator +(DistanceCalculator obj1, DistanceCalculator obj2)

       {

           Int32 totalInches = obj1.Value + obj2.Value;

           Int32 feet = totalInches / 12;

           Int32 inch = totalInches % 12;

           DistanceCalculator temp = new DistanceCalculator(feet, inch);

           return temp;

       }

다음 두 속성을 DistanceCalculator 클래스에 추가해 보겠습니다. 다음 코드 조각은 DistanceCalculator 유형의 두 개체를 추가하고 결과 개체를 동일한 유형으로 반환하는 방법을 보여줍니다. 즉, 반환 된 개체는 DistanceCalculator 유형입니다.

public Int32 Feet

       {

           get { return feet; }

       }

       public Int32 Inch

       {

           get { return inch; }

       }

다음은 DistanceCalculator 클래스의 두 인스턴스를 만들고 오버로드 된 연산자 함수를 활용하여 동일한 유형의 다른 개체에 결과를 할당하는 방법입니다.

static void Main(string[] args)

       {

           DistanceCalculator obj1 = new DistanceCalculator(1, 11);

           DistanceCalculator obj2 = new DistanceCalculator(1, 2);

           DistanceCalculator obj3 = obj1 + obj2;

           Console.WriteLine("Feet: "+obj3.Feet.ToString());

           Console.WriteLine("Inch: " + obj3.Inch.ToString());

           Console.Read();

       }