2010-08-12 2 views
1

J'ai une classe comme suit:Comment vais-je utiliser la variable statique suivante d'une autre classe?

public class Trainee 
{ 

    private static int numberOfTrainee = 30; 

    private string traineeName; 
    private string tarineeId; 
} 

Maintenant, je veux accéder aux données statiques « numberOfTrainee » dans la classe suivante sans créer un objet de la classe « stagiaire » et je ne veux pas écrire getter pour "numberOfTrainee". Parce que, membre statique peut être utilisé uniquement en utilisant "." opérateur.

public class TraineeUI : Form 
{ 
    private void showButton_Click(object sender, EventArgs e) 
    { 
     // I want to access "numberOfTrainee" here. Something like following: 
     // MessageBox.Show("Total number of trainee is: "); 

    } 
} 

Répondre

1

Je ne veux pas de recycler ce que les autres ont dit, mais ....

Vous devez regarder les modificateurs d'accès. Vous dites que vous ne voulez pas rendre public NumberOfTrainee, mais vous pouvez le rendre interne. Ainsi, si Trainee et TraineeUI sont dans le même ensemble, TraineeUI peut accéder au champ Trainee sans que le champ soit exposé à des types en dehors de l'ensemble. Je voudrais en faire une propriété à la place d'un champ cependant.

+0

Merci M. Abboutt pour votre belle suggestion. – Towhid

0

Eh bien, soit vous pouvez le rendre public et puis juste Calll avec:

Trainee.numberOfTrainee 

Ou vous pouvez créer une propriété statique en lecture seule.

public static int NumberOfTrainee 
{ 
    get 
    { 
     return numberOfTrainee; 
    } 
} 
+0

Je ne veux pas rendre public "numberOfTrainee". Alors que dois-je faire? (Peut-être que je pose une question stupide !!) – Towhid

+1

Mais votre besoin/désir d'accéder à la valeur en dehors de la classe signifie que vous voulez le rendre public. Si vous pouvez nous donner des indications sur les raisons pour lesquelles vous ne voulez pas le rendre public, cela nous permettrait peut-être de répondre plus clairement à votre question. –

+0

: Merci ho1. @Daz Lewis :: En fait, j'étais juste curieux de savoir s'il est possible ou impossible d'accéder à des données statiques privées d'une autre classe sans écrire une propriété dans le même assemblage. Merci. – Towhid

3

Vous devriez faire une propriété, comme celui-ci:

public class Trainee 
{  
    private static int numberOfTrainee = 30; 

    public int TraineeCount { get { return numberOfTrainee; } } 

    private string traineeName; 
    private string tarineeId; 
} 

Notez que vous pouvez envisager la sécurité des threads ... il est possible que cette simple mise en œuvre donnera des résultats rassis dans un environnement multi-thread environnement. Faire numberOfTrainee volatile résoudrait cela.

En outre, notez que en faisant ce une propriété plutôt que de donner un accès direct au domaine, vous:

  • peut ajouter une logique supplémentaire si vous souhaitez jamais
  • peut rendre la propriété en lecture seule, mais modifier le champ à partir de la classe
  • encapsulation gardiez intacts: une propriété fait partie de l'API d'une classe, alors qu'un champ est un détail de mise en œuvre
+0

Merci M. Skeet. – Towhid

4

Si vous ne voulez pas un getter pour elle, la seule façon de l'utiliser d'ailleurs sera d'accroître la visibilité, comme ceci:

public class Trainee 
{ 
    public static int NumberOfTrainee = 30; 
    private string traineeName; 
    private string tarineeId; 
} 

// Other code. 
MessageBox.Show("Total number of trainee is: " + Trainee.NumberOfTrainee); 

Cependant, je recommanderais contre faire avec un champ Peut changer. À moins que ce ne soit une constante, vous devez définir un property pour contrôler l'accès à ce champ, statique ou non.

+0

Merci Riche pour votre suggestion liée à la sécurité. – Towhid

Questions connexes