Visual C # – Instance d’access d’object créé dans une classe dans une autre

Je m’excuse par avance avec ce qui sera probablement une réponse assez facile / rapide en fonction de la scope, mais j’ai regardé partout et je suis surpris de ne pas trouver de réponse.

J’ai créé une classe appelée Soldier avec environ 100 variables de classe. J’ai besoin d’un utilisateur pour entrer des informations et construire progressivement un object Solider au cours de plusieurs classes différentes de formulaires (car il y a trop de données à collecter sur un seul).

Je crée une instance (vide) d’un Soldier (tempSoldier) dans Form1.cs et commence à définir les variables de classe de l’object que je collecte auprès de l’utilisateur.

private void button1_Click(object sender, EventArgs e) { Soldier tempSoldier = new Soldier(); tempSoldier.surname = textbox1.text; } 

Ma question: comment puis-je accéder à l’instance d’object (tempSoldier) à partir de Form1.cs dans les autres classes (Form2.cs, Form3.cs …)?

Je devrais mentionner que tous les formulaires (Form1.cs, Form2.cs …) partagent le même espace de noms.

Merci d’avance

Edit: Toutes les solutions ci-dessous fonctionnent, cela dépend donc de celle que vous préférez. Merci pour votre avis. Une petite remarque, assurez-vous de rendre TOUS les modificateurs de classe publics, y compris votre classe personnalisée (dans mon cas, Soldier.cs).

Vous devrez déclarer l’instance Soldier dans une scope plus élevée.

Une façon de procéder consiste à le déclarer dans Form1 , puis à le transmettre à Form2 , etc.

 public class Form1 { private Soldier tempSoldier = new Soldier(); private void button1_Click(object sender, EventArgs e) { tempSoldier = new Soldier(); tempSoldier.surname = textbox1.text; } private void GotoNextStep() { // pass the existing instance to the next form Form2 form2 = new Form2(tempSoldier); // display form 2 ... } } 

Une autre possibilité consiste à utiliser une variable singleton dans une classe à laquelle tous les formulaires ont access.

 public class MyAppManager { private static readonly Soldier _soldier = new Solider(); public static Soldier SoldierInstance { get { return _soldier; } } } private void button1_Click(object sender, EventArgs e) { MyAppManager.SoldierInstnace.surname = textbox1.text; } 

La première approche est acceptable s’il existe une séquence distincte dans les formulaires; ce dernier est préférable si les formulaires de différence peuvent être utilisés à des moments différents ou revisités.

Vous devez créer une propriété publique sur votre formulaire qui expose le soldat. Vous pouvez ensuite accéder à cette propriété à partir des autres formulaires.

 // ... public Soldier Soldier { get; private set; } private void button1_Click(object sender, EventArgs e) { Soldier tempSoldier = new Soldier(); tempSoldier.surname = textbox1.Text; this.Soldier = tempSoldier; } // ... 

Votre classe Form2 pourrait ressembler à quelque chose comme ça:

 public partial class Form2 { private Form1 form1; public Form2(Form1 form1) { this.form1 = form1; this.InitializeComponent(); } public void DoStuffWithForm1() { // ... ssortingng surname = this.form1.Soldier.surname; // ... } } 

Vous pouvez également faire de Soldier une variable statique:

 public static Soldier soldier {get;set;} private void button1_Click(object sender, EventArgs e) { soldier = new Soldier(); soldier.surname = textbox1.text; } 

Code sous d’autres formes:

 Form1.soldier.name ="";