В дочернем классе, как получить разные типы для определенного свойства? - PullRequest
1 голос
/ 12 сентября 2011

У меня есть следующие классы:

class BusinessBase {     }

class BusnessChild: BusinessBase {     }

class VisualBase
{
     BusinessBase BusinessObject {get; set;}
}

class VisualChild: VisualBase
{
    // I'm instantiate an instance of BusinessChild and 
    // assign it to BusinessObject property
}

В каждом визуальном дочернем экземпляре есть объект BusinessChild экземпляра соответствующего типа.

Я имею в виду, что они BusinessChild1 и BusinessChild2 для VisualChild1 и VisualChild2, и все они унаследованы от VisualBase и BusinessBase.


Вопрос:

Есть ли способ получить экземпляр BusinessChild из VisualChild без создания нового свойства в дочернем классе? потому что я хочу иметь дело со всеми дочерними экземплярами из родительской ссылки.

То, что я до сих пор думал, - это создание универсального метода с именем GetBusinessObject<T> и передача ему соответствующего бизнес-типа, , но мне интересно, можно ли каким-то образом сделать это автоматически (без передачи типа).

Пожалуйста, спросите меня для получения дополнительной информации, если она не ясна.

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Один очевидный подход состоит в том, чтобы сделать VisualBase универсальным:

class VisualBase<T> where T : BusinessBase
{
    T BusinessObject {get; set;}
}

class VisualChild1 : VisualBase<BusinessChild1>
{
    ...
}
0 голосов
/ 12 сентября 2011

Вы можете украсить производный класс с помощью пользовательского атрибута:

[BusinessObjectTypeAttribute(typeof(VisualChild))]
class VisualChild: VisualBase
{
    // I'm instantiate an instance of BusinessChild and 
    // assign it to BusinessObject property
}

Затем вы считываете этот атрибут с помощью GetCustomAttributes(), создаете экземпляр с Activator.CreateInstance() и передаете ему тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...