2017-09-27 5 views
-3

Je suis nouveau en C#. J'ai cherché sur le web sans succès sur la recherche d'une réponse à ma question, peut-être que c'est seulement un terme/syntaxe qui me manque. J'apprends un programme écrit par quelqu'un d'autre. Le programme comprend des classes dans différents fichiers qui sont inclus dans le projet.Déclaration d'instance de classe C#

au fichier principal de programme au lieu de la façon dont je sais pour déclarer une nouvelle instance de ces classes cette méthode est utilisée:

namespace Technology_A3000_A4_A42107 
{ 
    public partial class FormTechnology : Form 
    { 
     ... 
     private AST_NET _device; 
     private ClassTechnology _technology; 
     private ClassGain _gain; 
     .... 
    } 


      public FormTechnology() 
     { 
      ... 
      _device = new AST_NET(); 
      _technology = new ClassTechnology(_device); 
      _gain = new ClassGain(); 
      .... 
     } 

    ....  

ce qui se fait ici exactement? est-ce que cela équivaut à écrire sur la rangée ci-dessous, ou est-ce nécessaire en raison d'un fichier externe ou d'une autre propriété des classes?

private AST_NET _device = new AST_NET(); 

Merci à l'avance et désolé si ce n'est pas une question appropriée. Amitai

+0

Copie possible de [initialisation de variable de membre C#; meilleure pratique?] (https: // stackoverflow.com/questions/298183/c-sharp-membre-variable-initialisation-best-practice) – UnholySheep

Répondre

0

public FormTechnology() 
 
     { 
 
      ... 
 
      _device = new AST_NET(); 
 
      _technology = new ClassTechnology(_device); 
 
      _gain = new ClassGain(); 
 
      .... 
 
     } 
 
     
 

Ce FormTechnology est le constructeur de la FormTechnology de classe. Lorsque vous créez une instance de FormTechnology, il appelle le constructeur. En conséquence de cela, il va créer l'instance des classes ci-dessous

  _device = new AST_NET(); 
 
      _technology = new ClassTechnology(_device); 
 
      _gain = new ClassGain();

0

Le compilateur C# (comme Java) crée une sortie comme

new Form().ctor() 

ctor() est le constructeur vous définissez comme ceci

public Form(){ 
    // Some code 
} 

Fondamentalement, le custructor est une fonction appelée droite après créant une nouvelle instance d'une classe. Vous ne pouvez pas empêcher cela. Donc je pense (pas exactement sûr) mais l'initialisation de classe est faite avant le constructeur. Ainsi, des valeurs de ce type

public int value = 10; 

sont attribuées avant le constructeur. Corrigez-moi si je me trompe.

Cependant c'est un mauvais design parce que vous ne pouvez pas avoir des conditions.

  • Dans un constructeur, vous pouvez définir des valeurs de façon dynamique.
  • Lors de l'initialisation du champ (voir ci-dessus), les valeurs doivent être connues au moment de la compilation.

Espérons que cela aide?

+0

Je pense que le compilateur réécrit les initialisations de champ à effectuer dans le constructeur. – thisextendsthat

+0

Ouais semble vrai si vous lisez la question en double lié – Meikel