如何将“java通配符”转换为C#格式?

public abstract class AAA<T extends BBB<?>> extends CCC<T>{}

我不正确的C#代码
public abstract class AAA<T> : CCC<T> where T : BBB<?>{}

如何转换BBB<?>

最佳答案

还有一个类似的问题C# generic "where constraint" with "any generic type" definition?并不特定于Java通配符。那里提供的答案可能会帮助您。

根据该答案,可能的类签名为:

public abstract class AAA<T, TOther> : CCC<T>
    where T : BBB<TOther>
{}

即使您从未计划显式/隐式使用类型,C#中的泛型也必须具有命名的类型参数。并且所有类型参数都必须在方法/类/接口的标识符声明中命名。

请注意,如果需要,可以使用以下方式将TOther限制为仅对象类型:
public abstract class AAA<T, TOther> : CCC<T>
    where T : BBB<TOther>
    where TOther : object
{}

10-06 03:25