Я уже просил аналогичный 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 |
+------------------+
Вы можете использовать 'new' по методу так же, как вы можете для свойства. Вы также можете использовать немного отражения, чтобы достичь внутри базового класса и вытолкнуть участников. Я бы рекомендовал использовать делегаты с отражением и кэшированием. – IAbstract