我需要更新参考资料吗
本文关键字:参考资料 更新 | 更新日期: 2023-09-27 18:22:05
我更新了一个库项目方法
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)".
我需要更新所有项目和解决方案中库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.
}
使用这种方法,您不需要更新现有的客户端,因为它们仍然可以使用相同的签名调用相同的方法。不过,新客户端也可以调用新方法。
是的,您需要在那里更新它。
有一个可能的解决方案,只需让新方法过载,并迫使旧方法调用它
只需执行以下操作:
public static void EatFruit(string a, string b)
{
EatFruit(a,b,false);
}
public static void EatFruit(string a, string b, bool IsEatFruit = false)
如果旧项目不需要IsEatFruit
参数,只需在库项目中使用两个函数:
public static void EatFruit(string a, string b)
public static void EatFruit(string a, string b, bool IsEatFruit = false)
即使是可选参数,您也必须更新引用,如果您不想这样做,只需创建新方法即可。
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)