Как получить тип который определил атрибут?
У типа определен пользовательский атрибут, нужно во время создания атрибута узнать тип того у кого он определен, т.е в конструкторе аттр, узнать тип его определивший. Пока у меня тип передается в ручным способом при объявлении)) [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
→ Ссылка
Никак, типы знают про свои атрибуты, но не наоборот.
Вариантов не особо много:
- То, что вы делаете сейчас - передавать тип руками.
- Если вот прямо очень сильно нужно все делать автоматически - можно пройтись по всем типам в вашем случае и посмотреть, нет ли у каждого типа нужного атрибута. Но это уже как-то странно и без use-case'а не ясно, нужно ли вам это вообще.
- Более того, объекты атрибутов создаются во время обращения к атрибутам определенного типа/метода/etc с помощью
GetCustomAttributes. Вызывающий это код и так знает тип данного класса, а значит, если очень нужно, определить метод у атрибута и передавать в него тип.
Но, повторюсь, с огромной долей вероятности вы делаете что-то не то.