2012-03-03 7 views
1

전에 비슷한 Question을 요청했지만 이번에는 약간 확장되었습니다. 이미 물어 본 것은 SomeProperty을 'new'연산자를 사용하여 파생 된 클래스에서 재정의하는 것입니다.파생 클래스의 재정의 속성

하지만 지금은 같은 시나리오에서 다시 생각하지만,

내가 파생 클래스에서 SomeProperty을 설정하는 동안 기본 클래스 의 기본 동작을 실행해야 할이 시간.

나는 파생 클래스에서 SomeProperty을 설정하는 동안 기본 클래스의 코드 세트를 실행하기 위해 내 기본 클래스에서 파생되는 사용자를 강제해야한다. Template Pattern을 사용하여 이미 시도했지만 Windows Phone Control Library의 Custom Control에 바인딩해야합니다. 그래서 내 기본 클래스는 abstract 클래스가 될 수 없습니다. 따라서 기본 클래스에 공통 기능을 지정하고 파생 클래스에서 변수를 설정하는 동안 기능이 적용되는지 확인할 수 없습니다.

파생 클래스에서 속성을 설정하는 동안이 코드 (또는 종류의 규칙)를 적용 할 수있는 다른 방법이 기본 클래스에서 실행됩니까?

편집 : 기본 클래스에서 파생되는 사람은 기본 클래스의 특정 동작을 호출 할 것으로 예상되지 않습니다. 나는 부름을 강요 할 필요가있다. 내가 제대로 질문을 이해 해요 경우

+---------------+ 
    | UIElement  | 
    |---------------|       +----------------------+ 
    | ...   |       | My Windows Application 
    | SomePropert{} |       |----------------------| 
    | //Force to |<---+      |+--------------------+| 
    | //to xcute this code      ||MyUserControl  || 
    +---------------+ |      ||--------------------|| 
     +--------------+-----+     ||     || 
     |FrameWorkElement |     |+--------------------+| 
     |--------------------|     |//Want to use   | 
     | ...    |<-+    |// SomeProperty;  | 
     +--------------------+ |    |      | 
        +-----------+-+   |      | 
        |Control  |   |      | 
        |-------------|   +----------------------+ 
        | ...  |<---+ 
        +-------------+ | 
          +-----------+---+ 
          | UserControl | 
          |---------------|<---+ 
          | ...   | | 
          +---------------+ | 
             +----------+-------+ 
             | MyUserControl | 
             |------------------| 
             | SomeProperty{} | 
             | //Want to override 
             | //Setting this here| 
             |//should make sure| 
             |//base class code | 
             |//gets executed | 
             +------------------+ 
+0

속성에서 가능한 한 동일한 방법으로 'new'를 사용할 수 있습니다. 약간의 반사를 사용하여 기본 클래스 내부에 도달하고 멤버를 찌를 수도 있습니다. 리플렉션 및 캐싱 대리인을 사용하는 것이 좋습니다. – IAbstract

답변

1

, 당신은 원래의 방법뿐만 아니라 실행되는 것을 보장하기 위해 base 키워드를 사용할 수 있습니다. 예 :

public new void Method() 
{ 
    DoMyCustomStuff(); 
    base.Method(); 
} 
+0

이것은 http://msdn.microsoft.com/en-us/library/ms228387(v=vs.90).aspx에서 제공됩니다. – mozillanerd

+0

사실 나는 기본 클래스에서 파생 된 사용자가 명시 적으로 호출하도록 기대할 수 없습니다. 기본 클래스의 동작을 암시 적으로 (force) 호출해야합니다. – Ajai

관련 문제