C# 用重复代码c重构静态类#

C# 用重复代码c重构静态类#,c#,generics,static-classes,C#,Generics,Static Classes,我的代码库有几个不同的静态类(例如:FooIO、BarIO),其中包含相同的方法。这些方法在功能上的唯一区别是配置对象(例如:Foo,Bar)和文件名 我将这些方法的实际实现拉入一个名为BaseIO的泛型类中 在每个IO类中,我都有一个静态构造函数,用于创建具有适当类和文件名的BaseIO实例: static FooIO() { configIO = new BaseIO<Foo>("Foo.xml"); } 然而,IO类之间仍然有相当多的重复代码,

我的代码库有几个不同的静态类(例如:FooIO、BarIO),其中包含相同的方法。这些方法在功能上的唯一区别是配置对象(例如:Foo,Bar)和文件名

我将这些方法的实际实现拉入一个名为BaseIO的泛型类中

在每个IO类中,我都有一个静态构造函数,用于创建具有适当类和文件名的BaseIO实例:

static FooIO()
    {
        configIO = new BaseIO<Foo>("Foo.xml");
    }
然而,IO类之间仍然有相当多的重复代码,因为除了构造函数之外,所有东西都是相同的


是否有任何方法可以在不破坏现有依赖关系的情况下从这些类中进一步删除重复代码

使用静态来共享数据是一个典型的错误。除非它是常量或至少是只读的(运行时常量),否则您应该抵制这种冲动。它是其中一种在95%的情况下都能工作的东西,而且非常容易做到,所以当它停止工作时,你已经习惯了

只需创建一个需要实例化的普通类。然后将实例分配给静态字段:

static GenericIO<Foo> FooIO = new GenericIO<Foo>();
static generico FooIO=new generico();

这个简单的更改将允许您无限设置这些设置。您还可以在单个位置更改为其指定的实例。实际上,由于它没有标记为只读,您甚至可以在运行时更改实例。

远离
静态
任何地方使用常规类和重复代码的继承。如果需要类似于单例的行为,请新建类并将其放入DI容器中。
static GenericIO<Foo> FooIO = new GenericIO<Foo>();