说实话,我不确定该如何表达这个问题,如果实际问题与标题不符,请原谅。C#是我第一次编程的静态类型语言,这方面对我来说一直是一个巨大的头痛。我相当确定我只是没有很好地掌握如何以静态类型方式设计系统的核心思想。
这是我试图做的粗略想法。假设我有一个类的层次结构,如下所示:
这是我试图做的粗略想法。假设我有一个类的层次结构,如下所示:
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
}
现在假设我想制作一个物品清单,其中物品可以是任何类型的模具,并且我可以在foreach
循环中获取每个物品的Result
属性,就像这样:
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);
你可能已经知道,那样做是行不通的。从我在搜索中读到的内容来看,这与我无法声明List为DataMold<T>
类型有关。处理此类问题的正确方法是什么?
interface IDataMold<T>
将作为List<IDataMold<T>>
。 - Austin T Frenchclass TextMold : DataMold<string> { public string Result { get; set; } }
或者只有一个 getter:class TextMold : DataMold<string> { public string Result { get; private set; } }
- Mark Schultheiss