【发布时间】:2016-05-06 18:20:36
【问题描述】:
有没有办法让类中的泛型字段专门用于构造函数中的特定类型?
例如:
class concreteClass1
{
private int a;
public concreteClass1( int a)
{
this.a = a;
}
}
class concreteClass2
{
string b;
public concreteClass2(string b)
{
this.b = b;
}
}
class A<T>
{
private T field;
public A(int x)
{
field = new concreteClass1(x); //error here CS0029
}
public A(string y)
{
field = new concreteClass2(y); //error here CS0029
}
}
所以T 可以是concreteClass1 或concreteClass1,它们各自的ctors 会有不同的签名。
【问题讨论】:
-
有人写信时你想做什么:
new A<concereteClass2>(42);? -
这似乎是XY Problem。你想做什么需要你这样做?
-
通用代码应该是通用的。泛型代码的全部意义在于,无论使用什么特定类型,它都可以工作。事实上,你的代码没有,事实上只有在使用一种类型时才有效,这意味着它实际上不是泛型的,所以你不应该使用泛型。
-
@kuhaku 这听起来像
Electric和Fuel应该有一个共同的接口或基类。不确定您在做什么,这甚至要求它不仅仅是一个简单的枚举。 -
@kuhaku 那你的 oo 一般是有缺陷的。
标签: c# .net generics constructor field