繁体   English   中英

评估从静态方法创建的对象

[英]Asses object created from static method

目前,我正在尝试使用从静态方法创建的对象,但不会发生。 我相信我做错了什么,但我不知道该怎么办。 这是我用来创建对象的代码,该代码位于单独的类中,假设它的名称为CrusadersFactory.cs:

//Method for creating crusader Nate
public static void CreateNate(string name, int level, int health, int damage)
{
    Nate NateDragon = new Nate(name, level, health, damage);
    //Print the info for the new object NateDragon
    Console.WriteLine(NateDragon.name + " " + NateDragon.level + " "  + NateDragon.health + " " + NateDragon.damage);
}

这是我尝试使用该对象的方式,此代码在Program.cs中:

CrusadersFactory.CreateNate("Nate", 100, 200, 300); //This works in order to create Nate, but It gives error if i try Console.WriteLin(CrusadersFactory.NateDragon.name)
Console.WriteLine("Nate's health is {0}", CrusadersFactory.NateDragon.health);

预先感谢您的回答!

由于您可以在没有编译器错误的情况下调用此函数:

CrusadersFactory.NateDragon.health

这意味着您实际上确实在CrusadersFactory创建了一个静态NateDragon属性。 但是, 您从未为该属性分配任何内容

public static void CreateNate(string name, int level, int health, int damage)
{
    Nate NateDragon = new Nate(name, level, health, damage);
}

您在这里所做的一切都已声明并分配了局部变量 此变量仅存在于CreateNate方法的范围内,在其外部不存在。

相反,您应该做的是将创建的对象分配给要存储在其中的静态属性:

public static void CreateNate(string name, int level, int health, int damage)
{
    CrusadersFactory.NateDragon = new Nate(name, level, health, damage);
}

由于CreateNate方法也是CrusadersFactory一部分,因此可以将其缩短为:

public static void CreateNate(string name, int level, int health, int damage)
{
    NateDragon = new Nate(name, level, health, damage);
}

简而言之,当您使用Nate NateDragon = ... ,您声明了一个新变量,而不是访问已在CrusadersFactory类中声明的静态类属性NateDragon

您的方法具有void返回类型(不返回任何值)。 您应该更改它以返回Nate类型。

public static Nate CreateNate(string name, int level, int health, int damage)
{
    var nate = new Nate(name, level, health, damage);
    //Print the info for the new object NateDragon
    Console.WriteLine(nate.name + " " + nate.level + " "  +  nate.health + " " + nate.damage);
    return nate;
}

您的用法示例可以变成:

var nate = CrusadersFactory.CreateNate("Nate", 100, 200, 300);
Console.WriteLine("Nate's health is {0}", nate.health);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM