2016-06-27 3 views
1

Скажем, если у меня естьРеализация интерфейса со свойством, который является производным

interface ISomething 
{ 
    Shape Entity { get; set; } 
} 

и

public class Shape 
{ } 

public class Circle : Shape 
{ } 

public class Square : Shape 
{ } 

Как я могу достичь чего-то к эффекту:

public class CircleEntity : ISomething 
{ 
    Circle Entity { get; set; } 
} 

public class SquareEntity: ISomething 
{ 
    Square Entity { get; set; } 
} 

С CircleEntity и SquareEntity не реализует Entity как тип Shape точно.

ответ

5

Используя generic interface, вы можете создать переменную типа Entity, которая может быть определена на производных типах.

interface ISomething<T> where T:Shape 
{ 
    T Entity { get; set; } 
} 

public class CircleEntity : ISomething<Circle> 
{ 
    Circle Entity { get; set; } 
} 

public class SquareEntity: ISomething<Square> 
{ 
    Square Entity { get; set; } 
} 
+0

Не могли бы вы объяснить, как это решает проблему? Как вы объявляете переменную какого-либо типа интерфейса, который может содержать CircleEntity или SquareEntity: –

+0

@FerdinandSwaters, добавлено немного больше описания –

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