我正在写一个C#程序,这是一个基本的文本RPG游戏。当我保存游戏时,我想将该角色传递给一个保存函数,然后从该角色获取数据并将其写入xml文件。我有一个基类字符和三个派生类: Knight , Rogue 和向导。它们每个都有一个特殊的int,我想写一个xml文件。
private void Save(Character c, string file) {
//Sample part of writing the data
XmlNode nodeName = playerData.CreateElement("name");
nodeName.AppendChild(playerData.CreateTextNode(c.name));
nodeDetails.AppendChild(nodeName);
}
我想将 Knight , Rogue 或向导传入此函数,并能够在派生类中获取任何变量不在基类中的。有没有办法做到这一点?
答案 0 :(得分:1)
是的,通过使用铸造。
private void Save(Character c, string file)
{
if(c is Knight)
{
k = (Knight)c;
// Do whatever with k
}
else if (c is Rogue)
{
r = (Rogue)c;
// Do whatever with k
}
}
然而,这破坏了你设置的多态结构 - 多态性的全部意义在于你不应该这样做。
如果Character
类具有返回保存所需数据的abstract
或virtual
方法,那将是更好的做法。每个子类都会覆盖此方法以返回所需的信息(包括该子类的任何特殊信息),因此您永远不需要检查传递的Character
类型。
答案 1 :(得分:0)
看看这是否有帮助
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Rogue rogue = new Rogue();
Save(rogue, "1234");
}
static void Save(Character c, string file)
{
if(c.GetType() == typeof(Knight))
{
}
if (c.GetType() == typeof(Rogue))
{
}
if (c.GetType() == typeof(Wizard))
{
}
}
}
public class Character
{
}
public class Knight : Character
{
}
public class Rogue : Character
{
}
public class Wizard : Character
{
}
}