윈도우즈프로그래밍#9

LeeMir, 15 April 2021

파생클래스와 인터페이스


파생 클래스
  • 상속
    • 베이스 클래스의 모든 멤버들이 파생 클래스로 전달되는 기능
    • 클래스의 재사용성 증가
  • 상속의 종류
    • 단일 상속
      • 베이스 클래스 1개
    • 다중 상속
      • 베이스 클래스 1개 이상
  • C#에서는 단일 상속만 지원
  • 파생 클래스의 필드
    • 클래스의 필드 선언 방법과 동일
    • 베이스 클래스의 필드명과 다른 경우 - 상속됨
    • 베이스 클래스의 필드명과 동일한 경우 - 베이스 클래스의 필드는 숨겨짐
      • base 지정어를 통해 베이스 클래스의 멤버 접근 가능
  • 파생 클래스의 생성자
    • 형태와 의미는 클래스의 생성자와 동일
    • 명시적으로 호출하지 않으면, 기본 생성자가 컴파일러에 의해 자동적으로 호출
    • base()
      • 베이스 클래스의 생성자를 명시적으로 호출
    • 실행과정
      • 필드의 초기화 부분 실행
      • 베이스 클래스의 생성자 실행
      • 파생 클래스의 생성자 실행
  • 메소드 재정의 및 하이딩
    • 베이스 클래스에서 구현된 메소드를 파생 클래스에서 구현된 메소드로 대체
    • 메소드의 signature(매개변수)가 동일한 경우 - 메소드 재정의 및 하이딩(Hiding)
    • 메소드의 signature가 다른 경우 - 메소드 중복(overloading)
가상 메소드
  • 지정어 virtual로 선언된 인스턴스 메소드
  • 파생 클래스에서 재정의해서 사용할 것임을 알려주는 역할
    • new : 객체 형에 따라 호출
    • override : 객체 참조가 가리키는 객체에 따라 호출
봉인 메소드
  • 수정자가 sealed로 선언된 메소드
  • 파생 클래스에서 재정의를 허용하지 않음
  • 봉인 클래스 - 모든 메소드는 묵시적으로 봉인 메소드
추상 클래스
  • 추상 메소드를 갖는 클래스
    • 실질적인 구현을 갖지 않고 메소드 선언만 있는 경우
  • 구현되지 않고, 단지 외형만을 제공
    • 추상 클래스는 객체를 가질 수 없음
    • 다른 외부 클래스에서 메소드를 일관성있게 다루기 위한 방법 제공
    • 다른 클래스에 의해 상속 후 사용 가능
  • abstract 수정자는 virtual 수정자의 의미 포함
    • 추상 클래스를 파생 클래스에서 구현
      • override 수정자를 사용하여 추상 메소드를 재정의
      • 접근 수정자 항상 일치
메소드 설계
  • 메소드를 파생 클래스에서 재정의하여 사용
    • C# 플로그래밍에 유용한 기능
    • 베이스 클래스에 있는 메소드에 작업을 추가하여 새로운 기능을 갖는 메소드 정의 - base 지정어 사용
다형성
  • 적용하는 객체에 따라 메소드의 의미가 달라지는 것
  • C# 프로그래밍 - virtualoverride의 조합으로 메소드 선언