如何在通用的同一类中使用泛型?

时间:2016-01-19 13:22:34

标签: c# generics

例如我有这段代码:

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

我该怎么办?

1 个答案:

答案 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问题。你能描述一下潜在的问题吗?