Честно говоря, я не был уверен, как сформулировать этот вопрос, так что простите меня, если фактический вопрос - это не то, что вы ожидали от названия. С# - это первый статически типизированный язык, который я когда-либо программировал, и этот аспект этого был для меня до сих пор абсолютной головной болью. Я уверен, что у меня просто нет хорошей справки по основным идеям, связанным с тем, как создать систему в статически типизированной манере.
Вот приблизительное представление о том, что я пытаюсь сделать. Предположим, что у меня есть иерархия классов:
abstract class DataMold<T>
{
public abstract T Result { get; }
}
class TextMold : DataMold<string>
{
public string Result => "ABC";
}
class NumberMold : DataMold<int>
{
public int Result => 123
}
Теперь предположим, что я хочу составить список элементов, в которых элементы могут быть любыми формами, и я могу получить свойство Result
каждого элемента в цикле foreach
следующим образом:
List<DataMold<T>> molds = new List<DataMold<T>>();
molds.Add(new TextMold());
molds.Add(new NumberMold());
foreach (DataMold<T> mold in molds)
Console.WriteLine(mold.Result);
Как вы, наверное, уже знаете, это не работает. Из того, что я читал в своих поисках, это связано с тем, что я не могу объявить список типа DataMold<T>
. Каков правильный способ сделать что-то подобное?