我需要更新参考文献吗?

时间:2014-09-15 15:06:58

标签: c#

我更新了一个库项目方法,

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)'。

4 个答案:

答案 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)