16

MSDNのVS2010の名前付き引数とオプションの引数(C#プログラミングガイド)では、C#のオプションのパラメーターについて説明し、期待どおりのコードを示しています。

public void ExampleMethod(int required, 
    string optionalstr = "default string", 
    int optionalint = 10)

わかりました、しかしそれはまた言います:

.NETOptionalAttributeクラスを使用してオプションのパラメーターを宣言することもできます。OptionalAttributeパラメーターはデフォルト値を必要としません。

MSDNのOptionalAttributeページを読み、オンラインで検索を行いました(これは、OptionalAttributeパラメーターをC#で使用できないと主張する多くの人々を示しています-これらのコメントはC#4より前に作成されたと思いますか?)、答えが見つかりません2つの質問に:

OptionalAttributeを使用してC#パラメーターをオプションとして定義する場合:

  1. そのメソッドを呼び出し、そのパラメーターの値を指定しない場合、どの値が使用されますか?
  2. その値はコンパイル時または実行時に評価されますか?
4

1 に答える 1

13

ルールは次のとおりです。

タイプのパラメータを除くすべての場合object、それは。と同等であることに注意してくださいdefault(T)

C#4.0の仕様では結果がどうなるかが示されていなかったので、少し驚いたのですが、そこにあると期待していました。

また(コメントでScott Rippeyによって示されているように)、これはコンパイル時に評価されます。これは実行時の操作ではありません。つまり、すでにデプロイされている他のアセンブリでこのメソッドを呼び出した場合、オプションの値。アセンブリ内のメソッドに対して呼び出しを行うすべてをコンパイルしない限り、メソッドに渡されるデフォルトは変更されません。

于 2010-08-05T15:28:03.343 に答える