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

このような変更は、バイナリの互換性とソースの互換性の両方の点で、間違いなく問題を引き起こす可能性があります。

この StackOverflow の回答とそれに関連するスレッドをご覧になることをお勧めします。ここでは、API を壊す変更について詳しく説明しています。

于 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 に答える