2010-07-31 17 views
0

J'utilise une liste pour les particules.en utilisant des classes statiques pour les objets globaux en C#

List<Particle> particles; 

Normalement, je place cette liste dans ma classe de simulation. Ce qui calcule la position, la vitesse et d'autres propriétés des particules.

Quelques autres classes ont besoin de ces données de particules pour la sortie et le post-traitement.

est-il OK pour créer une classe statique,

static class Particles 
{ 
    static List<Particles> plist; 
} 

pour accéder aux données de particules d'autres classes?

Répondre

2

Je recommanderais de rester loin des classes/méthodes statiques autant que possible. Ils ont tendance à conduire à un couplage élevé du code. Bien qu'il existe des cas où il est beaucoup plus rapide de les utiliser (avec un peu de chance). Je ne suis pas tout à fait sûr de ce que vous attendez de votre question, mais je recommanderais au moins de changer la classe statique pour exposer une propriété au lieu d'un champ.

public static class Particles 
{ 
    public static List<Particles> PList { get; set; } 
} 

ou

public static class Particles 
{ 
    private static List<Particles> _plist; 

    public static List<Particles> PList 
    { 
     get { return _plist; } 
     set { _plist = value; } 
    } 
} 

De cette façon, vous encapsulez la liste un peu plus. Par exemple, vous pouvez vérifier les valeurs nulles pendant le getter ou le setter.

+2

"Ils ont tendance à conduire à un couplage élevé du code" Oui et le pire, c'est qu'une fois que vous commencez à les utiliser, ils deviennent une pente glissante. Ils sont extrêmement pratiques jusqu'à ce que tout d'un coup ils ne sont pas alors ils sont un cauchemar. Dans les premières versions de développement de mon DAL, j'ai rapidement rendu statique un certain nombre de mes dépôts, une fois que j'ai utilisé un découplage ORM, ce code a été douloureux et long. Je l'ai fait à moi-même et appris à la dure. – joshlrogers

+0

@Josh Amen! Ils sont trop faciles à abuser et après un petit moment vous faites face à une classe de Dieu. L'entreprise pour laquelle je travaille a une norme de codage pour éviter les méthodes statiques. Nous avons été mordus par leur côté pratique trop de fois. –

0

Vous avez au moins deux options:

  1. Créer une propriété IList<Particles> dans chaque classe qui fonctionne sur les particules.

  2. Dans chaque classe qui fonctionne sur des particules, créez un champ privé IList<Particles> et un constructeur qui prend une telle liste en paramètre.

L'une ou l'autre de ces options préservera l'encapsulation de la liste.