2012-05-09 3 views
1

멍청한 짓이나이 질문에 대한 답을 잘 모르겠지만 좋은 대답을 찾는데 어려움을 겪고 있습니다.데이터로 클래스를 상속하는 가장 좋은 방법은 무엇입니까?

단어로 내 질문을 설명하려면 다음과 같습니다. Init 프로그램은이 프로그램의 모든 데이터와 정보의 소스 인 시작시 "엔진"이라는 프로그램이 있습니다. 이제는 새로운 클래스를 작성하면 클래스가 생성 될 때 포함시켜야합니다. 유일한 있도록 부모에 이것을 가지고 수업과 관련하여 내가 알고있는이 그라는 것입니다 : 나는 "부모의 자녀"를 어떻게 활용할 수 있는지 궁금 무엇

public class ClassName(TMEngine engine) 
{ 
...... 
} 

이다. FormUserControl을위한 수업을 작성하여 부모 클래스가 있으므로 일부 추가 수업을 준비했습니다.

public partial class msgCtrlContainerCtrl : TMUserControl 
{ 
    public msgCtrlContainerCtrl(TMEngine engine) 
    { 
     ...... 
    } 
} 

이것은 WinForms 응용 프로그램이므로 양식에서 엔진을 초기화했지만 엔진에서 생성 된 모든 컨트롤이 동일한 엔진을 사용하고 싶습니다.

는 지금 UserControlUserControl으로 "추가"에 초기화됩니다대로 작동하지 않는 TMUserControl에서 "로드 이벤트"에 엔진을 설정하고, Load 이벤트는이 뒤에 훨씬 더 실행됩니다.

새 컨트롤에 대해 "추가"를 수행 할 때 부모 관계가 아직 초기화되지 않았으므로 컨트롤의 부모를 찾을 수 없습니다.

이 아이디어를 가장 좋은 방법으로 해결하려면 내 확장 UserControl 클래스에서이 엔진을 동기화하는 방법을 여기 TMUserControl이라고 부르거나 그것을 사용하는 모든 클래스에 포함시켜야합니까?

+4

을 당신은 그것의 소리에서 싱글을 찾고 – Servy

+1

http://www.dofactory.com/Patterns/PatternSingleton.aspx –

답변

1

이 같은 것을 찾고 계십니까?

public class TMEngine 
{ 
    private TMEngine() {} 

    private static TMEngine instance;  
    public static TMEngine Instance 
    { 
     get 
     { 
     if (instance == null)    
      instance = new TMEngine();    
     return instance; 
     } 
    } 

    public string GetSomeStringData() 
    { 
     ... 
    } 
} 

이 당신의 엔진이 될 것입니다 ... 그래서 당신은 가서 당신이 원하는 방식으로 구성 할 수 있습니다.
이제 엔진을 사용할 모든 클래스에 대해 초록이 필요합니다.

public abstract class EnginedClass 
{ 
    public static TMEngine Engine { get { return TMEngine.Instance; } }; 
} 

그럼 그냥 그것을 사용하여 클래스를 구현 :

public MyNewClass : EnginedClass 
{ 
    ... 
    public string GetSomeData() 
    { 
     ... 
     return Engine.GetSomeStringData(); 
    } 
    ... 
} 
+0

이것은 단지 그것일지도 모른다! 인스턴스가 있습니다. 그것을 줄 것이다. 감사! –

+0

TMEngine을 명시 적으로 인스턴스화하지 않는 방법에 주목하십시오. 이는 싱글 톤이므로 TMEngine.Instance를 사용하기 시작하면 인스턴스화됩니다. – BeemerGuy

관련 문제