出于测试目的,我想创建一个小型控制台游戏。游戏的目的是让一些大熊猫需要喂食。
所以我想为“概述”或“商店”等各种情况编写一些函数。对于熊猫,我使用了一类“熊猫”。但是当我在第一个函数中使用Panda p1 = new Panda()
时,我无法在其他函数中使用它。
如何编写一个函数来创建一个可在所有函数中使用的类的实例?
整个事情应该是这样的:
namespace PandaWorld
{
public class Panda
{
...
}
class Game
{
void CreatePanda()
{
... //like Panda p1 = new panda();
}
static void Main()
{
... //uses p1 and other pandas
}
}
}
我可以使用静态熊猫,但我希望能够在运行时“创建”更多的熊猫。
答案 0 :(得分:0)
让熊猫课成为单身课程。
有关更多说明 http://msdn.microsoft.com/en-us/library/ff650316.aspx
答案 1 :(得分:0)
您可以为您的pandas编写一个静态包装类,它会保留一个panda对象的静态列表并像访问它们一样;
PandaStaticWrapper.GetPanda(pandaName);
创建一个新的
PandaStaticWrapper.CreateNewPanda(pandaName);
答案 2 :(得分:0)
如果我理解正确的问题......
它不是以不同方式创建实例,而是将引用传递给该实例......
e.g。
class MyClassA {
Panda myClassPanda;
void func1()
{
// assign a new panda to a shared reference...
myClassPanda = new Panda();
myClassPanda.Name = "Kung Fu";
}
void func2()
{
Console.WriteLine("the panda name is {0}", myClassPanda.Name);
}
}
你也可以像这样创建一个活熊猫的静态参考词典:
public class Panda
{
private static Dictionary<string, Panda> LivingPandaz = new Dictionary<string, Panda>();
public static Panda GetPanda(string pandaName)
{
Panda thePanda;
if (!LivingPandaz.TryGetValue(pandaName, out thePanda)) {
thePanda = new Panda(pandaName);
LivingPandaz.Add(pandaName, thePanda);
}
return thePanda;
}
private Panda(string pandaName)
{
}
}
也许添加一个Disposable,并在不再需要时杀死活着的熊猫 所以你可以从任何地方参考所有活着的大熊猫...
干杯。
答案 3 :(得分:0)
如果您在班级Game
的功能中使用您的Pandas,那么为Pandas创建一个私人成员
因为您需要少量熊猫,所以请使用List
或Dictionary
Class Game
{
private List<Panda> allPandas;
void Main()
{
this.allPandas = new List<Panda>();
this.allPandas.Add(new Panda()); //first panda
this.allPandas.Add(new Panda()); //second panda
}
void AnotherFunction()
{
//here you can use functions of your first panda by index
this.allPandas[0].PandasFunction()
}
}
在我看来,如果你能为分离的熊猫提供一些自定义key
,我会更好。然后使用Dictionary
:
private Dictionary<String, Panda> allPandas;
在Main()
中this.allPandas = new Dictionary<String,Panda>();
this.allPandas.Add("PandaName", new Panda());
在其他职能中:
this.allPandas["PandaName"].PandasFunction();
如果您的游戏中有更多类需要使用Panda
的实例,那么可能更好的做法是通过Panda
将Constructor
的实例引用给他们或直接运行作为参数。
AnotherGameClass
{
private Panda _handlePanda;
public AnotherGAmeClass(Panda handledPanda)
{
this._handlePanda = handledPanda
}
//or straight to function
public void CheckPanda(Panda checkingPanda)
{
//use your panda here
}
}