2012-03-16 64 views
1

我创建了一个自定义属性,当它被击中时写入控制台,但它似乎没有被击中。这是微软的教程(http://msdn.microsoft.com/en-us/library/sw480ze8.aspx),并且正在2010,.net 4上运行。我猜测它一定是我做错了,但是我看不到它是什么。谁能帮忙?自定义属性没有被击中

这是属性,其代码是从来没有被击中

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] 
public class Author : Attribute 
{ 
    private string _name; 
    private double _version; 

    public Author(string name) 
    { 
     Console.WriteLine(string.Format("author {0} was just created", name)); 

     _name = name; 
     _version = 1.0; 
    } 
} 

这是一个使用它的类 - 它成功地写出构造函数中的代码:

/// <summary> 
/// TODO: Update summary. 
/// </summary> 
[Author("P. Ackerman")] 
public class Ackerman 
{ 
    public Ackerman() 
    { 
     Console.WriteLine("I created Ackerman."); 
    } 
} 

这是控制台应用程序调用它并成功地将代码打印到新的Ackerman()构造函数中:

​​

谢谢!

+0

属性与类型定义不是针对类型的实例,所以你不会看到所谓的属性构造除非你试图检查它 – kaj 2012-03-16 11:25:16

回答

3

不创建类的属性实例,然后创建类的实例。只有这样,你特别要求他们这样的:

var attrib = author1.GetType().GetCustomAttributes(false); 

此代码将触发Console.WriteLine(string.Format("author {0} was just created", name));

+0

谢谢你 - 你是完全正确的。但是如果必须单独调用它,具有属性的意义何在? – rozza 2012-03-16 11:22:30

+1

属性在许多情况下通常用于声明性编程。你可以阅读一些标准的属性,如Serializable,DataMember,ServiceContract等等。例如,您可以使用“作者”属性来显示特定作者的所有类。您还应该阅读关于面向方面的编程,因为它与您试图使用属性完全相同 – Nikolay 2012-03-16 11:32:42