본문 바로가기
개발

[C#]메서드 숨기기

by 비손 2008. 9. 27.
이번에는 책에도 많이 나오고 다들 알고는 있지만 잘 쓰지 않아서 가끔 실전에서 생각이 나지 않을 법한 것을 적어보겠습니다.

메서드를 숨긴다? 무슨 말일까요?
일단! 객체지향 언어인 C#에서 클래스를 상속할 수 있다는 것은 다들 아시죠?
Form 클래스를 예로 들면..

public class NewForm : System.Windows.Forms.Form
{
}

이런 식으로 상속할 수 있습니다.
이 경우 Form 클래스에 정의된 다양한 메서드를 사용할 수 있죠.

new NewForm().Show(); <-이렇게 내가 정의하지 않은 Show()메서드를 사용할 수 있습니다.

ToString() 메서드도 그냥 사용할 수 있지만.. 뭔가 바꿔보고싶네요.. 그럴 때는 Override를 쓰면 됩니다.

public override string ToString() { return "야호!"; }

이렇게 Override(재정의)를 하면 내가 원하는대로 메서드를 바꿀 수 있습니다.

그런데 문제가 있네요.. Show()나 Hide()같은 메서드 몇 개는 Override가 안됩니다 ㅡㅡ;

아마 sealed 되어 있거나 virtual이 아닌 모양입니다.

virtual 키워드가 적혀있지 않으면 재정의가 안됩니다.
virtual이 적혀서 상속한 메서드를 sealed override 키워드로 재정의 하는 경우에도 하위 클래스에서 사용할 수 없습니다.

뭐~ 여러가지 규칙들이 참 많기도 하군요!

이럴 땐 new 키워드를 이용해서 상위 클래스의 메서드를 숨길 수 있습니다.

public new void Show()

{

내가 원하는 내용

base.Show();

}

이렇게 적으면 Show()메서드를 내 마음대로 꾸밀 수 있겠죠?

Java도 이와 개념이 비슷합니다만, 약간의 차이가 있습니다. sealed와 virtual 같은 것에서요~ 책에보면 자세히 나와있을 거예요 아마 ^^