我正在建立一个游戏,并且存在基本的继承权:
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
方法,我该如何完成?
谢谢, 可以。
答案 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;
}
}
}
输出:
我是派生类