C# 如何从C中的另一个类调用变量#
我来自Java,我正在学习C#scripting,我有这个问题已经有大约两天了,现在正在寻找解决方案,我尝试将类设置为一个实例和所有东西。这是一个微型游戏项目,我正在与一些朋友合作 不管怎样,我有StatHandler.cs处理我们所有的statpoints。。。然后我有HealthManager.cs,它应该处理所有与健康相关的事情 问题是,我一辈子都不知道如何调用变量,比如C# 如何从C中的另一个类调用变量#,c#,oop,C#,Oop,我来自Java,我正在学习C#scripting,我有这个问题已经有大约两天了,现在正在寻找解决方案,我尝试将类设置为一个实例和所有东西。这是一个微型游戏项目,我正在与一些朋友合作 不管怎样,我有StatHandler.cs处理我们所有的statpoints。。。然后我有HealthManager.cs,它应该处理所有与健康相关的事情 问题是,我一辈子都不知道如何调用变量,比如 public int stamina, strength, agility, dexterity, wisdom;
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:对象引用未设置为对象的实例
您需要正确初始化。似乎是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
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
单例实例
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.Stamina * 10; // get the value and use it
StatHandler.Stamina = 19; // change the value
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
我认为第一个总是最好的选择,同样的结果,更少的复杂性。下面是您的想法;)似乎你试图获得耐力,就好像它是一个静态场。。要么在StatHandler中使其保持静态,要么创建一个新的StatHandler实例并从中获得耐力……“使用C#脚本”…“调用变量”…“从C#文件中提取变量”。。。这个术语很有异国情调。除此之外,它与Java中的相同:您需要一个对象实例来访问类的非静态字段。StatHandler.instance没有创建实例。你确定你是爪哇人吗?可能来自JavaScript?它们稍后在我的代码中分配,使用库我在scripts Start()函数上启动所有变量,我将10的值应用于所有变量。但是,考虑到我们完成后将是多人游戏,在附加到播放器的脚本上使用静态变量不会适得其反,使每个玩家都有相同的属性?它应该是实例成员。但这就是设计问题,你们会遇到很多这样的问题。您可以写下所有的需求,创建对象模型,然后如果您有进一步的问题,您应该询问programmers.stackexchange.com