2012-02-07 5 views
2

Je travaille sur quelque chose et je dois instancier la classe. Ma question est où devrais-je faire cela? Est-ce que je le fais avant ceci:Instancier dans la classe

public partial class Form1 : Form 
    { 
     InputClass myclass = new InputClass(); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


Or 

public partial class Form1 : Form 
    { 

     public Form1() 
     { 

     InputClass myclass = new InputClass(); 

      InitializeComponent(); 
     } 

Voici un autre code je travaille, mais il ne fonctionne pas sur de bien c'est ce que mon code ressemble en ce moment:

public partial class Form1 : Form 
{ 


    InputClass myClass = new InputClass(); 
    myClass.yourname = ""; 
    myClass.Banner = ""; 

public Form1() 
    { 
     InitializeComponent(); 
    } 

Je suis nouveau à C# et j'essaie de comprendre cela. J'ai besoin d'instancier la classe. Ensuite, lorsque le chargement de la page ajouter pour définir le texte des étiquettes de la variable _banner. Ajoutez ensuite du code pour définir la propriété votre nom à partir du texte dans la zone de texte lorsque l'utilisateur appuie sur le bouton. Ensuite, je dois effacer la zone de texte. Je dois également afficher le nom dans une boîte de message de la classe.

class InputClass 
{ 
    public string _banner; 
    private string _yourName; 

    public InputClass(String _banner) 
    { 
     this._banner = _banner; 
    } 

    public string yourName 
    { 
     get { return _yourName; } 
     set { _yourName = value; } 
    } 

} 

}

+1

pourriez-vous préciser ce que vous essayez de dire? – onatm

+0

"ça ne marche pas bien" - Pourriez-vous être plus précis? Avez-vous une erreur de compilation ou le programme ne fonctionne-t-il pas comme prévu? Qu'est-ce qui ne fonctionne pas spécifiquement et quelle est l'erreur exacte que vous obtenez? –

+0

'WindowsFormsApplication1.InputClass' ne contient pas de constructeur qui prend 0 argument \t 'WindowsFormsApplication1.Form1.myClass' est un 'champ' mais est utilisé comme un 'type' \t Les thèses sont les erreurs que je reçois. – snorris

Répondre

5

Si vous souhaitez accéder à votre objet à partir d'autres méthodes dans votre classe, vous devez utiliser un champ membre plutôt que d'une variable locale.

private InputClass myClass = new InputClass { YourName = "", Banner = "" }; 

public Form1() 
{ 
    InitializeComponent(); 
} 

Une autre option est de déclarer un champ membre mais initialiser dans le constructeur:

private InputClass myClass; 

public Form1() 
{ 
    InitializeComponent(); 
    this.myClass = new InputClass { YourName = "", Banner = "" }; 
} 

Ce n'est pas trop utile dans votre cas, mais il peut être utile si vous devez passer paramètres de votre constructeur au constructeur InputClass.

1

Vous pouvez uniquement définir les propriétés dans un corps de fonction! pas dans le contexte de la classe.

L'instanciation de la classe fonctionnerait dans Form1() ou lors de la déclaration. meilleur style de l'OMI dans votre cas serait:

public partial class Form1 : Form 
{ 

    InputClass myclass; 
    public Form1() 
    { 
     InitializeComponent(); 
     myclass = new InputClass(); 
    } 
} 

Cela permet d'utiliser un myClass non seulement dans le constructeur Form1, mais aussi dans toute autre fonction.

1

Tout d'abord, faites la distinction entre Déclaration et Instanciation. Dans votre premier extrait, vous déclarez le membre InputClass dans la portée de classe, ce qui signifie qu'il sera partagé par toutes les méthodes de la classe. Une fois que vous faites cela, peu importe que vous l'instanciez dans le constructeur ou lors de la déclaration, cela revient à la même chose. Deuxièmement, je suppose qu'il s'agit d'un projet ASP.NET, puisque vous faites référence à "chargement de page". Si c'est le cas, n'oubliez pas que votre instance Form1 ne reste pas active entre les chargements de page. Chaque fois que vous rechargez la page, manuellement avec F5 ou via des clics-clics/postbacks, vous créez une nouvelle instance de Form1, qui créera une nouvelle instance de InputClass.

1

Ce que vous faites dans le premier exemple est une déclaration d'une variable membre de Form1 nommée myclass. Vous pouvez attribuer une valeur au même endroit, ce qui est bien:

public partial class Form1 : Form 
{ 
    InputClass myclass = new InputClass(); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
} 

Mais vous ne pouvez généralement pas insérer des instructions de code réel dans votre déclaration de classe (comme l'affectation myClass.yourname = ""). Vous devez les mettre dans le constructeur.Ainsi, une bonne façon de le faire serait:

public partial class Form1 : Form 
{ 
    InputClass myClass = new InputClass(); 

    public Form1() 
    { 
     myClass.yourname = ""; 
     myClass.Banner = ""; 
     InitializeComponent(); 
    } 
} 

Pour effectuer des actions sur le bouton clic, regardez ici: http://msdn.microsoft.com/en-us/library/43sxkdeb(v=vs.80).aspx

Questions connexes