Share via


인터페이스(C# 프로그래밍 가이드)

그룹 관련된 기능에 대 한 정의 인터페이스를 포함 하는 클래스 또는 구조체 를 구현할 수 있습니다.

인터페이스를 사용 하 여 클래스에서 여러 소스의 동작 예를 들어, 포함할 수 있습니다. 언어 클래스의 다중 상속을 지원 하지 않으므로 해당 기능 C# 중요 합니다. 또한 해당 구조체 또는 클래스에서 실제로 상속할 수 없으므로 구조체에 대 한 상속 시뮬레이션 하려는 경우 인터페이스를 사용 해야 합니다.

사용 하 여 인터페이스 정의 인터페이스 다음 예제와 같이 키워드.

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

모든 클래스 또는 구현 하는 구조체는 IEquatable 인터페이스에 대 한 정의가 포함 되어야는 Equals 인터페이스의 지정 된 시그니처와 일치 하는 메서드. 결과적으로 구현 하는 클래스에서 믿을 수 IEquatable<T> 를 포함 하는 Equals 메서드가 클래스의 인스턴스를 확인할 것에 동일한 클래스의 다른 인스턴스가 같은지 여부를 수 있습니다.

정의의 IEquatable<T> 에 대 한 구현을 제공 하지 않는 Equals. 인터페이스의 서명만을 정의합니다. 즉, 인터페이스에 C# 모든 메서드가 추상 하는 추상 클래스에 비슷합니다. 그러나 클래스 또는 구조체는 여러 인터페이스를 구현할 수 있지만 클래스는 단일 클래스를 추상 여부를 상속할 수 있습니다. 따라서 인터페이스를 사용 하 여 사용자 클래스에서 동작 하는 여러 소스에서 포함할 수 있습니다.

추상 클래스에 대 한 자세한 내용은 추상 및 봉인 클래스와 클래스 멤버.

인터페이스는 메서드, 속성, 이벤트, 인덱서 또는 이러한 네 가지 멤버 형식의 조합을 포함할 수 있습니다. 예제에 대 한 링크를 참조 하십시오. 관련 단원. 인터페이스는 상수, 필드, 연산자, 인스턴스 생성자, 소멸자 또는 형식을 포함할 수 없습니다. 인터페이스 멤버는 자동으로 공개 되며 액세스 한정자를 포함할 수 없습니다. 구성원을 또한 수 없습니다 정적.

인터페이스 멤버를 구현 하려면 구현 하는 클래스의 해당 멤버 공개, 정적이 아닌 고 이름과 시그니처가 인터페이스 멤버.

클래스 또는 구조체가 인터페이스를 구현 하는 경우 클래스 또는 구조체 구현을 모든 인터페이스를 정의 하는 멤버를 제공 해야 합니다. 인터페이스 자체 기본 클래스의 기능을 상속할 수 있음을 클래스 또는 구조체는 상속할 수 없음 기능을 제공 합니다. 그러나 기본 클래스에서 인터페이스를 구현 하는 경우 기본 클래스에서 파생 된 모든 클래스는 해당 구현을 상속.

다음 예제에서는 IEquatable <T>의 구현을 보여 줍니다. 인터페이스입니다. 구현 하는 클래스 Car의 구현을 제공 해야 합니다에 Equals 메서드.

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

    // Implementation of IEquatable<T> interface 
    public bool Equals(Car car)
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else 
            return false;
    }
}

클래스의 인덱서와 속성에서 인터페이스에 정의 된 인덱서 나 속성에 대 한 추가 접근자를 정의할 수 있습니다. 인터페이스는 속성을 선언할 수 있습니다 예를 들어,는 get 접근자입니다. 인터페이스를 구현 하는 클래스와 모두 동일한 속성을 선언할 수 있습니다는 get 및 설정 접근자입니다. 그러나 속성이나 인덱서에 명시적 구현이 사용되는 경우에는 접근자가 일치해야 합니다. 명시적으로 구현 하는 방법에 대 한 자세한 내용은 명시적 인터페이스 구현(C# 프로그래밍 가이드)인터페이스 속성(C# 프로그래밍 가이드).

인터페이스는 다른 인터페이스를 구현할 수 있습니다. 클래스는 인터페이스 또는 다른 인터페이스를 구현 하는 인터페이스를 통해 상속 하는 기본 클래스 여러 번 포함 될 수 있습니다. 그러나 클래스 인터페이스는 클래스 정의의 일부로 선언 하는 경우 클래스 인터페이스 구현 시간 및 유일한 하나만 제공할 수 있습니다 (class ClassName : InterfaceName). 인터페이스는 해당 인터페이스를 구현 하는 기본 클래스를 상속 하므로 상속 되 면 기본 클래스 인터페이스 멤버의 구현을 제공 합니다. 그러나 파생된 클래스는 상속 된 구현을 사용 하는 대신 인터페이스 멤버를 구현할 수 있습니다.

기본 클래스는 가상 멤버를 사용 하 여 인터페이스 멤버를 구현할 수 있습니다. 이 경우 파생된 클래스는 가상 구성원을 재정의하여 인터페이스 동작을 변경할 수 있습니다. 가상 멤버에 대한 자세한 내용은 Polymorphism을 참조하십시오.

인터페이스 요약

인터페이스에는 다음과 같은 속성이 있습니다.

  • 인터페이스와 추상 기본 클래스입니다. 클래스 또는 구조체는 인터페이스를 구현 하는 모든 멤버를 구현 해야 합니다.

  • 인터페이스는 직접 인스턴스화할 수 없습니다. 해당 멤버는 클래스 또는 인터페이스를 구현 하는 구조체에서 구현 됩니다.

  • 인터페이스는 이벤트, 인덱서, 메서드 및 속성을 포함할 수 있습니다.

  • 인터페이스는 메서드의 구현을 포함하지 않습니다.

  • 클래스나 구조체는 여러 인터페이스를 구현할 수 있습니다. 클래스는 기본 클래스를 상속 하 고 하나 이상의 인터페이스를 구현할 수도 있습니다.

단원 내용

관련 단원

중요 설명서 장

인터페이스 에서 C# 3.0 학습: C# 3.0의 기본 개념을 마스터

참고 항목

참조

상속(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드