09.08.2018 Атрибуты и ограничения
 
У Рихтера и вообще многих авторов пишут что атрибуты можно ограничить применимость (классам, интерфейсам, методам и т.д. короче все задается флагами 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 ???
Я всегда делал проверку на валидность во время выполнения, но считаю иногда очень удобно это делать на уровне компиляции. Кто-нибудь разбирался с этим вопросом?