2012-05-30 10 views
9

注:既にmsdnを確認しましたが、実際の質問には対応していません。下記を参照してください。.NETの[Obsolete(string、bool)]属性の使用

私はクラスのいずれかで(当然廃止された)コンストラクタでobsolete属性を使用しようとしています。ここにシナリオがあります:

既存のコードとデプロイされたコードに影響を与えずに、開発者に新しいコンストラクタを強制的に更新させたいと考えています。このようにして、私は自分のコードをプロダクションに配備できますが、開発者の観点からは、コードに入るたびに無視するだけの "警告"を表示するのではなく、現状はもはやokではないため、コンパイルエラーです。

私の質問は、これは開発者だけ、またはすべての呼び出し側アプリケーションに影響するのでしょうか、それとも間違っているのでしょうか?

サンプルコード:

public class MyClass 
{ 
    private string _userID; //new code 

    [Obsolete("This constructor is obsolete, please use other constructor.", true)] 
    public MyClass() 
    { 
     _userID = ""; //defaulting to empty string for all those using this constructor 
    } 

    public MyClass(string userID) 
    { 
     _userID = userID; //this is why they need to use this constructor 
    } 
} 

任意およびすべてのヘルプは理解されるであろう、事前に感謝!

+1

実際には良い質問です。しかし、率直に言って、なぜあなたは単にそれを試してみませんか?テストはそれほど難しくないようです。しかし、違反はありません。 –

+0

私はそれがアセンブリ参照に対してコンパイルする人に影響すると信じています。 –

+0

私はそれをテストしようとしていない唯一の理由は非常に時間のためにcrunchedと誰かがすでに知っている場合私はチートを知っていたので考えた:) – IWriteApps

答えて

11

はい、これは主にコンパイラに影響します。コードでこの属性が明示的にチェックされていない限り、事前ビルドされたコードは影響を受けません。たとえば、一部のシリアライゼーションコード(XmlSerializer、IIRC)がこれをチェックします。つまり、でない可能性があります。副作用... ですが、主に既存のコードは次にコンパイルするまで影響を受けません。

もちろん、動的コンパイルを使用するもの(たとえば、事前コンパイルなしのASP.NET)からこのコードを使用している場合、すべての賭けはオフです。

3

この属性は、コンパイラへの命令にすぎません。すでに既存のバイナリでもコンストラクタを使用できます。

2

So my question is, will this affect only developers, or all calling apps, or do I have the whole thing wrong?

これは、コンパイル時にコンパイラによってのみ使用されます。既にデプロイされているアプリケーションには影響しません。

このように、これは達成しようとしている動作をします。

2

これは既に廃止されているため、追加のヘルプは必要ありません。コンパイル時の警告ではなく、エラーが発生します。

error CS0619: 'ConsoleApplication1.MyClass.MyClass()' is obsolete: 'This constructor is obsolete, please use other constructor.'

+0

私はこの非常にクラスから知っている質問は、警告。オーバーロードされた属性を使用してエラーを表示すると、エラーが表示されますが、既存のコードを使用しているユーザーには影響しません。 – IWriteApps

+0

正確には、ObsoleteAttributeの2番目のパラメータがtrueの場合のみ、コンパイラはエラーを発行します。そうしないと、デフォルトでコンパイラは警告を出力します(warnings-as-errorsを有効にしてコンパイルしない限り)。 –

+1

'bool error'引数をとり、' true'を渡すコンストラクタオーバーロードを使用すると警告ではありません。あなたは何をしているのですか?既存のコードは影響を受けず、コンパイラのみが属性をチェックします。 –

関連する問題