2010-12-05 5 views
2

Désolé pour la question de débutant, car je ne fais que commencer avec C#.C#, problèmes avec les objets

J'ai une classe

namespace WindowsFormsApplication1 
{ 
    class people 
    { 
     public int Cash; 
     public string LastName; 
     public void GiveCash(int amount) { this.Cash = this.Cash - amount; } 
     public void ReceiveCash(int amount) { this.Cash = this.Cash + amount; } 

    } 
} 

et j'initialiser deux objets avec elle.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     people viktor = new people() { Cash = 1000, LastName = "Jushenko" }; 
     people julia = new people() { Cash = 500, LastName = "Timoshenko" }; 
    } 

mais plus tard dans le code, je ne peux accéder à aucun de ces objets. Par exemple, je j'utilise

private void button1_Click(object sender, EventArgs e) 
    { viktor.cash = 200; } 

il dit quelque chose comme « Le nom « vainqueur »n'existe pas dans ce contexte ... » qu'est-ce que je fais mal?

Merci!

+0

Une chose mineure, en C# son standard pour les classes de nom en cas de titre par exemple 'People' –

Répondre

3

Vous déclarez des variables locales dans le constructeur Form1. Vous ne pouvez pas y accéder après être sorti de la portée. Vous devez les déclarer comme des champs dans la classe, comme ceci:

public partial class Form1 : Form 
{ 
    private people viktor; 
    private people julia; 
    public Form1() 
    { 
     InitializeComponent(); 
     viktor = new people() { Cash = 1000, LastName = "Jushenko" }; 
     julia = new people() { Cash = 500, LastName = "Timoshenko" }; 
    } 

Les champs viktor et julia font maintenant partie de votre classe, et vous pouvez y accéder à partir de vos méthodes à l'intérieur de la classe.

+0

MERCI, ça a marché! :) – Rob

1

La portée de votre variable victor est locale au constructeur Form1 et n'est pas accessible en dehors de celle-ci.

Vous devez en faire la promotion d'un champ si vous voulez y accéder dans le gestionnaire d'événements:

private people viktor; 

public Form1() 
{ 
    InitializeComponent(); 
    viktor = new people() { Cash = 1000, LastName = "Jushenko" }; 
    people julia = new people() { Cash = 500, LastName = "Timoshenko" }; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    viktor.cash = 200; 
    // Note: the "julia" variable is not in scope here. 
} 
+0

MERCI, ça a marché! :) – Rob

1

Il existe différents champs d'application dont vous devez tenir compte. La raison pour laquelle vous ne pouvez pas accéder à vos variables est qu'elles se trouvent dans une portée à laquelle vous n'avez pas accès.

Une solution serait de déplacer les variables hors de leur portée actuelle:

public partial class Form1 : Form 
{ 
    private people victor = null; 
    private people julia = null; 
    public Form1() 
    { 
     InitializeComponent(); 
     this.viktor = new people() { Cash = 1000, LastName = "Jushenko" }; 
     this.julia = new people() { Cash = 500, LastName = "Timoshenko" }; 
    } 
.... 
+0

MERCI, ça a marché! :) – Rob