如何从c#中的另一个类调用变量?

本文关键字:调用 变量 另一个 | 更新日期: 2023-09-27 17:53:11

我来自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#文件中拉变量,因为这会减慢我的速度。

如何从c#中的另一个类调用变量?

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

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

或者你可以像

那样在类中将变量声明为静态的
public static string stamina = 10;

,然后访问

maxHealth = StatHandler.stamina * 10;

在c#中,不初始化值类型变量是不能使用的。

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

例如

public int stamina = 1, strength = 2, agility = 3, dexterity = 4, wisdom = 5;

NullReferenceException: Object reference not set to a instance of Object

你需要正确地初始化。似乎StatHandler.instance是静态的,没有初始化。

可以在static构造函数

中初始化
class StatHandler
{
  static StatHandler()
  {
      instance = new Instance(); // Replace Instance with type of instance
  }
}

你有两种方式去这里。

完全静态类

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
<<p> 单例实例/strong>
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

我认为第一个总是最好的选择,同样的结果,更简单。