时间:2017-05-17 03:52:25

标签: c# static

我正在开发一款具有预定义级别的C#游戏。我正在尝试拥有一个能够保存所有级别的预定义数据的类。这就是我要做的事情:

public static GameLevel startLevel = new Level() {
   startLevel.Actions.Add(action);
   startLevel.Actions.Add(action);
}

等等。但是,似乎C#不希望我以这种方式初始化。如何在不将其投入大型构造函数的情况下实现我想要的效果?

3 个答案:

答案 0 :(得分:0)

您如何看待我们如何更改静态变量:

private static GameLevel _startLevel;
public static GameLevel StartLevel
{
    get
    {
        if(_startLevel == null)
        {
            _startLevel = new Level();
            _startLevel.Action.Add(action1);
            _startLevel.Action.Add(action2);
        }

        return _startLevel;
    }
}

答案 1 :(得分:0)

“...... C#不希望我以这种方式初始化......”

你可以这样开始。你只是没有正确的语法。这应该工作

public static Level startLevel = new Level() 
    {
        Actions = new List<Action>() 
            {
                new Action() {...},
                new Action() {...}    
            },
        OtherProprty = "Other"
    };

注意:这必须在类范围

下完成

“Massive constructor” - 除非这是静态构造函数,否则通常不会在构造函数中初始化静态成员。听起来你需要为这件作品使用 Singleton 模式。然后,你再次在构造函数中调用所有需要的代码,“大规模”或不是。把它分解成方法。

答案 2 :(得分:0)

由于您有预定义的级别,我建议采用一种不同的方法。

创建一个Level基类,并为每个Level创建一个类。每个级别类的构造函数都可以设置Actions以及游戏需要知道如何显示自身的任何其他内容。

using System;

public class Program
{
    public static void Main()
    {
        new GameState(new Level1());
        Console.WriteLine("Current level is " + GameState.CurrentLevel.Name);
        Console.WriteLine("User leveled up");
        GameState.CurrentLevel = new Level2();
        Console.WriteLine("Current level is " + GameState.CurrentLevel.Name);
    }
}

public class Level
{   
    public string Name;
    // public static IEnumerable<Action> Actions { get; set; }
}

public class Level1 : Level
{
    public Level1()
    {
        // level 1 init
        Name = "1";
        // Actions = new List<Action> { ... }
    }
}

public class Level2 : Level
{
    public Level2()
    {
        // level 2 init
        Name = "2";
    }
}

public class GameState
{
    public static Level CurrentLevel { get; set; }

    public GameState(Level startLevel)
    {
        CurrentLevel = startLevel;
    }
}

工作副本:https://dotnetfiddle.net/qMxUbw