在C#中,假设我有两个接口:Foo<in P, out C>
和Bar<C>
。另外假设我有两个Bar<int>
实现:BarOne
和BarTwo
。
我想在Baz()
上添加方法Bar<C>
,返回类似于:
public interface Bar<C> {
// other methods, some of which use C as a type
// then:
Foo<..., C> Baz ();
}
public class BarOne : Bar<int> {
// other methods...
private class FooImplOne : Foo<string, int> {
// stuff here
}
Foo<string, int> Baz() {
return new FooImplOne();
}
}
public class BarTwo : Bar<int> {
// other methods...
private class FooImplTwo : Foo<long, int> {
// stuff here
}
Foo<long, int> Baz() {
return new FooImplTwo();
}
}
但我对Foo
接口定义中Baz
返回Bar
的第一个参数没有任何说法。在java中,我使用Foo<?, C>
作为Bar
定义中的返回类型 - 我在C#中做什么?
我发现2008 stackoverflow answer告诉我“在C#中你不能这样做,需要为只有通用参数Foo<P, C>
的{{1}}定义一个基本接口并返回那个基类型代替“。
现代,2016 C#仍然如此吗?
答案 0 :(得分:4)
在C#中,您还可以使Method成为具有该方法本地不同类型参数的通用方法
e.g。
public interface Bar<C> {
Foo<T, C> Baz<T>();
}
答案 1 :(得分:1)
怎么样
public interface Bar<T1,T2> {
Foo<T1, T2> Baz ();
}
即在
中传递两个Foo类型的参数答案 2 :(得分:1)
在Java中,<?>
是<? extends Object>
的简写。这意味着尝试使用它的代码只知道它是一个对象。 C#中的等价物只是使用<object>
,所以你的界面就是
Foo<object, C> Baz ();