C# 重写静态类的最佳实践

C# 重写静态类的最佳实践,c#,static,overriding,C#,Static,Overriding,由于无法在c#中重写静态类,如果要重写一个方法,我通常会定义一个与静态方法签名匹配的委托,然后按照以下方式修改该方法: public static void foo(int bar) { if (delegatename!=null) { delegatename.Invoke(bar); } else { //execute previous code as normal } } 知道这有点混乱,我感到一阵内疚 有人能为这个问题提出一个更简洁的解决方案吗(

由于无法在c#中重写静态类,如果要重写一个方法,我通常会定义一个与静态方法签名匹配的委托,然后按照以下方式修改该方法:

public static void foo(int bar)
{
  if (delegatename!=null)
  {
   delegatename.Invoke(bar);
  }
  else
  {
   //execute previous code as normal
  }
}
知道这有点混乱,我感到一阵内疚


有人能为这个问题提出一个更简洁的解决方案吗(除了重写原始结构)

看来您正在使用静态类作为一种方式,为应用程序中的某些资源提供一个单一的访问点。如果是这样的话,你应该考虑使用单体设计模式的实现。这样,您就可以在非静态类上使用继承

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#上实现单例设计模式的更深入的讨论可以在文章中找到。

似乎您正在使用静态类作为一种方式,为应用程序中的某些资源提供单一访问点。如果是这样的话,你应该考虑使用单体设计模式的实现。这样,您就可以在非静态类上使用继承

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#上实现单例设计模式的更深入的讨论可以在文章中找到。

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


单例是很酷的,只是不要使用静态。有很多关于“依赖注入”的资源,谷歌可以很容易地为您找到这些资源。

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


单例是很酷的,只是不要使用静态。有很多关于“依赖注入”的资源,谷歌可以很容易地为您找到这些资源。

如果您能告诉我们这些静态类的最初用途,那会有所帮助。如果您想改变行为,使用静态类听起来像是一个糟糕的计划。尝试重写静态方法(这是不允许的)本质上是一个糟糕的做法。你想完成什么?如果你能告诉我们这些静态类的初衷,那会有所帮助。如果您想改变行为,使用静态类听起来像是一个糟糕的计划。尝试重写静态方法(这是不允许的)本质上是一个糟糕的做法。你想完成什么?