다음을 통해 공유


섀도링과 오버라이딩의 차이점(Visual Basic)

기본 클래스에서 상속되는 클래스를 정의할 때 파생 클래스에서 하나 이상의 기본 클래스 요소를 다시 정의하려는 경우가 있습니다. 이 목적을 위해 그림자 및 재정의를 모두 사용할 수 있습니다.

비교

그림자 및 재정의는 파생 클래스가 기본 클래스에서 상속될 때 사용되며 선언된 요소 하나를 다른 요소로 다시 정의합니다. 그러나 둘 사이에는 상당한 차이가 있습니다.

다음 표는 섀도잉과 오버라이딩을 비교합니다.

비교 지점 숨김 대체
목적 파생 클래스에서 이미 정의한 멤버를 도입하는 후속 기본 클래스 수정으로부터 보호합니다. 동일한 호출 시퀀스1을 사용하여 프로시저 또는 속성의 다른 구현을 정의하여 다형성을 달성합니다.
다시 정의된 요소 선언된 모든 요소 형식 프로시저(Function, Sub또는) 또는 Operator속성만
요소 다시 정의 선언된 모든 요소 형식 호출 시퀀스1이 동일한 프로시저 또는 속성만
재정의 요소의 액세스 수준 모든 액세스 수준 재정의된 요소의 액세스 수준을 변경할 수 없음
재지정 요소의 가독성 및 쓰기 가능성 모든 조합 재정의된 속성의 가독성 또는 쓰기 가능 여부를 변경할 수 없음
재정의 제어 기본 클래스 요소는 그림자를 적용하거나 금지할 수 없습니다. 기본 클래스 요소는 MustOverride, NotOverridable, 또는 Overridable를 지정할 수 있습니다.
키워드 사용량 Shadows파생 클래스에서 권장됩니다. ShadowsShadows 또는 Overrides가 지정되지 않으면 2로 가정합니다. Overridable 또는 MustOverride 기본 클래스에 필요, Overrides 파생 클래스에 필요
자신의 파생 클래스에서 파생된 클래스에 의한 요소 다시 정의 상속 추가로 파생된 클래스에 의해 상속된 그림자 요소; 그림자로 인해 여전히 숨겨진 요소3 추가적으로 파생된 클래스에 의해 상속받은 요소를 재정의합니다. 재정의된 요소는 계속해서 재정의됩니다.

1호출 시퀀스는 요소 형식(Function, Sub, Operator또는 Property), 이름, 매개 변수 목록 및 반환 형식으로 구성됩니다. 프로시저를 속성으로 재정의하거나 다른 방법으로는 재정의할 수 없습니다. 한 종류의 프로시저(FunctionSub또는Operator)를 다른 종류로 재정의할 수 없습니다.

2Shadows 또는 Overrides를 지정하지 않으면, 컴파일러가 사용하고자 하는 재정의 종류를 확실히 할 수 있도록 경고 메시지를 표시합니다. 경고를 무시하면 섀도링 메커니즘이 사용됩니다.

3 추가 파생 클래스에서 섀도링 요소에 액세스할 수 없는 경우 섀도는 상속되지 않습니다. 예를 들어 섀도 요소를 선언 Private하는 경우 파생 클래스에서 파생된 클래스는 섀도링 요소 대신 원래 요소를 상속합니다.

지침

일반적으로 다음과 같은 경우 재정의를 사용합니다.

  • 다형 파생 클래스를 정의하고 있습니다.

  • 컴파일러에서 동일한 요소 형식과 호출 시퀀스를 적용하는 것이 안전합니다.

일반적으로 다음과 같은 경우 그림자를 사용합니다.

  • 기본 클래스가 수정될 가능성을 염두에 두고 동일한 이름의 요소를 정의할 수 있을 것으로 예상합니다.

  • 요소 형식을 변경하거나 시퀀스를 호출하는 자유를 원합니다.

참고하십시오