2011-05-09 7 views
9

Me gustaría asegurar que dos interfaces nunca se encuentran en la misma clase en tiempo de compilación, similar a cómo AttributeUsage cheques atributos personalizados en tiempo de compilación.¿Asegurar interfaces mutuamente excluyentes en tiempo de compilación?

ej .:

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

interface B { 
    //... 
} 

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

que, obviamente, puede hacer esto en tiempo de ejecución con la reflexión, pero estoy interesado en una solución en tiempo de compilación.

Me imagino que uno probablemente no exista de fábrica, pero ¿hay alguna manera de crear un atributo personalizado que se ejecute en tiempo de compilación, al igual que AttributeUsage?

+4

No con sólo el normal compilador de C# ... –

+3

Se puede construir una regla de FxCop. – Steven

+0

Curioso por entender el caso de uso que requiere interfaces mutuamente excluyentes ... –

Respuesta

4

Un enfoque diferente podría ser cambiar a clases abstractas.

1

¿Qué hay de darles dos métodos con las firmas idénticas, pero los tipos de retorno incompatibles?

+0

Consideraría esto una advertencia más ya que pueden implementar explícitamente una de las interfaces. Aunque estoy bastante seguro de que no se puede hacer mucho mejor sin una herramienta externa. – ChaosPandion

Cuestiones relacionadas