2015-09-29 115 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);