TypeId
的
如实现的那样,该标识符仅仅是属性的类型。但是,该唯一标识符用于标识相同类型的两个属性。
但是,预期用途是区分单个属性实例(例如与应用它们的类的不同实例相关联的那些实例),还是属于具有相同类型但由于其属性值的属性在语义上不同?< / 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?
}
答案 0 :(得分:5)
TypeId属性用于区分同一成员上相同属性的实例。这意味着,只有在使用AttributeUsageAttribute
修饰属性时才需要实现它,并声明AllowMultiple=true
。
例如,如果您使用多个AmpVolume属性修饰类或方法,那么TypeId将区分这些实例。
您可以在MSDN link GetAttributes
方法的说明中找到有关该属性的提示。