2013-01-13 149 views
2

我来自Java并且正在采用C#脚本,现在我已经遇到了这个问题,现在正在寻找解决方案,我尝试将该类设置为一个实例和一切。这是一个我正在和一些朋友合作的微型游戏项目。如何从C#中的另一个类调用一个变量

无论哪种方式,我有StatHandler.cs处理所有我们的statpoints ...然后我有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 

我也试过inherriting,这样做

public class HealthHandler : StatHandler { 

但它设置的所有值设为0的HealthHandler类,它不读任何东西。


我真的只需要弄清楚如何拉从其他C#文件的变量,因为这是我的放缓一路下跌。

+0

[这是如何做一个漫长的旅程](http://books.google.com.sg/books/about/Head_First_C.html?id=Rnea7qV_qQAC&redir_esc=y),这里是你如何[做它现在](http://stackoverflow.com/questions/1392017/calling-a-variable-from-another-class-c);) – bonCodigo

+0

好像你正试图获得耐力,就像它是一个静态的领域。 。或者在StatHandler中将其设为静态,或者创建一个StatHandler的新实例并从中获得耐力。 – Oren

+1

...“拾取C#脚本”...“调用变量”...“从C#文件中提取变量”......这个术语非常奇特。除此之外,它与Java中的相同:您需要一个对象实例来访问类的非静态字段。 –

回答

2

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

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

,或者您可以在类像

public static string stamina = 10; 

变量声明为静态,然后访问它

maxHealth = StatHandler.stamina * 10; 
0

在C#中,如果不初始化它,则不能使用值类型变量。

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

例如

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

他们在我的代码中稍后分配,使用库我启动脚本Start()函数的所有变量,我将这个值应用到所有变量中。 –

0

的NullReferenceException:未将对象引用设置到对象

您需要正确初始化的实例。看起来像StatHandler.instance是静态的,没有初始化。

可以在static构造

class StatHandler 
{ 

    static StatHandler() 
    { 
     instance = new Instance(); // Replace Instance with type of instance 
    } 
} 
+0

但是,考虑到这将是多人游戏时,我们完成它,不会使用静态变量脚本attatched玩家逆火,并导致每个玩家有相同的统计数据? –

+0

它会,它应该是实例成员。但那是设计问题,你会遇到很多这样的问题。你可以写下所有的需求,创建对象模型,然后如果你有进一步的问题,你应该问程序员.stackexchange.com – Tilak

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 

Singleton实例

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 

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

相关问题