Как сказал Дэниел, вы не можете применять атрибуты во время компиляции.
Но если вы хотите читать данные во время выполнения, зачем вообще беспокоиться об атрибутах и отражении?Вы можете создать абстрактный метод в своем абстрактном классе:
abstract class Base
{
public abstract string Metadata();
}
class Derived1 : Base
{
public override string Metadata()
{
return "Metadata for Derived1";
}
}
class Derived2 : Base // won't compile, since Metadata has not been provided
{
}
Конечно, поведение немного иное.При использовании этой опции вам нужна ссылка на экземпляр производного класса, а не только на информацию о типе.С другой стороны, он избегает отражения.