Я пытаюсь создать список объектов разных типов, производных от одного и того же родителя, и получить доступ к его настраиваемым свойствам.
Это мои классы:
abstract class Signal
{
}
abstract class Signal<T>:Signal
{
public T Value { get ; set; }
public Signal(T value)
{
Value = value;
}
}
class scalar_signal : Signal<int>
{
public scalar_signal(int value):base(value)
{
}
}
class array_byte_signal: Signal<byte[]>
{
public array_byte_signal(byte[] value):base(value)
{
}
public override string ToString()
{
return string.Join("; ", Value);
}
}
А это моя программа:
static void Main(string[] args)
{
var signals = new List<Signal>();
signals.Add(new scalar_signal(3));
signals.Add(new array_byte_signal(new Byte[] { 0, 1 }));
foreach (var signal in signals)
{
Console.WriteLine(signal.Value); //Compilation error: Value is not defined in Signal
}
}
Как видите, я могу создать список различных типов сигналов, но не могу получить доступ к их свойствам.
Мне действительно нужно иметь только один список (или любую другую коллекцию) со всеми моими сигналами, потому что позже их будет легче обрабатывать. типа T. T также может быть классом, представляющим комплексное число, матрицу и т. д. c.
Я читал о ковариации и контравариантности, но не понимаю, как это может мне помочь.
Спасибо за вашу помощь.