Как получить тип который определил атрибут?

У типа определен пользовательский атрибут, нужно во время создания атрибута узнать тип того у кого он определен, т.е в конструкторе аттр, узнать тип его определивший. Пока у меня тип передается в ручным способом при объявлении)) [Replicateble(typeof(GameObject))], в дальнейшем этот атрибут будет виден в иерархии наследования, вот по-этому и необходимо во время создания аттр узнать тип.

/// <summary>
/// Создает новый экземпляр <see cref="ReplicatebleAttribute"/>.
/// </summary>
/// <param name="replicationType">Тип, поля которого будут реплицированы.</param>
public ReplicatebleAttribute(Type replicationType)
{
    ReplicationType = replicationType;
    List<DynamicReplicatebleMember> replicatebleFileds = new List<DynamicReplicatebleMember>();
    MemberInfo[] memebers = ReplicationType.GetMembers(BindingFlags.Instance | BindingFlags.Public);

    Array.ForEach(memebers, (member) =>
     {
         if (!member.IsDefined(typeof(NoneReplicatebleAttribute), false))
         {
             if (member.MemberType == MemberTypes.Field)
                 replicatebleFileds.Add(new DynamicReplicatebleField(((FieldInfo)member).Name));
             else if (member.MemberType == MemberTypes.Property)
                 replicatebleFileds.Add(new DynamicReplicatebleProperty(((PropertyInfo)member).Name));
         }
     });
    ReplicatebleMembers = replicatebleFileds.ToArray();
}

Ответы (1 шт):

Автор решения: RiotBr3aker

Никак, типы знают про свои атрибуты, но не наоборот.

Вариантов не особо много:

  1. То, что вы делаете сейчас - передавать тип руками.
  2. Если вот прямо очень сильно нужно все делать автоматически - можно пройтись по всем типам в вашем случае и посмотреть, нет ли у каждого типа нужного атрибута. Но это уже как-то странно и без use-case'а не ясно, нужно ли вам это вообще.
  3. Более того, объекты атрибутов создаются во время обращения к атрибутам определенного типа/метода/etc с помощью GetCustomAttributes. Вызывающий это код и так знает тип данного класса, а значит, если очень нужно, определить метод у атрибута и передавать в него тип.

Но, повторюсь, с огромной долей вероятности вы делаете что-то не то.

→ Ссылка