C \ # 인터페이스 프로 그래 밍 의 정의 인터페이스 전면 분석

기술적 으로 인 터 페 이 스 는 함수 형 방법 을 포함 한 데이터 구조 이다.이 데이터 구 조 를 통 해 클 라 이언 트 코드 는 구성 요소 대상 의 기능 을 호출 할 수 있 습 니 다.인터페이스의 일반적인 형식 은 다음 과 같 습 니 다.
[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]

설명: · attributes (선택 가능): 추가 적 인 정의 정보.modifiers (선택 가능): 사용 할 수 있 는 수정자 에는 new 와 네 개의 접근 수정자 가 있 습 니 다.각각 new, public, proctected, internal, private.하나의 인터페이스 정의 에서 같은 수정자 가 여러 번 나타 나 는 것 을 허용 하지 않 습 니 다. new 수정자 는 내장 인터페이스 에 만 나타 나 계승 한 동명 의 구성원 을 덮어 쓰 는 것 을 표시 합 니 다.The public, proctected, internal, and private 수정자 가 인터페이스 에 대한 접근 권한 을 정의 합 니 다.인디케이터 와 이벤트.identifier: 인터페이스 이름.base - list (선택 가능): 하나 이상 의 명시 적 기본 인 터 페 이 스 를 포함 하 는 목록 입 니 다. 인터페이스 간 은 쉼표 로 구 분 됩 니 다.인터페이스 - body: 인터페이스 구성원 에 대한 정의.인 터 페 이 스 는 네 임 스페이스 나 클래스 의 구성원 일 수 있 으 며 다음 구성원 의 서명 을 포함 할 수 있 습 니 다: 방법, 속성, 색인 기.하나의 인 터 페 이 스 는 하나 이상 의 기본 인터페이스 에서 계승 할 수 있다.인터페이스 라 는 개념 은 C \ # 자바 와 매우 비슷 하 다.인터페이스의 키 워드 는 interface 입 니 다. 하나의 인 터 페 이 스 는 하나 이상 의 다른 인 터 페 이 스 를 확장 할 수 있 습 니 다.관례 에 따 르 면 인터페이스의 이름 은 대문자 'I' 로 시작한다.다음 코드 는 C \ # 인터페이스의 한 예 입 니 다. 자바 의 인터페이스 와 똑 같 습 니 다.
interface IShape  { 
    void Draw ( ) ;
}

두 개 이상 의 인터페이스 에서 파생 되면 부모 인터페이스의 이름 목록 은 쉼표 로 구 분 됩 니 다. 아래 코드 와 같 습 니 다.
interface INewInterface: IParent1, IParent2 { }

그러나 자바 와 달리 C \ # 의 인 터 페 이 스 는 도 메 인 (Field) 을 포함 할 수 없습니다.또한 C \ # 에서 인터페이스 안의 모든 방법 은 기본적으로 공용 방법 임 을 주의해 야 한다.자바 에서 방법 정 의 는 Public 수정자 (필요 하지 않 더 라 도) 를 가 질 수 있 지만 C \ # 에서 인터페이스 로 표시 하 는 방법 으로 Public 수정자 를 지정 하 는 것 은 불법 입 니 다.예 를 들 어 아래 의 C \ # 인 터 페 이 스 는 컴 파일 오류 가 발생 합 니 다.
interface IShape { public void Draw( ) ; }

다음 예 는 IControl 이라는 인 터 페 이 스 를 정의 합 니 다. 인터페이스 에는 구성원 방법 Paint 가 포함 되 어 있 습 니 다.
interface IControl {
void Paint( ) ;
}

다음 예 에서 인터페이스 IInterface 는 두 개의 기본 인터페이스 인 IBase 1 과 IBase 2 에서 계승 합 니 다.
interface IInterface: IBase1, IBase2 {
   void Method1( ) ;
   void Method2( ) ;
}

인 터 페 이 스 는 클래스 에 의 해 실 현 될 수 있다.실 현 된 인터페이스의 식별 자 는 클래스 의 기본 목록 에 나타 납 니 다.예 를 들 면:
class Class1: Iface1, Iface2 {
   // class   。
}

클래스 의 기본 목록 이 기본 클래스 와 인 터 페 이 스 를 동시에 포함 할 때 목록 에 먼저 나타 나 는 것 은 기본 클래스 입 니 다.예 를 들 면:
class ClassA: BaseClass, Iface1, Iface2 {
   // class  。
}

다음 코드 세그먼트 정의 인터페이스 IFace 는 하나의 방법 만 있 습 니 다.
interface IFace {
  void ShowMyFace( ) ;
}

