2017-11-02 6 views
0

私は、基礎となる概念は削除されているので(実際には完全にサポートされていない)廃止されている方法があります。だから、メソッドは実装することができませんと私はthrow new NotSupportedException()を作った。それはまた、Obsolete属性のerrorパラメータを指定してコンパイルエラーを引き起こすことが理にかなっていますか?または、私がそれを行うつもりならば、私はちょうど任意の値を返すべきです(メソッドは決して実行されないので)?誰かがベストプラクティスの文書化に私を説明したりリンクしたりすることはできますか?[「...」、真]私は廃止されたような方法をマークすると、戻り値がどうあるべきか?任意の値?

+1

「NotSupportedException」をスローすると何も返す必要はありません。それは私にとっては最高のアイデアのようだ。 – Blorgbeard

答えて

1

あなたは常に例外をスローする[Obsolete]メソッドの実装を変更しないでください。

あなたはこの属性の全目的を破っています。あなたは、機能しているメソッドを廃止されたものとしてマークします。これは、あなたのAPIの次のリリースでは、

法は時代遅れとしてマークされている間、他の開発者は自分のコードに取り組み、新しい変化に対処するためにいくつかの時間を持っています。コードを分割するのではなく、

あなたは常に例外をスローしようとしている場合、あなたはより良い完全にそれを削除するか、同じ実装を持っていますが、[Obsolete]としてそれをマークしたときにその適切なそれを完全に削除します。

from MSDN

廃止された属性は、もはや使用ためをお勧めします一つとして、プログラムの実体をマーク。廃止とマークされたエンティティを使用するたびに警告またはエラーが発生する

これは常に例外をスローし、それはもはや機能しないと言ったのですか?いいえ。あなたの方法がもはや機能しない場合、あなたは何らかの形でそれを働かせて、古いものとしてマークするか、または完全に削除する必要があるように、あなたは急変しました。

もう一つの良い点、

廃止された属性は、引数なしで使用されますが、項目は廃止され、何の代わりに使用することは推奨される理由の説明を含むことができます。

+1

'Obsolete [..、true]'は、コンパイルエラーを生成します。「廃止とマークされたエンティティの使用は、その後、警告**またはエラー**を生成します。したがって、「それはいつも例外を投げ、それはもはや働かないと言ったのですか? - それはコンパイル時のエラーを除いてかなりそうです。それは '[Obsolete]'属性だけを使った変更です。したがって、もしあなたがそうしているならば、実装を削除することもできます。あなたが何かを投げたり返さなければならないので例外が妥当と思われます。そのようにして、あなたのメソッドを呼び出すためにリフレクション・フェナニガンを使用しても、実行時例外が発生します。 – Blorgbeard

関連する問題