3

我来自 Java,我正在学习 C# 脚本,我已经遇到这个问题大约两天了,现在正在寻找解决方案,我尝试将类设置为实例和所有内容。这是我和一些朋友一起做的一个微型游戏项目。

无论哪种方式,我都有 StatHandler.cs 处理我们所有的统计点......然后我有 HealthManager.cs 应该处理所有与健康相关的东西。

问题是,我一生都无法弄清楚如何调用变量,例如

public int stamina, strength, agility, dexterity, wisdom;

来自 StatHandler.cs

我知道在 Java 中它会像

maxHealth = StatHandler.stamina * 10;

虽然,你不能用 C# 做到这一点,但在创建实例时,代码看起来像这样

maxHealth = StatHandler.instance.stamina * 10;

这为我提供了错误

NullReferenceException: Object reference not set to an instance of an object

我也尝试过继承,通过这样做

public class HealthHandler : StatHandler {

但它在 HealthHandler 类中将所有值设置为 0,它不读取任何内容。


我真的只需要弄清楚如何从其他 C# 文件中提取变量,因为这让我慢了下来。

4

4 回答 4

3

它实际上与 Java 中的相同。对于非静态变量,您需要一个类实例:

StatHandler sh = new StatHandler();
maxHealth = sh.stamina * 10;

或者您可以在类中将变量声明为静态,例如

public static string stamina = 10;

然后访问它

maxHealth = StatHandler.stamina * 10;
于 2013-01-13T11:22:16.623 回答
0

在 C# 中,您不能在未初始化的情况下使用值类型变量。

看起来StatHandler.instancestatic方法。您不能使用int没有任何分配的变量。为它们分配一些值。

例如

public int stamina = 1, strength = 2, agility = 3, dexterity = 4, wisdom = 5;
于 2013-01-13T11:22:23.160 回答
0

NullReferenceException:对象引用未设置为对象的实例

您需要正确初始化。似乎StatHandler.instance是静态的并且未初始化。

static您可以在构造函数中初始化它

class StatHandler
{

  static StatHandler()
  {
      instance = new Instance(); // Replace Instance with type of instance
  }
}
于 2013-01-13T11:22:23.960 回答
0

你有两种方法可以去这里。

全静态类

public static class StatHandler
{
    public static Int32 Stamina = 10;
    public static Int32 Strength = 5;
}

接着:

maxHealth = StatHandler.Stamina * 10; // get the value and use it
StatHandler.Stamina = 19; // change the value

单例实例

public class StatHandler
{
    public static StatHandler Instance;

    public Int32 Stamina = 10;
    public Int32 Strength = 5;

    // this is called only the first time you invoke the class
    static StatHandler()
    {
        m_Instance = new Instance(); // Replace Instance with type of instance
    }
}

接着:

maxHealth = StatHandler.Instance.Stamina * 10; // get the value and use it
StatHandler.Instance.Stamina = 19; // change the value

// replace the current instance:
StatHandler.Instance = new StatHandler();
StatHandler.Instance.Stamina = 19; // change the value

我认为第一个总是最好的选择,结果相同,复杂性更低。

于 2017-11-26T00:32:34.100 回答