我更新了一个库项目方法,
public static void EatFruit(string a, string b)
到
public static void EatFruit(string a, string b, bool IsEatFruit = false)
现在有数百个项目使用这个库,我是否需要在所有项目和解决方案中更新库dll的引用?
我更新了服务器,他们都因此错误而失败,
找不到方法void EatFruit(System.String,System.String)'。
答案 0 :(得分:11)
我是否需要在所有项目和解决方案中更新库dll的引用?
是。 C#是一种静态类型语言,您已经更改了方法签名。您可以尝试稍微不同的重构方法,只需添加新功能而不是替换现有功能:
public static void EatFruit(string a, string b)
{
// change the BODY of the existing method,
// but not its SIGNATURE.
EatFruit(a, b, false);
}
public static void EatFruit(string a, string b, bool IsEatFruit)
{
// move the BODY of the existing method here.
// this is a NEW method unknown to existing clients.
}
使用这种方法,您不需要更新现有客户端,因为他们仍然可以使用相同的签名调用相同的方法。不过,新客户也可以调用新方法。
答案 1 :(得分:4)
是的,你需要在那里更新它。
只需使新方法重载并强制旧方法调用它,就有可能实现解决方案。
请执行以下操作:
public static void EatFruit(string a, string b)
{
EatFruit(a,b,false);
}
public static void EatFruit(string a, string b, bool IsEatFruit = false)
答案 2 :(得分:2)
如果旧项目不需要IsEatFruit
参数,只需在库项目中使用两个函数:
public static void EatFruit(string a, string b)
public static void EatFruit(string a, string b, bool IsEatFruit = false)
答案 3 :(得分:0)
即使是可选参数,您也必须更新参考文献,如果您不想这样做,只需创建新方法。
public static void EatFruit(string a, string b)
{
}
public static void EatFruit(string a, string b, bool IsEatFruit = false)
{
}
http://en.wikipedia.org/wiki/Polymorphism_(computer_science)