例如我有这段代码:
public abstract class CubeClient <T> where T : CubeConnection<T> {...}
我希望使用CubeConnection扩展它,而CubeConnection具有CubeClient
public class CubeConnection<T> where T : CubeClient<T> { ... }
但我收到的问题是:
类型'T'不能用作泛型类型或方法
CubeClient<T>
中的类型参数'T'。没有从“T”到CubeNetwork.CubeConnection<T>
的隐式引用转换。 CubeNetwork
我该怎么办?
答案 0 :(得分:1)
这可能会有所帮助,也可能没有帮助,但这会编译并具有几乎相同的约束条件:
public abstract class CubeClient<T1, T2>
where T1 : CubeClient<T1, T2>
where T2 : CubeConnection<T1, T2>
{
}
public abstract class CubeConnection<T1, T2>
where T1 : CubeClient<T1, T2>
where T2 : CubeConnection<T1, T2>
{
}
然后,您可以继续定义,例如,这些具体的类:
public class FooClient : CubeClient<FooClient, BarConnection>
{
}
public class BarConnection : CubeConnection<FooClient, BarConnection>
{
}
再次,这些编译正常。
这基本上是Gang Of Four "Bridge Pattern",用泛型完成。
但这听起来好像你正试图解决一个不同的问题作为解决方案 - 现在这已成为你的“代理问题”。换句话说,一个X-Y问题。你能描述一下潜在的问题吗?