7

C#仕様(17.2)では、属性を指定するときにいくつかの属性ターゲットがあることを示しています。これは、属性を指定するための「実際の」場所があまりないものに属性を適用する必要がある場合によく見られます。たとえば、returnターゲットはプラットフォームInvokeで頻繁に使用されます。

[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SomeWin32Method(); //Assume this is valid, has a DllImport, etc.

ただし、次のような他の属性ターゲットがあることに気付きましたmethod

[method: DllImport("somelib.dll")]
static extern bool SomeWin32Method();

どのような状況で、method属性ターゲットを明示的に定義する必要がありますか(たとえば、あいまいさを解決するため)、それとも完全を期すためにそこにあるだけですか?

4

1 に答える 1

7

この場合、ターゲットを指定する必要はありません(メソッドの真上にmethodあり、デフォルトのターゲットです)。完全を期すためにターゲットを指定するだけです。クラスにメンバーを追加するときに指定する必要がないのと同じようにprivate、とにかく多くの人が指定します。そして、多くの場合、コードジェネレーターは物事について非常に明確にすることを好みます。

また、このような場合、追加の指定子によって状況が少し明確になると思います。

[method: SomeAttr]
[return: SomeOtherAttr]
int SomeMethod() { return 0; } 
于 2013-03-27T14:30:28.757 に答える