这可能是不可能的,但我想检查是否可以用一种简单的方式表达这样的事情:
// obviously doesn't work
class Foo<T> : IFoo<T1,T2>
where T: Bar<T1,T2>
{
// ...
Baz<T1,T2> getBaz(){...}
}
现在我宣布Foo<T1,T2>
, 但我在语义上不喜欢它,获得约束的唯一方法是也列出 Bar
在Foo
的通用参数列表,我希望减少冗余,而不是添加冗余。
编辑:Baz<T1,T2>
应该是返回类型,不是方法名
问题是它没有定义 T1 和 T2 是什么。
你可以这样做:
class Foo<T> : IFoo<int,string>
where T: Bar<int,string>
{
// ...
void Baz(){...}
// can call e.g. Qux<int, string>();
}
你可以这样做:
class Foo<T, T1, T2> : IFoo<T1,T2>
where T: Bar<T1,T2>
{
// ...
void Baz(){...}
// can call e.g. Qux<T1, T2>();
}
但事实上,没有办法知道 T1 和 T2 是什么(人类甚至无法猜测您要做什么,因此编译器无法推断出它)。
我是一名优秀的程序员,十分优秀!