Обеспечить взаимоисключающие интерфейсы во время компиляции?

Я хотел бы убедиться, что два интерфейса никогда не будут найдены в одном классе во время компиляции, аналогично тому, как AttributeUsage проверяет пользовательские атрибуты во время компиляции.

например:

[InterfaceUsage(MutuallyExclusive = typeof(B))]
interface A {
    //...
}

interface B {
    //...
}

class C : A, B { //should throw an error on compile time
    //...
}

Я, очевидно, могу сделать это во время выполнения с отражением, но меня интересует решение во время компиляции.

Я полагаю, что такого, вероятно, не существует из коробки, но есть ли способ создать настраиваемый атрибут, который запускается во время компиляции, похоже на AttributeUsage?

10
задан Iain Sproat 9 May 2011 в 12:54
поделиться