在C#中,DataAnnotations允许您在类,方法或属性上指定一些属性。
我的问题是幕后究竟发生了什么?它是否使用装饰器模式并将类包装到另一个类中,该类还包含额外的行为(例如,字符串的长度,数字的范围等),或者它以完全不同的方式发生?
答案 0 :(得分:4)
数据注释是属性。通过反射在运行时检索属性。看一下这篇文章。
答案 1 :(得分:2)
除了Dan的回答,理解它们的最好方法是创建一个......
void Main()
{
Console.WriteLine (Foo.Bar.GetAttribute<ExampleAttribute>().Name);
// Outputs > random name
}
public enum Foo
{
[Example("random name")]
Bar
}
[AttributeUsage(AttributeTargets.All)]
public class ExampleAttribute : Attribute
{
public ExampleAttribute(string name)
{
this.Name = name;
}
public string Name { get; set; }
}
public static class Extensions
{
public static TAttribute GetAttribute<TAttribute>(this Enum enumValue)
where TAttribute : Attribute
{
return enumValue.GetType()
.GetMember(enumValue.ToString())
.First()
.GetCustomAttribute<TAttribute>();
}
}
// Define other methods and classes here