【问题标题】:Custom Attribute not being hit自定义属性未命中
【发布时间】:2012-04-01 21:57:22
【问题描述】:

我创建了一个自定义属性,当它被击中时会写入控制台,但它似乎没有被击中。这是微软教程(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.");
    }
}

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

    static void Main(string[] args)
    {
        Ackerman author1 = new Ackerman();
        Console.ReadLine();
    }

谢谢!!

【问题讨论】:

  • 该属性是针对类型定义而不是针对该类型的实例,因此除非您尝试检查它,否则您不会看到调用的属性构造函数

标签: c#-4.0 aop custom-attributes custom-attribute


【解决方案1】:

没有创建类属性的实例,然后创建类的实例。只有这样,您才会像这样专门要求他们:

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

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

【讨论】:

  • 谢谢你 - 你完全正确。但是如果你必须单独调用它,那么拥有一个属性有什么意义呢?
  • 属性在许多情况下很有用,通常用于声明式编程。您可以阅读一些标准属性,如 Serializable、DataMember、ServiceContract 等。例如,您可以使用 Author 属性来显示特定作者的所有类别。您还应该阅读面向方面的编程,因为它与您尝试使用属性所做的几乎完全相同
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 2014-12-27
相关资源
最近更新 更多