2009-07-09 4 views
6

메서드/함수 재정의가 기본 클래스에서 구현 된 파생 클래스의 구현을 다시 정의한다는 것을 알고 있습니다.ASP.NET 용 C#에서 메서드를 재정의 할 때 기본 클래스 구현을 호출해야합니까?

이제 어떻게 나를 혼란 내가 ASP.NET과 같은 CreateChildControls()에서 클래스를 오버라이드 (override)하는 경우입니다, VS2008 자동 생성 (나는 특별한 이유 무작위로 그것을 집어) : 충분히

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

좋은, 기본 구현 그냥 기본 클래스 'CreateChildControls()을 호출합니다. 내가, 내가 어떻게 base.CreateChildControls() 알 수 없기 때문에, 일부 코드를 실행하려면

그래서 나는이 수행해야합니다

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

또는 어떤 base.CreateChildControls() 모두 무시하고 단지

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

답변

11

있다고 할 너까지. 일반적으로, 기본 클래스 메소드를 호출하기를 원한다면 (특히 제어 할 수없는 클래스에서는 제어 할 수없는) 많은 것들을 할 수 있기 때문입니다. 그러나, 여러분이 매우 자신감이 있다면 기본 클래스 "stuff"가 필요하지 않거나 (원할) 호출을 제거 할 수 있습니다.

+0

당신이 관여하지 않는 기본 클래스를 덮어 쓸 수 있다는 것은 정말로 놀라운 일입니다. – Matt

+7

나는 그 자유를 가져야 만한다. 내가 당신 자녀이기 때문에, 당신처럼 모든 것을하고 싶지는 않습니다. 때로는 세상에서 나가서 나만의 방식으로 일해야합니다. 당신이 당신의 구현을 강요한다면 당신은 과보호 부모가 될 것입니다. :) –

+0

내 사용자 지정'Control'에서 재정의 할 때 기본 클래스를 호출한다는 사실부터 시작하여'OnXxxx' 재정의와 관련하여 일반적으로 파생 메서드의 끝 부분에서'base.OnXxxx'를 호출했습니다. 파생 된 메소드의 시작 또는 끝에서'base.CreateChildControls'를 호출할지 여부에 대한 경험 법칙이 있습니까? – superjos

3

단순히 동작을 바꾸거나 동작을 추가할지 여부에 대한 질문입니다.

CreateChildControls와 같은 경우에는 기본 클래스에 대한 호출을 유지하게됩니다.

1

원하는 작업에 따라 다릅니다. base.CreateChildControls() 메서드를 호출하고 메서드가 호출되기 전이나 후에 사용자 지정 작업을 수행하려면이 작업을 수행 할 수 있습니다.

CreateChildControls가 호출 될 때 일어나는 일을 완전히 제어하려는 경우이 호출을 모두 무시하면됩니다.

사실 기본적으로 제공되는 사실은 약간의 안내입니다. 당신이 또는 완벽한 기본 구현을 대체 ... 대부분의 경우이 기본 구현을 호출해야 원한다면

0

이 달려있다 (당신은 확실히 CreateChildItems 방법의 경우에 그것을해야 ...)

0

template method 패턴을 살펴볼 수 있습니다. 라이브러리 클래스가 구현되는 방식에 대해 아무 것도 할 수는 없지만 작성하는 코드가 올바르게 사용되도록하는 데 도움이 될 수 있습니다.