2010-05-25 7 views
1

Comme il n'est pas possible de remplacer une classe statique dans C#, si je souhaite remplacer une méthode, je définis généralement un délégué correspondant à la signature de la méthode statique, puis modifiez la méthode selon :Meilleure pratique pour redéfinir les classes statiques

public static void foo(int bar) 
{ 
    if (delegatename!=null) 
    { 
    delegatename.Invoke(bar); 
    } 
    else 
    { 
    //execute previous code as normal 
    } 
} 

Je me sens un petit pincement de culpabilité, sachant que c'est un peu en désordre.

Quelqu'un peut-il proposer une solution plus propre à ce problème (autre que la réécriture de la structure d'origine)

+1

Il serait utile si vous pouviez nous dire à quoi servent ces classes statiques. Si vous voulez pouvoir faire varier le comportement, l'utilisation d'une classe statique ressemble à un mauvais plan. –

+0

Essayez de remplacer une méthode statique, ce qui n'est pas autorisé, est, dans son essence, une mauvaise pratique. Qu'est-ce que vous essayez d'accomplir? –

Répondre

4

Il semble que vous utilisez la classe statique comme un moyen de fournir un point d'accès unique à une ressource dans votre application. Si c'est le cas, vous devriez envisager d'utiliser une implémentation de modèle de conception Singleton. En faisant cela, vous pourriez profiter de l'héritage d'utilisation sur vos classes non statiques.

public abstract class Base { ... } 

public class Impl : Base { ... } 

public class Singleton : Impl 
{ 
    #region Static Members 

    static readonly Singleton _instance = new Singleton(); 

    static Singleton() { } 

    static public Singleton Instance 
    { 
     get { return _instance; } 
    } 

    #endregion Static Members 

    #region Instance Members 

    private Singleton() { } 

    // Method overrides goes here... 

    #endregion Instance Members 
} 

Une discussion plus approfondie sur la façon de mettre en œuvre le modèle de conception singleton sur C# peut être trouvé sur Implementing the Singleton Pattern in C# article.

1

Envisager d'utiliser l'injection de dépendance, car les singletons statiques rendent l'isolation de test essentiellement impossible et la réutilisation extrêmement douloureuse.

Les singletons sont cool, mais ne le faites pas en utilisant la statique. Il existe de nombreuses ressources sur «l'injection de dépendance», que Google peut facilement trouver pour vous.

Questions connexes