如何从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#文件中拉变量,因为这会减慢我的速度。
实际上与Java中的相同。对于非静态变量,您需要一个类实例:
StatHandler sh = new StatHandler();
maxHealth = sh.stamina * 10;
或者你可以像
那样在类中将变量声明为静态的public static string stamina = 10;
,然后访问
maxHealth = StatHandler.stamina * 10;
在c#中,不初始化值类型变量是不能使用的。
看起来StatHandler.instance
是static
方法。你不能使用你的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
我认为第一个总是最好的选择,同样的结果,更简单。