我需要更新参考资料吗

本文关键字:参考资料 更新 | 更新日期: 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)