Известный Болтун
Зарегистрирован: 11 April 2007
Сообщения: 723
Примеры кода: 0
|
Re: [dev] octalforty Waffle -- форум |
21 February 2008 16:51 |
|
|
|
|
C...R...a...S...HА у Вас получается наоборот.
сначала вы скрываете конкретную реализацию, а потом динамически пытаетесь ее получить.
Ну как вам будет угодно.
Вот живой пример кода. ReferenceItemConverterBase -- базовый класс для классов-конвертеров, преобразующих объекты из одной объектной модели (той, которая "богатая" -- со связями, коллекциями и пр.) в объекты, предназначенные для сериализации в XML (то есть, совершенно плоские и неприметные). Convert() -- метод, оперирующий неким абстрактным объектом и умеющий работать с общими свойствами таких объектов.
public abstract class ReferenceItemConverterBase
{
private void Convert(IBusinessObject businessObject, ReferenceItem referenceItem)
{
referenceItem.ID = businessObject.ID;
if(businessObject is IBusinessObjectWithNames)
{
IBusinessObjectWithNames businessObjectWithNames =
(IBusinessObjectWithNames)businessObject;
referenceItem.RussianName = businessObjectWithNames.RussianName;
referenceItem.EnglishName = businessObjectWithNames.EnglishName;
} // if
if(businessObject is IBusinessObjectWithStandardKey)
{
IBusinessObjectWithStandardKey businessObjectWithStandardKey =
(IBusinessObjectWithStandardKey)businessObject;
referenceItem.StandardKey = businessObjectWithStandardKey.StandardKey;
} // if
}
}
Например, есть у нас объект GlobalMeal (тип питания; мы тут в туризме вовсю), который не реализует IBusinessObjectWithStandardKey (просто потому что нет в этом смысла), а есть еще Currency, который как раз таки реализует IBusinessObjectWithStandardKey, и свойство StandardKey возвращает ISO-код валюты. Конвертеры и для того, и для другого класса наследуются от ReferenceItemConverterBase, который совершенно спокойно обрабатывает оба типа объектов.
|
|