如何在运行时转换数据注释?

时间:2015-11-16 14:05:31

标签: c# design-patterns data-annotations

在C#中,DataAnnotations允许您在类,方法或属性上指定一些属性。

我的问题是幕后究竟发生了什么?它是否使用装饰器模式并将类包装到另一个类中,该类还包含额外的行为(例如,字符串的长度,数字的范围等),或者它以完全不同的方式发生?

2 个答案:

答案 0 :(得分:4)

数据注释是属性。通过反射在运行时检索属性。看一下这篇文章。

Attributes Tutorial

答案 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