Должны ли TypeIds двух атрибутов, которые семантически идентичны, быть разными или одинаковыми? - PullRequest
5 голосов
/ 04 января 2012

MSDN сообщает свойства TypeId, что:

Как реализовано, этот идентификатор является просто типом атрибута. Однако предполагается, что уникальный идентификатор будет использоваться для идентификации двух атрибутов одного типа.

Однако предполагается ли использование для различения между отдельными экземплярами атрибутов (например, теми, которые связаны с разными экземплярами класса, к которому они применяются) или между атрибутами, которые имеют одинаковый тип, но из-за значений их свойств семантически различаются?

Например, скажем, у меня было следующее:

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 Ответ

5 голосов
/ 13 января 2012

Свойство TypeId используется для различения экземпляров одного и того же атрибута на одном и том же элементе. Это означает, что его нужно реализовывать только тогда, когда атрибут украшен AttributeUsageAttribute, который объявляет AllowMultiple=true.

Например, если вы украсили бы класс или метод несколькими атрибутами AmpVolume, тогда TypeId будет различать эти экземпляры.

Вы можете найти подсказку о свойстве в примечании по этому MSDN-ссылке для GetAttributes метода.

...