首页 > 解决方案 > 使用继承的类型作为实例 getter 的包装器

问题描述

考虑这两个自定义列表类。

public class CustomList1<T> : ISomeRandomInterface1, IEnumerable<Foo1> {
....
}

public class CustomList2<T> : ISomeRandomInterface2, IEnumerable<Foo2> {
....
}

实施不相关。

是否可以有一个共同的父类型,以便可以像这样的 getter 类型检索相应的列表实例?:

public T getCustomList<T> () {
    // return CustomList1<T> or CustomList2<T>
    // being T the common parent type holder
}

这个想法将应用与两个类实现相同接口时相同的方法,将该接口用作类型“持有者”来检索或处理代码中的相应类型实例,但适用于更复杂的情况。通常,基本类型充当“持有者”类型。

我认为由于 c# 不支持多重继承,我相信没有办法做到这一点。我想确认这一点,如果有任何合理的干净方法可以为类似但来自不同继承路径的类实现这一点。谢谢。

标签: c#inheritance

解决方案


我不确定您是否正确理解...但我尝试回答:)
您可以定义基类型BaseCustomList<T>并从他那里继承类

public class CustomList1<T> : BaseCustomList<T>, ISomeRandomInterface1, IEnumerable<Foo1> {
....
}

public class CustomList2<T> : BaseCustomList<T>, ISomeRandomInterface2, IEnumerable<Foo2> {
....
}

现在你的功能将是这样的:

public BaseCustomList<T> getCustomList<T>()
{
    //return CustomList1<T> or CustomList2<T>
}

推荐阅读