5

如果我有类似的功能

public void usefulUtility(parameters...) { 
    string c = "select * from myDB";
    do_a_database_call(c);
}

在很多地方都使用过,将其更改为:

public bool usefulUtility(parameters...) { 
   string c = "select * from myDB";
   bool result = do_a_database_call(c);
   return result;
}

这可能会破坏任何代码吗?

我什么都想不出来……但有可能吗?

4

5 回答 5

3

是的,几乎任何你可能做的影响你的公共界面的事情都是一个突破性的变化。它可能足够小以至于您不在乎,并且实际上没有人或几乎没有人会碰巧遇到极端情况,但 Eric Lippert解释说,有些极端情况(其中许多涉及类型推断)甚至可能导致这些看似无害的变化要打破。

对于您的特定示例,此代码将被该更改破坏。

Action a = usefulUtility;
于 2012-08-09T15:56:25.660 回答
2

像这样的改变肯定会破坏一些东西,无论是在二进制兼容性方面还是在源兼容性方面。

You might want to have a look at this StackOverflow answer and its associated thread, where API-breaking changes are discussed in depth.

于 2012-08-09T15:59:22.837 回答
1

它当然有可能破坏其他一些代码。正如 Lippert 指出的那样,几乎每一次公开的改变都是在一些奇怪的情况下发生的重大改变。

更重要的问题是,它是否可能导致任何东西损坏,答案是否定的。做出这种改变应该是相当安全的,因为人们不太可能做他们必须做的奇怪的事情来导致问题。这并不意味着不可能破坏其他代码,但这超出了合理责任范围。

于 2012-08-09T15:57:11.243 回答
0

您必须实际返回一个 String 或至少为 null 才能编译该方法。您不能再在没有返回的情况下结束该方法。

于 2012-08-09T15:52:11.597 回答
0

如果您想绝对确定不会破坏任何内容,请为返回 String 的方法指定一个不同的名称,并保持 void 方法签名相同。

于 2012-08-09T15:57:28.793 回答