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
相关产品推荐
相关产品推荐

