C# Attribute的实例化时机
2017年1月27日谁说Attribute特性的实例化是在编译时发生的?
测试以下代码
using System;
using System.Linq;
namespace ConsoleApplication1
{
[MyAttribute("Good")]
class Program
{
static void Main(string[] args)
{
Console.WriteLine("hello world");
//var myAttribute = typeof(Program).GetCustomAttributes(typeof(MyAttributeAttribute), false).FirstOrDefault() as MyAttributeAttribute;
//Console.WriteLine(myAttribute.Name);
Console.ReadKey();
}
}
[System.AttributeUsage(System.AttributeTargets.Class, Inherited = false, AllowMultiple = true)]
sealed class MyAttributeAttribute : Attribute
{
public string Name { get; set; }
// This is a positional argument
public MyAttributeAttribute(string name)
{
Name = name;
throw new NotImplementedException();
}
}
}
我在特性的构造函数中抛出异常,但是编译时并没有异常,说明特性并不是在编译时实例化的。
如果我对中间两行取消注释,则运行时抛出了异常。