Ваш синтаксис неверен:
class ShapeHandler<Shape>
делает ваш ShapeHandler
универсальным, но не ограничивает его Shape
, фактически вызывает параметр Type "Shape".
То, что вы хотите сделать, это:
public class ShapeHandler<T> where T: Shape
{
private T MyShape;
public double GetArea()
{
return MyShape.Area;
}
}
Это означает, что ваш ShapeHandler
может быть создан только с типом (T
) Shape
(или с чем-то, что наследуется от Shape
)
Одна вещь, которую нужно задать себе:
Зачем вам это нужно?
Имеет ли смысл использовать дженерики, когда вы можете просто использовать параметр типа Shape
?
Исходя из ваших правок о регистрации определенных свойств, учтите следующее:
У вас есть два объекта, форма и квадрат:
var square = new Square() { Area = 4.0, SideLength = 2 };
var shape = new Shape() { Area = 3.0 };
И вы хотите распечатать свойство Area (оба они технически Shape
, поэтому они оба имеют свойство Area
. Вы можете создать метод, который принимает параметр Shape
, и затем вы можете получить доступ ко всему, что Форма имеет:
public static void LogArea(Shape shape)
{
Console.WriteLine(shape.Area);
}
Я сделал скрипку, чтобы продемонстрировать здесь