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

C#中如何不指定类型参数使用泛型类Bar<T,U>并兼容第三方方法

泛型类集合与继承兼容的问题

我知道之前已经有不少类似问题被提出来,但我认为当前这个特定问题还没得到解决。

第三方库提供了类Super和泛型类Foo<T> : Super,我要扩展Foo<T>的功能,所以定义了如下泛型类:

public class Bar<T, U> : Foo<T> {
  public void DoSomething() { ... }

  // 其他使用T和U的代码
}

我现在需要创建一个Bar实例的集合(列表),并且能对集合里所有实例调用DoSomething方法。逻辑上,调用这个无返回值方法时,我不需要关心Bar的类型参数,因为在这个场景里它们无关紧要。

另外,第三方库还提供了这样一个方法:

public LibraryMethod(Super super) { ... }

我需要能把任意Bar实例传入这个方法。

不可行方案1:接口

不能用接口的原因是,第三方库的部分方法要求传入Super类型,而接口可以被任意类实现——哪怕所有Bar实例(不管类型参数是什么)都属于Super类型,用接口的话也会破坏继承链,导致没法把Bar实例传给期望接收Super的方法。

不可行方案2:非泛型基类

显然,我不能让Bar<T,U>继承自非泛型基类,原因和上面一样,这同样会破坏继承链。

理想场景

我希望能写出这样的代码:

List<Bar<>> bars = new List<Bar<>>();

bars.Add(new Bar<Type1, Type2>());
bars.Add(new Bar<Type3, Type4>());

foreach (Bar<> bar in bars) {
  bar.DoSomething();
}

LibraryMethod(bars[0]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:55:27