2015-08-17 3 views
-3

j'ai deux classes:objets Initialiser et réutilisation dans C#

public class Orders 
{ 
    public int OrderId { get; set; } 
    private List<OrderLine> OLines; 
} 

public class OrderLine 
{ 
    public int ProductId { get; set; } 
    public int Qty { get; set; } 
} 

Mon code sera, à un moment donné, ont une seule instance des ordres de classe de classe mais les commandes peuvent avoir des instances de multiples de OrderLines

Quelle est la manière la plus propre de créer des objets et de les supprimer chaque fois que cela est nécessaire dans le code?

Est-ce que cela suffira?

private Orders sampleorder; 

if (sampleorder ==null) 
{ 
    sampleorder = new Orders(); 
} 
else 
{ 
    sampleorder = null; 
    sampleorder = new Orders(); 
} 

Ce que je suis en train de faire est au début, je veux initialiser l'objet puis, lorsque l'ordre est terminé, je veux nettoyer tous les membres de cet objet et le réutiliser du début avec des valeurs initialisés.

+2

ne pas réutiliser des objets. le garbage collector est assez intelligent. –

+0

Qu'est-ce que la défausse? – dman2306

+0

désolé édité que – JanetOhara

Répondre

1

Avec « défausser » vous pouvez dire

Libérant la mémoire utilisée par l'objet: la plupart des

Il est possible de forcer la collecte des ordures en appelant à frais virés, mais la Cela devrait être évité car cela pourrait créer des problèmes de performance.

msdn

En utilisant un tout nouvel objet dans la même variable/propriété:

Dans ce cas, il suffit de créer une nouvelle instance de l'objet, l'assigner à la variable/propriété et laisser le garbage collector faire son travail pour nettoyer les références inutilisées

+0

ce qui signifie que lorsque j'ai terminé le traitement d'une commande puis d'initialiser avant de travailler avec la prochaine commande, je dois simplement l'appeler \t \t \t \t sampleorder = new Orders () \t \t J'avais juste peur que si je l'appelle sampleorder = null puis utilisez ceci pour la prochaine commande alors garbage collector sera appelé plus tard \t et gâcher l'ordre actuel, je travaille avec – JanetOhara

+1

Exactement. votre échantillon est juste un endroit où vous stockez une référence à votre objet. –

-1

Ceci vous assurerait que vous avez une liste dans votre classe tout le temps.

public class Orders 
{ 
    public int OrderId { get; set; } 

    private List<OrderLine> oLines; 
    public List<OrderLine> OLines 
    { 
     get 
     { 
      if (oLines == null) 
       oLines = new List<OrderLine>(); 
      return oLines; 
     } 
    } 
} 

public class OrderLine 
{ 
    public int ProductId { get; set; } 
    public int Qty { get; set; } 
} 
0

Les objets de puits sont automatiquement éliminés lorsqu'ils sont hors de portée. Vous voulez donc que l'objet parent "Orders" reste actif pendant que ses objets internes doivent être supprimés.

Si vous souhaitez avoir une instance de l'objet parent. Pensez à utiliser "KeepAlive" afin de conserver l'objet parent en vie aussi longtemps que vous le souhaitez (c'est-à-dire hors de sa portée normale). Ensuite, en utilisant cet objet parent (orders), manuellement dispose de ses membres (OrderId, Olines) quand ils ne sont plus nécessaires.