两个属性在语义上相同的TypeIds是不同的还是相同的?

时间:2012-01-04 14:51:33

标签: c# .net reflection typeid

属性TypeId

MSDN states

  

如实现的那样,该标识符仅仅是属性的类型。但是,该唯一标识符用于标识相同类型的两个属性。

但是,预期用途是区分单个属性实例(例如与应用它们的类的不同实例相关联的那些实例),还是属于具有相同类型但由于其属性值的属性在语义上不同?< / p>

例如,说我有以下内容:

public sealed class AmpVolume : System.Attribute
{
    public int MaxVolume { get; set; }
    public AmpVolume(int maxvolume)
    {
        MaxVolume = maxvolume;
    }
}

[AmpVolume(11)]
public class SpinalTapGuitarAmp
{
}

[AmpVolume(11)]
public class SpinalTapBassAmp
{
}

[AmpVolume(10)]
public class RegularAmp
{
}

我应该将TypeId实现为

        get
        {
            return (object)this; //TypeId identifies every individual instance of the attribute
        }

或者

        get
        {
            return (object)MaxVolume; //If we compare two AmpVolume attributes, they should be the same if the volume is the same, right?
        }

1 个答案:

答案 0 :(得分:5)

TypeId属性用于区分同一成员上相同属性的实例。这意味着,只有在使用AttributeUsageAttribute修饰属性时才需要实现它,并声明AllowMultiple=true

例如,如果您使用多个AmpVolume属性修饰类或方法,那么TypeId将区分这些实例。

您可以在MSDN link GetAttributes方法的说明中找到有关该属性的提示。