在所有函数中使用实例

时间:2013-08-18 08:55:31

标签: c# instance

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

所以我想为“概述”或“商店”等各种情况编写一些函数。对于熊猫,我使用了一类“熊猫”。但是当我在第一个函数中使用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 个答案:

答案 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创建一个私人成员

因为您需要少量熊猫,所以请使用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()
    }
}

About List

在我看来,如果你能为分离的熊猫提供一些自定义key,我会更好。然后使用Dictionary

private Dictionary<String, Panda> allPandas;

在Main()

this.allPandas = new Dictionary<String,Panda>();
this.allPandas.Add("PandaName", new Panda());

在其他职能中:

this.allPandas["PandaName"].PandasFunction();

About Dictionary

如果您的游戏中有更多类需要使用Panda的实例,那么可能更好的做法是通过PandaConstructor的实例引用给他们或直接运行作为参数。

AnotherGameClass
{
    private Panda _handlePanda;

    public AnotherGAmeClass(Panda handledPanda)
    {
        this._handlePanda = handledPanda
    }

    //or straight to function
    public void CheckPanda(Panda checkingPanda)
    {
        //use your panda here
    }

}