具有几乎相同方法的 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( ... );
}
}
对 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( ... );
}
}