我知道我可以[AttributeUsage(AttributeTargets.Method)]
用来确保自定义属性只能应用于方法,但是如果自定义属性应用于具有我指定的签名以外的签名的方法,我可以更进一步并得到编译时错误吗?
例如,我可以创建一个只能附加到返回int
并采用单个int
参数的方法的属性吗?
我知道我可以[AttributeUsage(AttributeTargets.Method)]
用来确保自定义属性只能应用于方法,但是如果自定义属性应用于具有我指定的签名以外的签名的方法,我可以更进一步并得到编译时错误吗?
例如,我可以创建一个只能附加到返回int
并采用单个int
参数的方法的属性吗?
但是,如果将自定义属性应用于签名不是我指定的签名的方法,我可以更进一步并获得编译时错误吗?
不,你不能,这根本不支持。
您不能这样做,但您有一个解决方法:.NET Framework 支持方法的输入参数和返回值的属性。
[MyAttribute1]
[return: MyAttribute2]
public int Method([MyAttribute3] int some)
{
return "";
}
如果方法具有MyAttribute1
,MyAttribute2
和,则检查方法的代码可以执行操作MyAttribute3
。
根据您的需要,也许这太丑陋了,但我不知道您的实际要求!
您可以在编译期间使用 PostSharp 应用属性。此链接演示自动添加 DataContract 和 DataMember 属性