Question

J'ajoute un code dans un bloc de using dans un programme C #. Je suis farce genre de mon application, ce qui était auparavant autonome dans un organisme existant de code, donc je dois faire un peu de déconner pour obtenir pour l'adapter correctement. Ce qu'il est la fin ressembler est le suivant:

public class WrapperForMyOldApp
{

    public static ItemThatINeed item1;
    public static ItemThatINeed item2;

    public WrapperForMyOldApp () 
    {
        item1 = new ItemThatINeed();
        item2 = new ItemThatINeed();
    }

    public static go()
    {
        // some stuff that i need to do with items 1 and 2
    }
}

public class MainProgram 
{
    .
    .
    .

    public void MethodThatNeedsToMakeUseOfMyApp ()
    {
        ....
        using (WrapperForMyOldApp oldAPp = new WrapperForMyOldApp())
        {
            WrapperForMyOldApp.go();
        }
    }
}

Bon, la question ici est: Ai-je maintenant estropiés les effets de l'utilisation de bloc et / ou créé des effets secondaires particuliers qui pourraient nuire à la MainProgram de classe? Je crois que l'objet et le contenu de Wrapper seront aliénés et de l'exécution continueront comme prévu, mais il est tout ce que je dois être conscient que je donne sur?

merci!

Était-ce utile?

La solution

Pour que cela fonctionne, vous aurez besoin d'avoir WrapperForMyOldApp mettre en œuvre IDisposable.

L'appel Dispose () à WrapperForMyOldApp alors faire votre nettoyage.

Cependant, les objets statiques sont généralement utilisés pour les objets qui ont une durée de vie au-delà du seul objet. En général, pour ce type d'utilisation, vous feriez les instances ItemThatINeed non-statique, les générer dans votre constructeur WrapperForMyOldApp, puis les nettoyer dans WrapperForMyOldApp.Dispose ().

Avec des objets statiques, vous créez potentiellement un cauchemar - vous construisez l'objet, et de dire que vous souhaitez effectuer le nettoyage (à la fin du bloc à l'aide), de sorte que vous méthode Dispose () serait nettoieront les objets statiques. Toutefois, si elles se habituent à nouveau, ce qui devrait arriver? Quel est le comportement correct si vous créez deux instances de WrapperForMyOldApp dans 2 fils? Je considère ces questions si vous voulez le nettoyage déterministe.

Autres conseils

Votre classe wrapper mettre en œuvre IDisposable et vous êtes tout simplement pas le montrer? Si ce n'est pas disponible, alors vous n'avez pas besoin de l'instruction à l'aide du tout.

Eh bien, si WrapperForMyOldApp implémente IDisposable et l'implémentation de Dispose() peut être sûr de se débarrasser de toutes les ressources, il devrait fonctionner ... mais il peut y avoir d'autres effets secondaires. Le code pourrait changer d'état global (statique), tels que la culture, etc. Il pourrait engendrer des fils. Toutes sortes de choses.

Il est pas une mauvaise approche, mais vous devez savoir ce que le code que vous encapsulant Finalité de savoir si Dispose() va faire quoi que ce soit utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top