Понятие атрибутов «копирование» отсутствует. Тем не менее, вы можете сделать что-то значимое в коде, который проверяет, применяется ли этот атрибут. Вы можете использовать другой атрибут, который сообщает коду, что он должен использовать другой тип для проверки атрибута [Обязательный].Например:
[AttributeUsage(AttributeTargets.Class)]
public class AttributeProviderAttribute : Attribute {
public AttributeProviderAttribute(Type t) { Type = t; }
public Type Type { get; set; }
}
Что вы бы использовать так:
public class Foo {
[Required]
public string Name { get; set; }
}
[AttributeProvider(typeof(Foo))]
public class Bar {
public string Name { get; set; }
}
код, который проверяет наличие атрибута может выглядеть следующим образом:
static bool IsRequiredProperty(Type t, string name) {
PropertyInfo pi = t.GetProperty(name);
if (pi == null) throw new ArgumentException();
// First check if present on property as-is
if (pi.GetCustomAttributes(typeof(RequiredAttribute), false).Length > 0) return true;
// Then check if it is "inherited" from another type
var prov = t.GetCustomAttributes(typeof(AttributeProviderAttribute), false);
if (prov.Length > 0) {
t = (prov[0] as AttributeProviderAttribute).Type;
return IsRequiredProperty(t, name);
}
return false;
}
Обратите внимание, как этот код позволяет поставщик атрибутов должен быть прикован.
Просто убедитесь, что вы имеете в виду значение Name или вы имеете в виду атрибут, украшающий свойство Name? Вы хотите, чтобы Bar.Name был равен Foo.Name или что Bar.Name будет украшено [Обязательно]? – Elisha
@ Elisha Bar.Name будет украшен Обязательным – Omu