2015-09-29 154 views
1

所以我開始學習c#,我遇到了一些問題......我試圖爲我的主機rpg遊戲創建一個靜物,並且我碰到了一堵牆。在我的怪物類中,我有一個怪物對象的類構造函數,並且我有一個函數以靜態方式打印出數據。c#對象函數調用

​​

然後我有一個要求你的開關輸入,然後虛空使用switch語句來把你放下鏈條,並最終到你想要的條目:

switch (monsterchoice) 
      { 
       case 1: 
        rat.Mprint(); 
        break; 
       default: 
        Console.WriteLine(); 
        Console.WriteLine("Make sure that you are using the number next to the name of the monster you choose."); 
        Console.ReadKey(); 
        BestiaryBeast(); 
        break; 
      } 
     } 

最終你得到這個鏈條具有鼠標打印功能。現在我的問題是我在哪裏定義老鼠,讓老鼠在這裏工作。任何幫助將不勝感激。

+0

你應該罰款的方式,只要老鼠已申報並被初始化爲「怪物」。您需要在switch語句之前或在它內部使用「var rat = new Monster()」。 – ryan

回答

1

早期...這把我帶回來。

假設你是在一個控制檯應用程序

class Program 
{ 
    static void Main() 
    { 
     Monster rat = new Monster("a", "b"); 
     List<Monster> monsters = new List<Monster> { rat }; 
     foreach (var monster in monsters) 
     { 
      monster.Mprint(); 
     } 
    } 
} 

這將創建一個老鼠對象,並填充它。 它會將它加入怪物列表 然後打印出怪物。

好運

0

與任何變量,則必須在使用前聲明它(你的編譯器會告訴你,如果你忘記了這一點!)。所以這個代碼是罰款:

 Monster rat = null; 
     switch (monsterchoice) 
     { 
      case 1: 
       rat.Mprint(); 
       break; 
      default: 
       ... 
     } 

所以是這樣的:

 switch (monsterchoice) 
     { 
      case 1: 
      { 
       Monster rat = null; 
       rat.Mprint(); 
       break; 
      } 
      default: 
       ... 
     } 

二是不太可能是你做的,在每種情況下聲明,宣佈你的變量是位奇怪的,但它是有效的。現在,這兩者都會拋出一個NullReferenceException,因爲您沒有將變量設置爲實際對象。因此,這些線路應實際上是:

Monster rat = new Rat(); //Or Monster, depending on your class design 
0

建議的位;不要在類中嵌入類的使用者(例如Console窗口)。你Monster類應該是這個樣子:

public class Monster 
{ 
    public string Name { get; private set; } 
    public int HitPoints { get; set; } 

    public string CharacterSheet 
    { 
     get 
     { 
      return Name + Environment.NewLine 
        + "HP: " + HitPoints; 
     } 
    } 

    public Monster(string name, int hp) 
    { 
     Name = name; 
     HitPoints = hp; 
    } 
} 

那麼你會打印出你的性格表中包含的代碼:

Console.WriteLine(rat.CharacterSheet);