El compilador de C# parece indicar explícitamente todas las interfaces que se implementan y sus clases base. Las especificaciones CLI dicen que esto no es necesario. He visto otros compiladores que no emiten esto explícitamente, y parece funcionar bien. ¿Hay alguna diferencia o razón por la C# hace esto?¿Por qué el compilador de C# declara explícitamente todas las interfaces que implementa un tipo?
El MSIL que el C# en la parte inferior genera para B es:
.class private auto ansi beforefieldinit B
extends A
implements IAdvanced,
ISimple
No debe necesitar especificar ISimple, porque A lo implementa como lo hace IAdvanced. C# Código:
interface ISimple {
int Basic { get; }
int Zero { get; }
}
interface IAdvanced : ISimple {
string Major { get; }
}
class A : ISimple {
int ISimple.Basic {
get { return 1; }
}
int ISimple.Zero {
get{ return 0;}
}
}
class B : A, IAdvanced {
string IAdvanced.Major {
get { return "B"; }
}
}
IIRC, todo está claramente definido en la especificación. Así que no adivine aquí. – leppie
¡Iré por la puerta número tres! ;-) – peSHIr
Sí, la Partición II de las especificaciones CLI deja bastante claro que no es necesario. No vi si decía que agregar algo realmente hace algo. – MichaelGG