1

出于测试目的,我想创建一个小型控制台游戏。游戏是关于有一些需要喂养的熊猫。

所以我想为“Overview”或“Shop”等每种情况编写一些函数。对于 Pandas,我使用“Panda”类。但是当我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
        }
    }
}

我可以使用静态熊猫,但我希望能够在运行时“创建”更多熊猫。

4

4 回答 4

0

使 Panda 类成为单例类。

有关更多说明 http://msdn.microsoft.com/en-us/library/ff650316.aspx

于 2013-08-18T09:00:21.750 回答
0

您可以为您的 pandas 编写一个静态包装类,它保留一个静态的 panda 对象列表并像访问它们一样;

PandaStaticWrapper.GetPanda(pandaName);

创建一个新的

PandaStaticWrapper.CreateNewPanda(pandaName);
于 2013-08-18T09:03:32.513 回答
0

如果我正确理解了这个问题...
这不是要以不同的方式创建实例,而是要传递对该实例的引用...

例如

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,并在不再需要时杀死活着的熊猫。
所以你可以从任何地方获得所有活着的熊猫的参考......

干杯。

于 2013-08-18T09:04:00.170 回答
0

如果您在 Class 功能中使用 Pandas,Game则为 Pandas 创建一个私有成员

因为你需要很少的熊猫然后使用ListDictionary

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;

在主()

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
    }

}
于 2013-08-18T09:06:06.660 回答