C#扩展使用几乎相同的方法

时间:2017-06-15 10:57:27

标签: c# extension-methods

对于C#还有点新鲜,我有一个“实用程序”类,我想在多个内部项目中使用它。在一个项目中有一个庞大的(数百个属性,而不是我的......)内部对象(SpecialObj)。其他项目无法访问此对象并将其添加到它们是非启动项,因此基本方法不知道SpecialObj

所以这里是摩擦:MyClass中的MyMethod(不接受这个特殊对象)和MyClassExtension(确实采用特殊对象)具有几乎完全相同的代码,除了中间的一个部分使用这个特殊对象。

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%相同的代码似乎......非常错误。这种情况有没有例子或标准?

2 个答案:

答案 0 :(得分:2)

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

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

并在继承的类

中重用它们
private GameSettings gameSettings;

答案 1 :(得分:0)

我可能会做这样的事情。

 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;
  }
}