У Рихтера и вообще многих авторов пишут что атрибуты можно ограничить применимость (классам, интерфейсам, методам и т.д. короче все задается флагами AttributeTargets)
Но если обратить внимание на один хитрый атрибут(напишу ниже), то оказывается ограничение можно делать более сложным!
А вот пример этого хитрого и всем знакомого атрибута
[StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct SomeStruct1
{
[FieldOffset(0)]
public bool value;
}
[StructLayout(System.Runtime.InteropServices.LayoutKind.Explicit)]
public struct SomeStruct2
{
[FieldOffset(0)]
public bool value;
}
Как мы видим что атрибут FieldOffset реагирует во время компиляции на значение перечисление LayoutKind
Кто-то реализовывал такие хитрые ограничения атрибутов? Или это чисто фишка компилятора сделана только для FieldOffsetAttribute ???
Я всегда делал проверку на валидность во время выполнения, но считаю иногда очень удобно это делать на уровне компиляции. Кто-нибудь разбирался с этим вопросом?