c# - 列出不同类型

标签 c# generics derived

我是 C# 方面的新手.... (.net 3.5)

我想要一个字典来容纳两种不同类型的对象,其中一种类型是通用的。在遍历列表时,我将调用添加和克隆等方法。 我已经用基类和子类尝试过它....

namespace ConsoleApplication1 {
    class Element{
    }
    class Child1 : Element {
        public Child1 Clone() { return clone; }
    }
    class Child2<T> : Element {
        public Child2<T> Clone() { return clone; }
    }
    class Program {
        static void Main(string[] args) {
            Dictionary<string, Element> d = new Dictionary<string, Element>();
            d.Add("c1",  new Child1());
            d.Add("c2s", new Child2<string>());
            d.Add("c2i", new Child2<int>());
            foreach (KeyValuePair<string, Element> kvp in d) {
                Element e = kvp.Value.Clone();
            }
        }
    }
}

是否有满足我需求的方法或解决方案?

谢谢! 安娜

最佳答案

您可以在基本类型(Element)上制作Clone abstractvirtual,并且override 它在派生类型中,但在覆盖时不能更改返回类型,因此它必须是 Element (没有更具体的)。您可以重新声明方法(new...),但这会变得困惑,并且您不能overridenew 具有相同类型的相同名称/签名的方法。

但是如果您对返回类型为 Element 感到高兴...

abstract class Element{
    public abstract Element Clone();
}
class Child1 : Element {
    public override Element Clone() { return /* your code */; }
}
class Child2<T> : Element {
    public override Element Clone() { return /* your code */; }
}

关于c# - 列出不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301795/

相关文章:

c# - 了解 C# 中的代理模式

Swift 泛型参数不能绑定(bind)到非@objc 协议(protocol)

generics - 如何让这个 Typescript typeguard 在泛型上下文中工作?

c# - 如何将字典的子集转换为从 Dictionary<> 派生的类型

c++ - 在 C++ 中使用指向动态分配对象的指针 vector 时如何避免内存泄漏?

c# - 可空 bool 下拉列表的编辑器模板未呈现

c# - 使用 Action<T> 模拟方法

c# - Entity Framework 使编译查询通用

c++带有缩进的自定义输出流

c# - System.Net.Http.Formatting.dll 导致 Newtonsoft.Json 出现问题