我具有以下通用类型层次结构:
interface IGenericInterface<TId, TValue>
{…}
class A : IGenericInterface<long, string>
我想设计一个以IGenericInterface作为类型的通用类型。 编译器允许的解决方案是:
class SomeType<TType, TId, TValue> where TType : IGenericInterface<TId, TValue>
当我需要继承这样的类型时,我需要指定:
class Derived : SomeType<A, long, string>
这似乎在指定第二和第三类型参数方面是多余的,因为类A已经是IGenericInterface<long, string>
了。
有没有一种方法可以实现我想要的-优雅的派生类?
答案 0 :(得分:2)
您可以添加一个中间接口,并为此设置SomeType
约束。像这样:
interface IA : IGenericInterface<long,string> { }
class A : IA {}
class SomeType<TType> where TType : IA { }
class Derived : SomeType<A> { }
答案 1 :(得分:1)
您说得对,您的观点很明智,很遗憾,还尚不支持。您所追求的被称为更高种类的参数多态性,这是函数式编程爱好者急切想要的功能。
答案 2 :(得分:0)
这样的帮助吗? (我认为IEnumerable
做的事情类似)
internal interface IGenericInterface
interface IGenericInterface <TId, TValue> : IGenericInterface
class SomeType<TType> where TType : IGenericInterface