具有几乎相同方法的 C# 扩展

C# extension with nearly identical methods

对 C# 还是有点陌生​​,我有一个 "utility" class,我想在多个内部项目中使用它。在一个项目中有一个巨大的(数百个属性,不是我做的...)内部对象 (SpecialObj)。其他项目无权访问此对象,将其添加到它们是行不通的,因此基本方法不知道 SpecialObj

难点在于:MyClass(不采用此特殊对象)和 MyClassExtension(采用特殊对象)中的 MyMethod 具有几乎相同的代码,除了中间的一部分使用此特殊对象。

public class MyClass{
    public string MyMethod (string param1, Dictionary<string, string> param2){
        //some code in here part 1
        //some code in here part 2
    }
}

public class MyClassExtension : MyClass{
    public string MyMethod (string param1, Dictionary<string, string> param2, SpecialOjb param3)
    {
        //some code in here part 1
        //something with param3, my special object
        //some code in here part 2
    }
}

在两种方法中保持 90% 相同的代码似乎......非常错误。这种情况有什么例子或标准吗?

可能我会做这样的事情。

 public class MyClass{
    public virtual string MyMethod (string param1, Dictionary<string, string> param2){
      int i= MyCommonCode.MyCommonMethod();
      //I do whatever I like with i here
    }
}

public class MyClassExtension : MyClass{
    public string MyMethod (string param1, Dictionary<string, string> param2, SpecialOjb param3)
    {
      int i= MyCommonCode.MyCommonMethod();
      //I do whatever I like with i here
    }
}

public class MyCommonCode
{
  public static int MyCommonMethod()
  {
    return 1;
  }
}

您可以将代码拆分成受保护的部分并调用它们

public class MyClass
{
    public string MyMethod (string param1, Dictionary<string, string> param2) 
    {
        ProtectedMyMethodPart1( ... );
        ProtectedMyMethodPart2( ... );
    }

    protected void ProtectedMyMethodPart1( ... )
    {
    }

    protected void ProtectedMyMethodPart2( ... )
    {
    }
}

并在继承的 class

中重用它们
public class MyClassExtension : MyClass
{
    public string MyMethod (string param1, Dictionary<string, string> param2, SpecialOjb param3)
    {
        ProtectedMyMethodPart1( ... );
        // Do something with param3
        ProtectedMyMethodPart2( ... );
    }
}