2008-10-31 6 views
1

나는 UserControl에서 상속 받고 많은 클래스를 파생시키는 데 사용되는 추상 기본 클래스를 사용합니다.파생 된 컨트롤 만들기

내가 가진 문제는 생성 된 함수 InitializeComponent()이 클래스의 각 레이어에 대해 호출되도록 우아하게 보장하는 방법입니다.

그래서 (추상) 기본 클래스에는 모든 자식에 대해 공유되는 여러 컨트롤이 있습니다. 자식 클래스의 인스턴스를 만들 때 기본 생성자가 먼저 호출하지만 우아 내가 궁금하네요

public DerivedClass() { 
    InitializeComponent(); 
} 

각 파생 클래스 효과적으로 같은 생성자를 구축 할 필요없이 파생 InitializeComponent()를 호출 할 수있는 방법이 있습니다 각 파생 클래스에서 자신을 반복하는 것보다 효율적인 방법이 있다면? 이 (디버그) 기본 생성자에서 때

효과, 나는 그것이 파생 인스턴스의 것을 알고는 (추상) 기본 클래스는 결국

Derived.InitializeComponent(); 

라고 수 있도록하고 싶습니다. ..

답변

1

공공 DerivedClass() : 기본() {}

이, 당신은 InitializeComponents 호출해야하는 경우 일을 할 수있는 마법의 방법은, 일반적으로이 없다, 당신의 기본 생성자를 호출 할 것이다 당신은 아마거야 직접 전화해야합니다.

0

InitializeComponent를 가상으로 만들고 모든 하위 클래스에 대해이를 재정의하면 기본 클래스는 파생 생성자에서 기본 생성자를 호출하면 각 하위 클래스에 대해 올바른 메서드를 호출합니다.

+1

조금 위험합니다 ... 기본 클래스 생성자는 가장 많이 파생 된 가상 구현을 호출합니다. 즉, 서브 클래스의 InitializeComponent 메소드는 서브 클래스의 생성자 자신보다 먼저 호출됩니다. 즉, 서브 클래스 생성자에 논리를 추가하는 모든 사용자를위한 시한 폭탄입니다. –