在c#中从泛型引用调用派生类重写方法
本文关键字:派生 重写 方法 调用 引用 泛型 | 更新日期: 2023-09-27 18:14:29
我正在制作一款游戏,这里有一个基本的继承层次:
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
。但是第二行调用基类GameObject
的Clone
方法,这不是我想要的。我需要调用PlatformObject.Clone
方法,我怎么能做到这一点?
谢谢,可以。
我编写了一个与此非常接近的实现,并看到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;
}
}
}
输出:我是派生类