property - interface mvc c#
implementación de interfaz implícita vs explícita (3)
En términos simples, si una clase hereda de 2 o más interfaces y si las interfaces tienen los mismos nombres de método, la clase no sabe qué método de interfaz se está implementando si utiliza la implementación de interfaz implícita. Este es uno de los escenarios en los que implementaría explícitamente una interfaz.
Implementación de interfaz implícita
public class MyClass : InterfaceOne, InterfaceTwo
{
public void InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
}
interface InterfaceOne
{
void InterfaceMethod();
}
interface InterfaceTwo
{
void InterfaceMethod();
}
Implementación de interfaz explícita
public class MyClass : InterfaceOne, InterfaceTwo
{
void InterfaceOne.InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
void InterfaceTwo.InterfaceMethod()
{
Console.WriteLine("Which interface method is this?");
}
}
interface InterfaceOne
{
void InterfaceMethod();
}
interface InterfaceTwo
{
void InterfaceMethod();
}
El siguiente enlace tiene un excelente video que explica este concepto
Implementación de interfaz explícita
Posible duplicado:
C #: Interfaces: implementación implícita y explícita
¿Alguien explicaría las diferencias entre estas dos bestias y cómo usarlas? AFAIK, muchas clases de pre.2.0 se implementaron sin tipos genéricos, lo que provocó que la última versión implementara ambos tipos de interfaces. ¿Es el único caso por el cual uno necesitaría usarlos?
¿También puedes explicar en profundidad cómo usarlos?
Gracias
Hay una forma más de verlo, desde la implementación laberíntica misma, aquí: http://blogs.msdn.com/cbrumme/archive/2003/05/03/51381.aspx .
Pero, en resumen, la implementación implícita le otorga una conversión de tipo is-a, la implementación explícita no será accesible a menos que el objeto se expulse explícitamente a ese tipo de interfaz.
Hay una buena y bastante detallada publicación en el blog sobre esto.
Básicamente, con la implementación implícita de la interfaz, usted accede a los métodos y propiedades de la interfaz como si fueran parte de la clase. Con implementaciones de interfaz explícitas, solo puede acceder a ellas cuando las trate como esa interfaz.
En términos de cuándo usaría uno sobre otro, a veces tiene que usar la implementación de interfaz explícita ya que tiene una propiedad / método con la misma firma que la interfaz o quiere implementar dos interfaces con las mismas firmas y tiene implementaciones diferentes para esas propiedades / métodos que coinciden.
Las reglas a continuación son del blog de pautas de diseño de Brad Abrams.
- No use miembros explícitos como un límite de seguridad. Pueden ser llamados por cualquier cliente que emita una instancia a la interfaz.
- Utilice miembros explícitos para ocultar detalles de implementación
- Utilice miembros explícitos para aproximar las implementaciones de interfaces privadas.
- Exponga una forma alternativa de acceder a los miembros explícitamente implementados que las subclases pueden anular. Use el mismo nombre de método a menos que surja un conflicto.
También se menciona en los comentarios en el blog de Brad que hay boxeo involucrado cuando se usa implementación explícita en tipos de valores, así que tenga en cuenta el costo de rendimiento.