숨기기와 재정의의 차이점(Visual Basic)
기본 클래스에서 상속되는 클래스를 정의할 때 파생 클래스에서 하나 이상의 기본 클래스 요소를 재정의하려는 경우가 있습니다. 이런 경우에 숨기기와 재정의를 모두 사용할 수 있습니다.
비교
숨기기와 재정의는 둘 다 파생 클래스가 기본 클래스에서 상속될 때 사용되며, 둘 다 선언된 요소 하나를 다른 요소로 재정의합니다. 그럼에도 둘 사이에는 상당한 차이가 있습니다.
숨기기와 재정의를 비교한 내용이 다음 표에 나와 있습니다.
비교 지점 | 섀도잉 | 대체 |
---|---|---|
목적 | 파생 클래스에서 이미 정의한 멤버를 도입하는 후속 기본 클래스 수정을 막습니다. | 동일한 호출 시퀀스를 통해 프로시저나 속성의 다른 구현을 정의함으로써 다형성을 가능하게 합니다.1 |
재정의된 요소 | 선언된 모든 요소 형식 | 하나의 프로시저(Function , Sub , 또는 Operator )나 속성만 |
요소 재정의 | 선언된 모든 요소 형식 | 호출 시퀀스가 동일한 하나의 프로시저나 속성만1 |
재정의 요소의 액세스 수준 | 모든 액세스 수준 | 재정의된 요소의 액세스 수준을 변경할 수 없음 |
재정의 요소의 가독성 및 쓰기 가능성 | 모든 조합 | 재정의된 속성의 가독성 또는 쓰기 가능성을 변경할 수 없음 |
재정의 제어 | 기본 클래스 요소는 숨기기를 적용하거나 금지할 수 없습니다. | 기본 클래스 요소가 지정할 수 있는 것은 MustOverride , NotOverridable , 또는 Overridable 입니다. |
키워드 사용량 | Shadows 는 파생 클래스에 권장, Shadows 와 Overrides 중 지정된 것이 없는 경우 Shadows 로 가정합니다.2 |
Overridable 또는 MustOverride 가 기본 클래스에 필요, Overrides 는 파생 클래스에 필요합니다. |
파생 클래스에서 파생되는 클래스를 통해 요소의 재정의 상속 | 추가 파생 클래스에서 상속된 숨기기 요소, 숨겨진 요소는 계속 감춰진 상태3 | 추가 파생 클래스에서 상속된 재정의 요소, 재정의된 요소는 계속 재정의된 상태 |
1호출 시퀀스는 요소 형식(Function
, Sub
, Operator
또는 Property
), 이름, 매개 변수 목록, 반환 형식으로 구성됩니다. 프로시저를 속성으로 재정의하거나 속성을 프로시저로 재정의할 수 없습니다. 어떤 종류의 프로시저(Function
, Sub
또는 Operator
)를 다른 종류로 재정의할 수 없습니다.
2Shadows
또는 Overrides
를 지정하지 않은 경우 컴파일러에서 경고를 표시하여 사용할 재정의 종류를 정하도록 도와줍니다. 경고를 무시하면 숨기기 메커니즘이 사용됩니다.
3 추가 파생 클래스에서 숨기기 요소에 액세스할 수 없는 경우, 숨기기가 상속되지 않습니다. 예를 들어, 숨기기 요소를 Private
으로 선언하는 경우, 파생 클래스를 통해 파생되는 클래스는 숨기기 요소 대신 원래 요소를 상속합니다.
지침
일반적으로 재정의를 사용하는 경우는 다음과 같습니다.
다형 파생 클래스를 정의할 경우.
컴파일러에서 동일한 요소 형식과 호출 시퀀스를 안전히 적용하고자 하는 경우.
일반적으로 숨기기를 사용하는 경우는 다음과 같습니다.
기본 클래스가 수정되었을 것으로 예상되어 사용자와 같은 이름을 통해 요소를 정의할 수 있을 것 같은 경우.
요소 형식이나 호출 시퀀스를 자유롭게 변경하려는 경우.
참고 항목
.NET