2015-03-06 3 views
0

Два класса: A & B, каждый из которых имеет свойство MyProp.Внесите типизированное ограниченное имущество

Свойство MyProp объекта A может быть только типа A. Свойство MyProp B может быть типа A или B.

Чтобы реализовать это, я подумал о создании интерфейса IBase, содержащего свойство MyProp типа IBase и сделавшего A & B реализовать его.

Проблема в этом случае заключается в том, что A может иметь MyProp типа B, поэтому это не вариант.

Я могу удалить свойство MyProp из интерфейса и создать свойство типа A в A и IBase в B, но я считаю, что это не подходящее решение, потому что оба типа имеют свойство MyProp, которое работает одинаково, поэтому я чувствую, что свойство должно быть обработано выше в иерархии.

Я думал также о родовом абстрактном базовом классе, которые имеют свойство MyProp своего родовой типа, но для типа B общего типа будет бесконечно рекурсивный типом:

ABase<ABase<ABase<...>>> 

Есть правильный способ добиться этого в C#?

Edit: изменил имя свойства, так что нет никакой путаницы больше

+0

Я думаю, что вы пытаетесь сделать это множественное наследование, которое запрещено в C# – Sphaso

+0

@Sphaso Когда я говорю о родителе, это имя свойства, а не класс родителя – nkoniishvt

+1

Да, но одно свойство может иметь только один тип. Даже при использовании дженериков вы не можете иметь одно свойство, тип которого ограничен двумя типами. – Sphaso

ответ

1

Я не думаю, что эта проблема может быть решена красиво «во время компиляции», так сказать. Но я думаю, что вы должны сделать некоторого общего предка для A и B, сделать оба свойства этого типа и правильность типа действия в установщиках свойств, создав исключение при некорректном обнаружении типа.

Если ваш код правильно протестирован, факт, что неправильное назначение может быть обнаружен только во время выполнения, не имеет большого значения.

+0

Спасибо. Это решение кажется мне правильным способом достижения этого (возможно, я ошибаюсь) – nkoniishvt

+0

@nkoniishvt Добро пожаловать;) –

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