9
votes

Élimination des membres qui implémentent Idisposable

Dans mes méthodes d'élimination (comme celle ci-dessous), chaque fois que je veux appeler quelqueobj.dispose () J'ai également un chèque pour ToObj! = NULL.

est-ce à cause du mauvais design de ma part? Est leur moyen plus propre de déterminer que disposer de tous les membres (mise en œuvre Idisposable) utilisée dans un objet est appelé sans risque d'exception nullreference? xxx

merci pour votre intérêt.


0 commentaires

5 Réponses :


0
votes

Seulement vous connaissez la réponse à celle-ci!

Sans voir votre classe entière, il est difficile pour quelqu'un d'autre de dire s'il est possible que ces membres soient jamais nuls lorsque Dispose est appelé.

(bien sûr, en règle générale, il est toujours possible pour un type de référence ou un type de valeur nullable pour être null, il est donc probablement de bonne pratique de toujours inclure ces chèques nuls.)


0 commentaires

5
votes

Peut-être que quelqu'un d'autre peut trimer à ce sujet, mais je ne pense pas personnellement que c'est une faille de conception - juste le moyen le plus sûr de le faire.

Cela dit, rien ne vous empêche d'envelopper votre NULL Vérification et Disposez CODE> Appelez dans une méthode pratique: P>

protected void Dispose(bool disposing)
{
    if (disposing)
    {
        DisposeMember(_splitTradePopupManager);
        DisposeMember(_disposableMember2);
        DisposeMember(_disposableMember3);
    }
}


2 commentaires

D'accord avec ce n'est pas une faille de conception. Peut-être que je suis trop prudent, mais je préfère avoir un chèque null même lorsque je sais certifié que l'objet ne sera jamais nulle quand il s'agit de disposer de jetables.


@Comet: +1, j'ai la même pensée (trop prudente) à l'arrière de l'esprit tout en appelant () sur un objet.



0
votes

La seule autre option que je pouvais penser serait de créer un DisposeoseParamètre Méthode d'assistant contenant un objet en tant que paramètre et uniquement des vérifications s'il s'agit de NULL et de le disposer. De cette façon, vous auriez besoin d'une ligne de code pour en éliminer, mais je ne sais pas si cela le rendrait plus lisible.


0 commentaires

-1
votes

Essayez ceci. XXX


3 commentaires

Je ne suis pas sûr de comprendre ce que vous suggérez ici.


Ce n'était pas moi, mais vérifier si le membre est un Idisposable est un peu idiot, car un appel à membre.Dispose () ne compilerait pas lorsque n'était pas un type jetable.


Stackoverflow.com/questions/2349378/... PS Je n'ai pas bownvote, mais null! = Membre m'a juste rappelé ce poste;)



10
votes

J'aime la solution de @dan Tao, mais c'est bien mieux qu'une méthode d'extension, imo: xxx

Vous pouvez simplement appeler membre.SafeDispose () sur Tout Idisposable dans votre programme sans souci. :)


4 commentaires

Cela ne jette pas une exception de référence nulle lorsqu'elle tente d'appeler la méthode d'extension? Edit-- J'ai écrit une application de test rapide, et cela fonctionne bien!


Non, ce ne sera pas. J'ai utilisé une approche similaire dans un projet (DisposeInnotnull ()).


Nan! Étant donné que l'opérateur de points est juste du sucre syntaxique pour une méthode statique, cela fonctionne très bien. :)


C'est l'une des choses que j'ai l'aimé le plus sur les méthodes de vulgarisation. Malheureusement, dans mon projet actuel, nous travaillons sur 2,0, donc aucun choix de méthodes de vulgarisation.