You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#泛型基类场景下如何声明YYY.Bar参数以接受CCC实例

问题原因

你定义的BBB<T>是带泛型参数的开放泛型类型,C# 不支持直接将未绑定类型参数的开放泛型类型作为参数类型使用,这和 Java 支持的BBB<?>通配符用法规则不同,因此你原来的Bar(BBB bbb, int value)声明会直接编译报错。

解决方案

有两种常用实现方案,你可以根据业务场景选择:

方案1:抽离非泛型公共接口(推荐)

如果你在Bar方法内仅需要调用BBB的公共非泛型方法,最简洁的方式是把公共能力抽象为非泛型接口:

  1. 定义非泛型接口
public interface IBBB
{
    void SomeMethod();
}
  1. 让BBB<T>实现该接口
public abstract class BBB<T> : AAA<T>, IBBB where T : BBB<T>
{
    public void SomeMethod() { }
}
  1. 修改Bar方法参数类型为接口
public void Bar(IBBB bbb, int value)
{
    bbb.SomeMethod();
}

这个方案的优势是YYY类完全不需要感知泛型逻辑,依赖更轻,符合依赖倒置原则。

方案2:将Bar改为泛型方法

如果你后续需要在Bar方法内使用T类型相关的泛型能力,可以把Bar声明为带约束的泛型方法:

public void Bar<T>(T bbb, int value) where T : BBB<T>
{
    bbb.SomeMethod();
}

调用时不需要修改原有代码,C# 会自动完成泛型类型推断,你原有的Bar(instance, 0)调用可以直接正常运行。

内容的提问来源于stack exchange,提问作者Michael Gaugy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:18:04