아카이빙/C#

[C#] 인터페이스

셩님 2018. 6. 18. 18:54

[C#] 인터페이스

  • 인터페이스는 클래스 또는 구조체에서 구현할 수 있는 기능에 대한 정의를 포함한다.

  • 클래스나 구조체는 인터페이스를 상속받아 인터페이스의 기능을 정의해준다.

  • 인터페이스를 상속받은 클래스나 구조체는 인터페이스의 모든 메소드를 구현해야 한다.

IEquatable 인터페이스

interface IEquatable<T>
{
   bool Equals(T obj);
}

인터페이스를 상속받은 클래스

public class Car : IEquatable<Car>
{
   public string Model {get; set;}
   public int Year {get; set;}

   public bool Equals(Car car)
  {
       if(this.Model == car.Model && this.Year == car.Year){
           return true;
      }
       return false;
  }
}
  • Equals 메소드를 구현해야한다.

인터페이스를 상속받은 구조체

struct Vector3 : IEquatable<Vector3>
{
   public float x, y, z;
   public Vector3(float x, float y, float z)
  {
       this.x = x;
       this.y = y;
       this.z = z;
  }

   public bool Equals(Vector3 v)
  {
       if(this.x == v.x && this.y == v.y && this.z == v.z)
      {
           return true;
      }
       return false;
  }
}
  • 마찬가지로 Equals 메소드를 구현해야 한다.

테스트

class MainApp
{
   static void Main()
  {
       Car car1 = new Car();
       car1.Model = "BMW";
       car1.Year = 1992;

       Car car2 = new Car();
       car2.Model = "BMW";
       car2.Year = 1992;

       Console.WriteLine(car1.Equals(car2));

       car2.Year = 1993;
       Console.WriteLine(car1.Equals(car2));

       Vector3 pos1 = new Vector3(1f, 0f, 0f);
       Vector3 pos2 = new Vector3(1f, 0f, 0f);

       Console.WriteLine(pos1.Equals(pos2));
  }
}

결과

True
False
True

참조


'아카이빙 > C#' 카테고리의 다른 글

[C#] 인터페이스 다중 상속  (0) 2018.06.18
[C#] 인터페이스를 상속하는 인터페이스  (0) 2018.06.18
[C#] 구조체  (0) 2018.06.18
[C#] 확장 메소드 (Extension Method)  (0) 2018.06.18
[C#] 오버라이딩  (0) 2018.06.18