2013-08-18 4 views
1

В целях тестирования я хотел создать небольшую консольную игру. В игре есть некоторые панды, которые нужно кормить.Использование экземпляра во всех функциях

Поэтому я хотел написать некоторые функции для каждой ситуации, например «Обзор» или «Магазин». Для Панд я использую класс «Панда». Но когда я использую 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 
     } 
    } 
} 

Я мог бы использовать статический Panda, но я хочу, чтобы иметь возможность «создать» больше панд во время выполнения.

ответ

0

Сделайте класс Panda одним классом.

Для получения дополнительных инструкций http://msdn.microsoft.com/en-us/library/ff650316.aspx

+0

Я думаю, что прочитал вопрос неправильно. Извините за вводящий в заблуждение ответ – rozar

0

Вы можете написать статический wrapperclass для ваших панд, который держит статический список объектов панды и доступ к ним, как;

PandaStaticWrapper.GetPanda(pandaName); 

создать новый

PandaStaticWrapper.CreateNewPanda(pandaName); 
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) 
    { 

    }   
} 

Может добавить Одноразовая и убить живую панду, когда он больше не нужен.
и поэтому вы можете получить ссылку на все живые панды из любого места ...

Cheers.

0

Если вы используете панд в зависимости от класса Game затем создать частный элемент для панд

Потому что вам нужно несколько панд затем использовать 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() 
    } 
} 

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, то, возможно, bette r практика будет ссылаться на экземпляр Panda на них через Constructor или прямо работать как параметры.