我有一个通用类型:
public class Source<T> where T : ISomeInterface<X> //...
现在,我的问题是,我真的不想修改Source<T>
to Source<T,X>
,但我想在源内使用X.
有可能吗?
答案 0 :(得分:10)
不,没有办法表达这一点。如果您希望能够在X
中引用Source
,则必须是类型参数。
请记住,T
可以实施(比方说)ISomeInterface<string>
和 ISomeInterface<int>
。在这种情况下X
会是什么?
答案 1 :(得分:1)
如果您使用的是泛型类型,则告诉编译器您在创建具体实例时将提供实际类型。 使用您的代码,如果您尝试执行
Source<string> s = new Source<string>();
编译器会知道T实际上是类中的一个字符串,但是你没有给编译器任何关于X的信息。 但是,根据您要执行的操作,您可以使用与“裸”类型约束的“接口”关系而不是使用继承。 以下代码可以编译,例如:
public interface ISomeInterface<X>
{
void SomeMethod(X someparam);
}
public class Source<T>
{
public void MyMethod<X>(ISomeInterface<X> someConcreteInstance) where X:T
{
}
}