在不创建新对象的情况下构造对象本身内的对象列表

时间:2017-06-15 12:59:21

标签: c#

基础知识我的代码:

public class Player
    {
        public ConsoleColor color;
        public ConsoleKey upKey, downKey, leftKey, rightKey;
    public static Player[] players;

    public void addPlayer(ConsoleColor _color, ConsoleKey _upKey, ConsoleKey _downKey, ConsoleKey _leftKey, ConsoleKey _rightKey)
    {
        Player.players[Player.players.Length] = new Player(_color, _upKey, _downKey, _leftKey, _rightKey);
    }

    public Player()
    {

    }
    public void attack()
    {

    }

    public Player(ConsoleColor _color, ConsoleKey _upKey, ConsoleKey _downKey, ConsoleKey _leftKey, ConsoleKey _rightKey)
    {
        color = _color;
        upKey = _upKey;
        downKey = _downKey;
        leftKey = _leftKey;
        rightKey = _rightKey;
    }
}

void mainLoop()
{
    Player.addPlayer(ConsoleColor.DarkGreen, ConsoleKey.W, ConsoleKey.S, ConsoleKey.A, ConsoleKey.D);
    Player.addPlayer(ConsoleColor.DarkGreen, ConsoleKey.UpArrow, ConsoleKey.DownArrow, ConsoleKey.LeftArrow, ConsoleKey.RightArrow);
    for (int _player = 0; _player < Player.players.Length; _player++)
    {
        Player.players[_player].attack();
    }
}

这样做的目的是使代码可以重用。最后,这将是一个基本的多人游戏。

我目前正在做的是创建课程&#34; Player&#34;它还包含自身的所有实例(对象)的列表。我需要这样做有很多原因,但最重要的是使代码尽可能可重用和可集成。

当我尝试做这个时,我的问题出在&#34; Player.addPlayer()&#34;。如果没有我制作一个Player对象,它就不会接受这个。我宁愿不这样做。

2 个答案:

答案 0 :(得分:1)

那是因为addPlayer也应该是静态的:

public static void addPlayer

但是有一个更大的问题:你的设计。而不是在Player类中填充所有内容:创建一个新类Players,在那里创建像addPlayer这样的非静态成员,并传递Players的实例。< / p>

与现有方法相比,这是一种更好,更实用的设计。为什么?如果你想分开双方球员怎么办?您无法对它们进行分组,因为它们位于同一个静态列表中。如果你想删除一个等等怎么办

而不是数组,使用List<Player>,它允许自动调整大小,删除等。

答案 1 :(得分:0)

如果你想在不创建类实例的情况下使用任何方法,你应该像{1}}属性那样使用static。但是你应该知道实际上是你的类的一个实例,如果你在应用程序启动时有静态方法或属性

所以如果你想使用像这样的方法addPlayer:

players

你应该这样声明:

Player.addPlayer()