从C#中的泛型引用调用派生类覆盖方法

时间:2011-11-15 00:18:38

标签: c# generics inheritance polymorphism virtual-functions

我正在建立一个游戏,并且存在基本的继承权:

GameObject是一个基类,有一个名为Clone的虚拟方法

PlatformObject源自GameObject,覆盖了Clone方法

我有一个序列化器/反序列化器通用类,用于任何GameObject或派生定义如下:

public class XmlContentReaderBase<T> where T : GameObject

我的XML Reader类不知道我的派生类型。我对这一行有疑问:

        T obj = serializer.Deserialize(input) as T;
        return obj.Clone() as T;

第一行运行正常,并返回正确的PlatformObject。但第二行调用基类的Clone方法GameObject,这不是我想要的。我需要调用PlatformObject.Clone方法,我该如何完成?

谢谢, 可以。

1 个答案:

答案 0 :(得分:1)

我写了一个与此非常接近的实现,并看到Clone引用了派生对象的Clone方法(通过创建一个新对象而不是反序列化一个对象而作弊)。

发布更多代码?

using System.Text;

namespace GenericExperiment
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlContentReaderBase<PlatformObject>.Deserialize();
            Console.ReadKey();
        }
    }

    class GameObject : ICloneable
    {
        object ICloneable.Clone()
        {
            Console.WriteLine("I am the base class");
            return null;
        }
    }

    class PlatformObject: GameObject, ICloneable
    {
        object ICloneable.Clone()
        {
            Console.WriteLine("I am the derived class");
            return null;
        }
    }

    class XmlContentReaderBase<T> where T : GameObject, new()
    {
        static public object Deserialize()
        {
            T obj = new T();
            ((ICloneable)obj).Clone();
            return obj;
        }
    }

}

输出:

  

我是派生类