这就是我想在 C# 中做的事情(在class Helper
- 没有泛型参数的情况下),
List<AbstractClass<dynamic>> data;
public void Add<T>(AbstractClass<T> thing)
{
this.data.Add((AbstractClass<dynamic>) thing);
}
这个助手类将接受并使用AbstractClass<>
对象并返回AbstractClass<>
特定的泛型类型。AbstractClass<T>
包含许多返回T
/接收的函数,T
如public T Invoke()
. 对于 Helper 类T
不能事先知道。该Add<T>(.. thing)
函数不在 type 类中T
。要在 Helper 类的函数中像这样使用,
foreach(var c in data.Where(x => ...))
{
// public T Invoke() { ... } function within AbstractClass<T>
var b = c.Invoke();
// logic
}
这也失败了,
List<AbstractClass<object>> data;
public void Add<T>(AbstractClass<T> thing)
{
this.data.Add((AbstractClass<object>) thing);
}
现在我想我可以拥有,
List<dynamic> data; // or List<object> data;
public void Add<T>(AbstractClass<T> thing)
{
this.data.Add(thing);
}
但我想要 List 命名数据只有类型元素的约束
ConcreteClass : AbstractClass<OtherClass>
所以我们会知道有一个public T Invoke()
函数,但我们不知道它返回什么。这有助于避免错误拼写 Invocke 和只在运行时知道的错误。
我想避免dynamic
每次调用返回泛型类型 T 的函数