2010-05-25 74 views
1

由于无法在c#中重写静态类,如果我想重写一个方法,我通常会定义一个匹配静态方法签名的委托,然后沿着:覆盖静态类的最佳实践

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

我感到内疚,因为知道这有点凌乱。

任何人都可以提出一个整洁的解决了这个问题(不是重写原有结构等)

+1

如果你能告诉我们这些静态类是从哪开始的,这将有所帮助。如果你想能够改变行为,那么使用静态类听起来就像是一个糟糕的计划。 – 2010-05-25 09:08:33

+0

尝试重写一个不允许的东西的静态方法,其本质是一种不好的做法。你想达到什么目的? – 2010-05-25 09:25:45

回答

4

看来你使用的是静态类,以此来提供单一接入点的一些资源在应用程序中。如果是这种情况,你应该考虑使用Singleton设计模式的实现。这样做,你可以利用你的非静态类的使用继承。

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 
} 

就如何落实在C#Singleton设计模式更深入的讨论,可以在Implementing the Singleton Pattern in C#文章中找到。

1

考虑使用依赖注入,因为静态单例使得测试隔离基本上不可能,并且可重用性非常痛苦。

单身很酷,只是不使用静态。有很多关于“依赖注入”的资源,Google可以为您轻松找到它。