2012-03-03 3 views
1

Я уже просил аналогичный Question, но на этот раз его немного расширен. Я уже просил переопределить SomeProperty в производном классе, для которого в ответе использовался оператор «новый».Свойство переопределения в производном классе

Но теперь я снова в том же сценарии, но

на этот раз я должен выполнить поведение по умолчанию в базовом классе при установке SomeProperty в производном классе.

Я должен заставить пользователя, который производный от моего базового класса для выполнения набора кода в базовом классе при установке SomeProperty в производном классе. Я уже пробовал с шаблоном шаблона, но мне нужно привязать его к пользовательскому элементу управления в моей библиотеке управления Windows Phone. Поэтому мой базовый класс не может быть классом 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

Это jives с http://msdn.microsoft.com/en-us/library/ms228387(v=vs.90).aspx. – mozillanerd

+0

На самом деле я не могу ожидать, что пользователь, получающий базовый класс, вызовет его явно. Мне нужно называть это неявным (force), поведение в базовом классе. – Ajai

Смежные вопросы