Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#对象函数调用_C#_Oop_Game Engine - Fatal编程技术网

c#对象函数调用

c#对象函数调用,c#,oop,game-engine,C#,Oop,Game Engine,所以我开始学习c#,我遇到了一些问题。。。我试图为我的游戏机rpg游戏创建一个兽人游戏,但我遇到了一堵墙。在我的monsters类中,我有一个用于monster对象的类构造函数,并且我有一个函数,可以以动物风格打印数据 public void Mprint() { Console.WriteLine(name); Console.WriteLine("Class: " + mclass); Console.Write

所以我开始学习c#,我遇到了一些问题。。。我试图为我的游戏机rpg游戏创建一个兽人游戏,但我遇到了一堵墙。在我的monsters类中,我有一个用于monster对象的类构造函数,并且我有一个函数,可以以动物风格打印数据

public void Mprint()
       {
           Console.WriteLine(name);
           Console.WriteLine("Class: " + mclass);
           Console.WriteLine("HP: " + healthmax);
           Console.WriteLine("Atk: " + atk);
           Console.WriteLine("Exp drop: " + expdrop);
           Console.WriteLine("Description: ");
           Console.WriteLine(description);
       }
然后我有一个空白,要求输入,然后使用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;
           }
       }

最终,你会看到这条具有鼠印功能的链条。现在我的问题是,我在哪里定义rat来让rat.Mprint在这里工作。任何帮助都将不胜感激。

早期。。。这让我回想起过去

假设您在控制台应用程序中

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();
        }
    }
}
类程序
{
静态void Main()
{
怪物鼠=新怪物(“a”、“b”);
列出怪物=新列表{rat};
foreach(怪物中的怪物)
{
monster.Mprint();
}
}
}
这将创建一个rat对象并填充它。 它将把它添加到怪物列表中 然后将打印出怪物


祝您好运

与任何变量一样,在使用它之前必须声明它(如果您忘记了这一点,编译器会告诉您!)。所以这个代码很好:

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

       switch (monsterchoice)
       {
           case 1:
           {
               Monster rat = null;
               rat.Mprint();
               break;
           }
           default:
               ...
       }
第二个不太可能是您想要做的,因为在每个case语句中声明变量有点奇怪,但它是有效的。现在,这两个变量都将抛出一个
NullReferenceException
,因为您没有将变量设置为实际对象。所以这些线实际上应该是:


一点建议;不要在类中嵌入类的使用者(例如,控制台窗口)。你的
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);

只要老鼠被宣布为“怪物”并被初始化,你拥有它的方式应该是好的。您需要在switch语句之前或其内部使用“var rat=new Monster()”。
Console.WriteLine(rat.CharacterSheet);