是否可以在c#中使用“隐式”泛型类型参数

时间:2011-02-21 11:12:42

标签: c# .net generics

我有一个通用类型:

public class Source<T> where T : ISomeInterface<X> //...

现在,我的问题是,我真的不想修改Source<T> to Source<T,X>,但我想在源内使用X.
有可能吗?

2 个答案:

答案 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
    {

    }        
}