이 정의 에서 대상 을 예화 할 수 는 없 지만, 그것 에서 하나의 종 류 를 파생 시 킬 수 있다.따라서 이 종 류 는 쇼 마 이 페 이 스 추상 적 인 방법 을 실현 해 야 한다.
class CFace:IFace
{
  public void ShowMyFace( )   {
    Console.WriteLine(" implementation " ) ;
   } 
}

  기본 인 터 페 이 스 는 0 개 이상 의 인터페이스 에서 계승 할 수 있 으 며, 이 인터페이스 라 고 불 리 는 명시 적 인 인터페이스 이다.인터페이스 에 0 보다 많은 디 스 플레이 기반 인터페이스 가 있 을 때 인터페이스의 정의 형식 은 인터페이스 식별 자 뒤에 가짜 ':' 쉼표 로 ',' 분 리 된 기본 인터페이스 식별 자 목록 '이다.인터페이스 기반: 인터페이스 형식 목록 설명: · 한 인터페이스의 명시 적 인 인 터 페 이 스 는 적어도 인터페이스 자체 와 같이 접근 할 수 있어 야 합 니 다.예 를 들 어 공공 인터페이스의 기본 인터페이스 에서 개인 또는 내부 인 터 페 이 스 를 지정 하 는 것 은 잘못 되 었 습 니 다.인터페이스 가 직접적 이거 나 간접 적 으로 그것 으로 부터 물 려 받 는 것 은 잘못된 것 이다.인터페이스의 기본 인 터 페 이 스 는 모두 명시 적 인 기본 인터페이스 이 고 그들의 기본 인터페이스 이다.다시 말 하면 기 인터페이스의 집합 은 완전히 현식 기 인터페이스 와 그들의 현식 기 인터페이스 등 으로 구성 된다.아래 의 예 에서
interface IControl {
	void Paint( ) ;
}
interface ITextBox: IControl {
	void SetText(string text) ;
}
interface IListBox: IControl {
	void SetItems(string[] items) ;
}
interface IComboBox: ITextBox, IListBox { }

