AttributeUsageがコンパイル時にカスタム属性をチェックする方法と同様に、コンパイル時に2つのインターフェイスが同じクラスで検出されないようにしたいと思います。
例えば:
[InterfaceUsage(MutuallyExclusive = typeof(B))]
interface A {
//...
}
interface B {
//...
}
class C : A, B { //should throw an error on compile time
//...
}
実行時にリフレクションを使用してこれを実行できることは明らかですが、コンパイル時のソリューションに興味があります。
箱から出してすぐには存在しないと思いますが、AttributeUsageのように、コンパイル時に実行されるカスタム属性を作成する方法はありますか?