在 C# 中,当指定属性类应如何使用时,有一个GenericParameter
值在System.AttributeTargets
枚举。我们如何应用这样的属性,语法是什么?
[System.AttributeUsage(System.AttributeTargets
public sealed class MyAnnotationAttribute : System.Attribute {
public string Param { get; private set; }
public MyAnnotationAttribute(string param) { Param = param; }
}
同样的问题也适用于其他外来属性目标,例如System.AttributeTargets.Module
(我什至不知道如何声明主模块以外的模块???),System.AttributeTargets.Parameter
and System.AttributeTargets.ReturnValue
.
// Assembly and module
[assembly: AttributesTest.MyAnnotation("Assembly")]
[module: AttributesTest.MyAnnotation("Module")]
namespace AttributesTest
{
// The attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple = true)]
public sealed class MyAnnotationAttribute : System.Attribute
{
public string Param { get; private set; }
public MyAnnotationAttribute(string param) { Param = param; }
}
// Types
[MyAnnotation("Class")]
public class SomeClass { }
[MyAnnotation("Delegate")]
public delegate int SomeDelegate(string s, float f);
[MyAnnotation("Enum")]
public enum SomeEnum { ValueOne, ValueTwo }
[MyAnnotation("Interface")]
public interface SomeInterface { }
[MyAnnotation("Struct")]
public struct SomeStruct { }
// Members
public class MethodsExample
{
[MyAnnotation("Constructor")]
public MethodsExample() { }
[MyAnnotation("Method")]
public int SomeMethod(short s) { return 42 + s; }
[MyAnnotation("Field")]
private int _someField;
[MyAnnotation("Property")]
public int SomeProperty {
[MyAnnotation("Method")] get { return _someField; }
[MyAnnotation("Method")] set { _someField = value; }
}
private SomeDelegate _backingField;
[MyAnnotation("Event")]
public event SomeDelegate SomeEvent {
[MyAnnotation("Method")] add { _backingField += value; }
[MyAnnotation("Method")] remove { _backingField -= value; }
}
}
// Parameters
public class ParametersExample<T1, [MyAnnotation("GenericParameter")]T2, T3>
{
public int SomeMethod([MyAnnotation("Parameter")]short s) { return 42 + s; }
}
// Return value
public class ReturnValueExample
{
[return: MyAnnotation("ReturnValue")]
public int SomeMethod(short s) {
return 42 + s;
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)