IComboBox 의 기본 인 터 페 이 스 는 IControl, ITextBox, 그리고 IlistBox 입 니 다.인터페이스 가 기본 인 터 페 이 스 를 계승 하 는 모든 구성원다시 말 하면 위의 인터페이스 IComboBox 는 Paint 처럼 멤버 SetText 와 SetItems 를 계승 한 것 이다.인 터 페 이 스 를 실현 하 는 클래스 나 구조 도 모든 인터페이스의 기본 인 터 페 이 스 를 은근히 실현 했다.인터페이스 주체 의 인터페이스 주 체 는 인터페이스의 구성원 을 정의 합 니 다.
interface-body:
{   interface-member-declarationsopt   }

    인터페이스 구성원 인 터 페 이 스 를 정의 하면 한 명 과 여러 명의 구성원 을 포함 할 수 있 습 니 다. 이 구성원 들 은 방법, 속성, 색인 표시 기와 이벤트 일 수 있 지만 상수, 도 메 인, 연산 자, 구조 함수 또는 석조 함수 일 수 없 으 며 어떠한 정적 구성원 도 포함 할 수 없습니다.인터페이스 정 의 는 새로운 정의 공간 을 만 들 고 인터페이스 정의 에 직접 포 함 된 인터페이스 구성원 정 의 는 새 구성원 을 이 정의 공간 에 도입 합 니 다.설명: 인터페이스의 구성원 은 기본 인터페이스 에서 물 려 받 은 구성원 과 인터페이스 자체 에서 정 의 된 구성원 이다.인터페이스 정 의 는 0 개 이상 의 구성원 을 정의 할 수 있다.인터페이스의 구성원 은 방법, 속성, 이벤트 또는 색인 기 여야 합 니 다.인 터 페 이 스 는 상수, 필드, 연산 자, 인 스 턴 스 구조 함수, 석조 함수 또는 유형 을 포함 할 수 없고 그 어떠한 종류의 정적 구성원 도 포함 할 수 없습니다.인 터 페 이 스 를 정의 합 니 다. 이 인 터 페 이 스 는 모든 가능 한 종류의 구성원 에 게 방법, 속성, 이벤트 와 색인 기 를 포함 합 니 다.인터페이스 구성원 의 기본 접근 방식 은 Public 입 니 다.인터페이스 구성원 정 의 는 구성원 정의 전에 abstract, Public, proctected, internal, private, virtual, override 또는 static 수식 자 를 추가 할 수 없습니다.인터페이스의 구성원 간 에는 서로 동명 이인 이 될 수 없다.계 승 된 구성원 은 더 이상 정의 할 필요 가 없 지만 인 터 페 이 스 는 계 승 된 구성원 과 동명 의 구성원 을 정의 할 수 있다. 이때 우 리 는 인터페이스 구성원 이 계 승 된 구성원 을 덮어 서 오류 가 발생 하지 않 지만 컴 파일 러 는 경 고 를 한다.경고 알림 을 닫 는 방식 은 구성원 정의 전에 new 키 워드 를 추가 하 는 것 입 니 다.그러나 부모 인터페이스 에 있 는 구성원 을 덮어 쓰 지 않 으 면 new 키 워드 를 사용 하면 컴 파일 러 가 경 고 를 보 냅 니 다.방법의 이름 은 같은 인터페이스 에서 정의 하 는 모든 속성 과 이벤트 의 이름과 다 르 게 해 야 합 니 다.또한, 방법의 서명 은 같은 인터페이스 에서 정 의 된 모든 다른 방법의 서명 과 다 르 게 해 야 합 니 다.속성 이나 이벤트 의 이름 은 같은 인터페이스 에서 정 의 된 모든 다른 구성원 의 이름과 다 르 게 해 야 합 니 다.하나의 색인 기의 서명 은 같은 인터페이스 에서 정 의 된 다른 모든 색인 기의 서명 과 구별 되 어야 합 니 다.인터페이스 방법 성명 의 속성 (attributes), 반환 형식 (return - type), 식별 자 (identifier) 와 형식 매개 변수 목록 (formal - parameter - lis) 은 같은 방법 성명 의 의미 가 있 습 니 다.하나의 인터페이스 방법 은 하나의 방법 주 체 를 지정 할 수 없 으 며, 성명 은 보통 하나의 분점 으로 끝난다.인터페이스 속성 성명 의 접근 자 는 클래스 속성 성명 의 접근 자 와 대응 되 며, 접근 자 주 체 를 제외 하고 일반적으로 분 호 를 사용 해 야 합 니 다.따라서 속성 이 읽 기와 쓰기, 읽 기 전용 이 든 쓰기 전용 이 든 접근 부 호 는 완전히 확 정 됩 니 다.인터페이스 색인 성명 의 속성 (attributes), 형식 (type) 과 형식 매개 변수 목록 (formal - parameter - list) 은 클래스 의 색인 성명 과 같은 의 미 를 가진다.다음 예 에서 인터페이스 IMyTest 에는 색인 표시 기, 이벤트 E, 방법 F, 속성 P 등 구성원 이 포함 되 어 있 습 니 다.
interface IMyTest{
    string this[int index] { get; set; }
    event EventHandler E ;
    void F(int value)  ;
    string P { get; set; }
}
public delegate void EventHandler(object sender, EventArgs e) ;

다음 예 에서 인터페이스 ISTringList 는 모든 가능 한 유형의 구성원 의 인 터 페 이 스 를 포함 합 니 다. 하나의 방법, 하나의 속성, 하나의 이벤트 와 하나의 색인 을 포함 합 니 다.
public delegate void StringListEvent(IStringList sender);
public interface IStringList
{
	void Add(string s);
	int Count { get; }
	event StringListEvent Changed;
	string this[int index] { get; set; }
}

  인터페이스 구성원 의 전권 명 은 인터페이스 구성원 도 전권 명 (fully qualified name) 을 사용 할 수 있다.인터페이스의 전권 명칭 은 이렇게 구성 되 어 있다.인터페이스 이름 에 작은 원점 을 추가 합 니 다. "그리고 멤버 이름, 예 를 들 어 다음 두 개의 인터페이스 에 대해:
interface IControl {
    void Paint( ) ;
}
interface ITextBox: IControl {
    void GetText(string text) ;
}

그 중에서 Paint 의 전권 명 은 IControl. Paint 이 고 GetText 의 전권 명 은 ITextBox. GetText 이다.물론 전체 이름 의 구성원 이름 은 인터페이스 에서 정 의 된 것 이 어야 한다. 예 를 들 어 ITextBox. Paint 를 사용 하 는 것 은 불합리 하 다.인터페이스 가 이름 공간의 구성원 이 라면, 전권 명 은 이름 공간의 이름 을 포함해 야 한다.
namespace System
{
    public interface IDataTable {
        object Clone( ) ;
    }
}

그러면 Clone 방법의 전권 명 은 System. IDataTable. Clone 입 니 다.

좋은 웹페이지 즐겨찾기