Допустимая цель атрибута в C#
Цель атрибута проверяется на этапе компиляции. Если цель не входит в AttributeTargets, проект не соберется.
Так метка шага остаётся у метода и не переходит на весь тип.
Пометим метод Run и вызовем его. Если повесить Step на класс Worker, компилятор выдаст ошибку CS0592: цель не входит в AttributeTargets.Method:
new Worker().Run();
[AttributeUsage(AttributeTargets.Method)]
class StepAttribute : Attribute { }
class Worker
{
[Step]
public void Run() => Console.WriteLine("run"); // выведет "run"
}
Разрешите атрибут только для полей, пометьте поле id в классе Node и выведите его значение.