【问题标题】:How can I extend my class from a nested in another generic class?如何从嵌套在另一个泛型类中扩展我的类?
【发布时间】:2025-11-29 10:05:01
【问题描述】:

我是 C# 新手(我是一名 Java 开发人员)并且对泛型有疑问。我有一个带有嵌套类的泛型类:

public class FlowChartBuilder<TEntity, TLink> 
    where TEntity : FlowChartBuilder<TEntity, TLink>.Entity
    where TLink : FlowChartBuilder<TEntity, TLink>.Link
{
    public abstract class Link { }
    public abstract class Entity { }
}

接下来我尝试扩展这些类:

public class ChartEntity<T>: FlowChartBuilder<ChartEntity<T>, ChartLink>.Entity
{
}

public class ChartEntity<T>: FlowChartBuilder<ChartEntity<T>, ChartLink<ChartEntity<T>>>.Entity
{
}

但我得到一个错误:

“TEntity”类型不能像“TEntity”类型的参数一样在 通用类型或方法“FlowChartBuilder”。没有 来自“TEntity”的转换包装或类型参数的转换 到“PM.Utils.Diagram.FlowChartBuilder>.Entity”。

如何正确写法?

【问题讨论】:

  • 如果你能用英文发布你的错误会很酷
  • 对不起,我只是没注意到。我已经翻译过了。
  • 我认为这是*.com/questions/21566701/… 的副本,您可能会在其中找到答案。它告诉用封装替换继承。
  • 如果你只是想让它们公开,为什么要嵌套这些类? *.com/a/7984625/302918
  • @BrunoBelmondo,非常感谢!这是我需要的。

标签: c# generics


【解决方案1】:

您尝试做的事情是不可能的。改为使用组合而不是继承。

在此处查看解决方法Nested class that inherits from its generic parent class

【讨论】:

  • 对不起,我搞砸了。它不适合我的情况。或者我搞砸了。
  • 你能提供用例吗?您将无法继承这些类,因此请先告诉我们您为什么要这样做。
  • 我可以访问这些嵌套类的私有成员。也许,C# 有其他方式,只是我不知道。
  • 私人会员是“私人”。无法访问其中的任何数据。
  • 哇,伙计,对不起)你是对的,当然。内部类可以访问外部(在 Java 中,我没有在 C# 中检查它)。我已经需要休息了
最近更新 更多