2016-08-25 4 views
0

У меня возникли проблемы с использованием сеттеров и геттеров. Когда я попытался вызвать частный var из класса в другой класс, я не получаю значение var. Вот некоторые фрагменты моего кода для вас, ребята, чтобы проверить.Getter не возвращает значение

Это мой сеттер-геттер для переменной.

class PlayerStats 

    private string _pName; 
    public string pName 
    { get { return _pName; } set { _pName = value; } } 
} 

Здесь я хочу показать свой var.

public void Welcome() 
    { 
     PlayerStats pStats = new PlayerStats(); 
     Header(); 
     Console.WriteLine("Hello!"); 
     Console.WriteLine(pStats.pName); 

    } 

Это метод, где я вставил значение на мой вар (этот метод выполняется перед первым методом приветствия)

 public void Username() 
    { 
     PlayerStats pStats = new PlayerStats(); 
     string name; 
     Header(); 
     Console.Write("\nChoose your USERNAME: "); 
     name = Console.ReadLine(); 
     pStats.pName = name; 
    } 

Ничего этого не выполняется от основного метода. Я думал, что делать свою программу, просто вызывая различные методы из разных классов в основной метод, так это своего рода выглядит следующим образом:

 static void Main(string[] args) 
    { 
     Jobs jobCl = new Jobs(); 
     GUI gui = new GUI(); 
     gui.Header(); 
     gui.StartPage(); 
     gui.Username(); 
     gui.ChoosepJob(); 
     gui.Welcome(); 
     Console.ReadLine(); 
    } 

Когда я называю вар от метода имени пользователя, у меня нет никаких проблем с печатью, но Я не могу заставить его печатать, если я позвоню по другим методам.

Благодарим за помощь, которую вы можете предоставить. Также, если вы можете предложить другой способ сделать это, пожалуйста, не стесняйтесь сказать это мне

+1

В качестве имени пользователя и метода приветствия вы создаете новый экземпляр класса PlayerStats, который является локальным для этого метода, вам нужно использовать тот же экземпляр в обоих случаях. –

ответ

2

Не делайте новый PlayerStats каждый метод, сделайте его один раз вне методов, затем передайте его каждому из них , Вы, вероятно, имеют те же проблемы с Jobs и что, вероятно, должно быть передано, чтобы ChoosepJob

static void Main(string[] args) 
{ 
    PlayerStats pStats = new PlayerStats(); 
    Jobs jobCl = new Jobs(); 
    GUI gui = new GUI(); 
    gui.Header(); 
    gui.StartPage(); 
    gui.Username(pStats); 
    gui.ChoosepJob(jobCl); 
    gui.Welcome(pStats); 
    Console.ReadLine(); 
} 

public void Welcome(PlayerStats pStats) 
{ 
    Header(); 
    Console.WriteLine("Hello!"); 
    Console.WriteLine(pStats.pName); 

} 

public void Username(PlayerStats pStats) 
{ 
    string name; 
    Header(); 
    Console.Write("\nChoose your USERNAME: "); 
    name = Console.ReadLine(); 
    pStats.pName = name; 
} 
+0

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

0

Ваш метод печати здесь создает новый экземпляр PlayerStats

public void Welcome() 
{ 
    PlayerStats pStats = new PlayerStats(); 
    Header(); 
    Console.WriteLine("Hello!"); 
    Console.WriteLine(pStats.pName); 

} 

одной вы создаете в здесь не используются в Welcome() методы

public void Username() 
{ 
    PlayerStats pStats = new PlayerStats(); 
    string name; 
    Header(); 
    Console.Write("\nChoose your USERNAME: "); 
    name = Console.ReadLine(); 
    pStats.pName = name; 
} 

Создать один экземпляр в вашем главном следовать через как т он следует за следующим:

public string Username() 
{ 
    Header(); 
    Console.Write("\nChoose your USERNAME: "); 
    name = Console.ReadLine(); 
    return name; 
} 

public void Welcome(PlayerStats pStats) 
{ 
    Header(); 
    Console.WriteLine("Hello!"); 
    Console.WriteLine(pStats.pName); 
} 

static void Main(string[] args) 
{ 
    PlayerStats pStats = new PlayerStats(); 

    Jobs jobCl = new Jobs(); 
    GUI gui = new GUI(); 
    gui.Header(); 
    gui.StartPage(); 
    pStats.pName = gui.Username(); 
    gui.ChoosepJob(); 
    gui.Welcome(pStats); 
    Console.ReadLine(); 
}