c# - 如何从 C# 中的类对象数组访问属性?

标签 c# arrays object properties polymorphism

    Character[] PlayerOne = new Character[5];

    PlayerOne[1] = new BladeWarrior();
    PlayerOne[2] = new FistWarrior();
    PlayerOne[3] = new Archer();
    PlayerOne[4] = new RedMage();
    PlayerOne[5] = new BlueMage();  

我知道通过多态性,BladeWarrior 可以是角色,但反之则不行。我的问题是当我尝试访问数组的元素时。例如 Player[1],我无法访问 BladeWarrior 类中的函数和变量。它只允许我从 BladeWarrior 类继承的 Character 类访问变量和函数。

如果我想要 2 个角色进行战斗,我将需要能够访问 Bladewarrior 函数/变量。

我在想我可以使用“as”函数将 PlayerOne[1] 设置为特定对象。不完全是这样:

string s = objArray[i] as string;

上面的代码行只是为了了解我所说的“as”。

这个问题的解决方案是什么?

最佳答案

I'm going to need to be able to access Bladewarrior functions/variables if Im going to want 2 characters to fight.

看起来您正在尝试进行多次分派(dispatch):您想要调用

Fight(PlayerOne[i], PlayerOne[j]);

调用一个知道两个字符的确切类型的函数。您可以使用不同的技巧在单一调度语言中实现双重调度,最值得注意的是 visitor pattern。 .从 C#4 开始,您还可以使用 dynamic 以相对简洁易读的方式实现双重分派(dispatch):

static class FightArena {
    public static void Fight(dynamic a, dynamic b) {
        try {
            DoFight(a, b);
        } catch {
            Console.Error.WriteLine("{0} and {1} cannot fight", a, b);
        }
    }
    private static void DoFight(BladeWarrior a, Archer b) {
    }
    private static void DoFight(BladeWarrior a, FistWarrior b) {
    }
    private static void DoFight(BladeWarrior a, RedMage b) {
    }
    private static void DoFight(BladeWarrior a, BlueMage b) {
    }
    private static void DoFight(BladeWarrior a, BladeWarrior b) {
    }
    private static void DoFight(Archer a, Archer b) {
    }
    ... // Enumerate all pairs that can fight
}

现在你可以这样写:

FightArena.Fight(PlayerOne[i], PlayerOne[j]);

并且调用将根据 PlayerOne[i]PlayerOne[j] 的动态类型到达精确的类型对。

关于c# - 如何从 C# 中的类对象数组访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20773654/

相关文章:

javascript - 循环遍历 JIRA 中的问题对象(Javascript)

python - Pandas 存储 1000 个数据框对象

c# - moonlight vs. silverlight::datagrid 不兼容?

c# - WPF 投影大小

具有时间戳范围差异的对象数组上的javascript组

javascript - 将键值对象转换为仅值数组

c# - C# 中小数的任意精度帮助?

c# - 计算 CRC16 (Modbus) 值的函数

java - 从 Java 中的输入文件数据创建的数组中创建格式化表

javascript - Canvas 游戏中的Js对象Uncaught TypeError : Cannot read property 'x' of undefined