嗨,我有以下场景,我将尽力解释,如果这是一个愚蠢的问题,请提前预测.我有两个接口(出于本示例的目的,它们中没有任何内容)
public interface interfaceA {}
public interface interfaceB: interfaceA {}
Run Code Online (Sandbox Code Playgroud)
还有2节课
public classA<interfaceA> {}
public classB: classA<interfaceB> { }
Run Code Online (Sandbox Code Playgroud)
现在还有其他地方我有一个接受泛型类型作为参数的方法:
public static void DoSomething( ClassA<interfaceB> p_val ) {}
Run Code Online (Sandbox Code Playgroud)
好的,我在创建对象时使用这些类.
ClassB obj1 = new ClassB();
ClassA<interfaceA> obj2 = new ClassA<interfaceA>();
Run Code Online (Sandbox Code Playgroud)
好吧,当我将obj1传递给DoSomething()时,当我尝试将obj2传递给我的DoSomething()方法时,我得到一个编译错误,说它无法从interfaceA转换为interfaceB.
这种意义有道理,因为在我的方法中,泛型param类型是显式的interfaceB.但是,如果我希望该方法接受两种泛型类型(obj1和obj2),我该怎么办?希望这是有道理的.
怎么样
public static void DoSomething<T>( ClassA<T> p_val)
{}
Run Code Online (Sandbox Code Playgroud)
无论类型参数是什么,它都接受ClassA的任何实例.或者,如果你只希望接受的情况下ClassA<T>,当T是InterfaceA还是其子类,你可以这样做:
public static void DoSomething<T>( ClassA<T> p_val) where T : InterfaceA
{}
Run Code Online (Sandbox Code Playgroud)