AttributeUsage в C#
На сам класс атрибута ставят AttributeUsage. В скобках указывают допустимую цель из перечисления AttributeTargets.
Без ограничения атрибут можно было бы повесить куда угодно, и ошибку поймают только тесты.
Разрешим атрибут только для классов и создадим панель. Строка "ready" просто печатается в консоль: файл с пометкой на классе собрался. Если повесить Shell на метод, компилятор остановится с ошибкой CS0592:
Panel ui = new Panel();
Console.WriteLine("ready");
[AttributeUsage(AttributeTargets.Class)]
class ShellAttribute : Attribute { }
[Shell]
class Panel { }
Ограничьте свой атрибут только свойствами и повесьте его на свойство Title класса Note.