カスタム属性をメソッドにのみ適用できることを確認するために使用できることはわかってい[AttributeUsage(AttributeTargets.Method)]
ますが、さらに進んで、指定した以外のシグネチャを持つメソッドにカスタム属性が適用された場合、コンパイル時にエラーが発生することはありますか?
int
たとえば、1 つのint
パラメーターを返し、受け取るメソッドにのみアタッチできる属性を作成できますか?
カスタム属性をメソッドにのみ適用できることを確認するために使用できることはわかってい[AttributeUsage(AttributeTargets.Method)]
ますが、さらに進んで、指定した以外のシグネチャを持つメソッドにカスタム属性が適用された場合、コンパイル時にエラーが発生することはありますか?
int
たとえば、1 つのint
パラメーターを返し、受け取るメソッドにのみアタッチできる属性を作成できますか?
カスタム属性が指定したものとは異なるシグネチャを持つメソッドに適用された場合、さらに進んでコンパイル時エラーを取得できますか?
いいえ、できません。これは単にサポートされていません。
それはできませんが、回避策があります。.NET Framework は、メソッドの入力パラメーターと戻り値の属性をサポートしています。
[MyAttribute1]
[return: MyAttribute2]
public int Method([MyAttribute3] int some)
{
return "";
}
また、メソッドを検査するコードは、メソッドにMyAttribute1
、MyAttribute2
およびが含まれている場合に実行できますMyAttribute3
。
ニーズによっては、これは醜すぎるかもしれませんが、実際の要件はわかりません!
PostSharp を使用して、コンパイル中に属性を適用できます。このリンクは、DataContract および DataMember 属性を自動的に追加する方法を示しています