Обеспечить взаимоисключающие интерфейсы во время компиляции? - PullRequest
10 голосов
/ 09 мая 2011

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

например:.

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

interface B {
    //...
}

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

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

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

Ответы [ 2 ]

6 голосов
/ 09 мая 2011

Другой подход может состоять в том, чтобы изменить их на Абстрактные классы.

2 голосов
/ 09 мая 2011

Как насчет предоставления им двух методов с одинаковыми сигнатурами, но несовместимыми типами возвращаемых данных?

...