Supresión de miembros mediante la implementación de la interfase explícita en C#

La Implementación de Interfaz Explícita es una técnica compleja y raramente utilizada que permite a una sola clase heredar de múltiples interfaces que tienen la misma firma de método.La implementación explícita de cada interfaz, adelantando el nombre de la interfaz al método, permite que exista la misma firma de método en la misma clase.No lo demostraré aquí, pero hay muchos ejemplos de ello en línea.Hay otro beneficio de implementar explícitamente una interfaz, y es ocultar el acceso a los miembros a través de la referencia de clase.Voy a crear un ejemplo de esta técnica usando un patrón de diseño de fábrica y una clase Fruit y una aplicación de consola que se puede pasar a través de F11.Si crea una nueva aplicación de consola C# en Visual Studio, copie y pegue todo el código que se muestra a continuación, puede pasar por (F11) el código para ver cómo funciona.utilizando System;
namespaceEsconderMiembrosViaInterfazExplícitaImplementación
{
publicenum FruitType
{
Manzana,
Naranja,
Plátano
}
publicclassFactory
{
Publicstatic Fruit Create (tipo FruitType)
{
// La clase Factory puede modificar las propiedades porque tiene acceso a
// la interfaz privada de IFruitSetters
var fruit = nueva Fruit();
((IFruit) fruit).fruitType = tipo;
interruptor (tipo)
{
caso FruitType.Apple:
((IFruit) fruit).color = “Rojo”;
descanso;
caja FruitType.Banana:
((IFruit) fruit).color = “Amarillo”;
descanso;
caso FruitType.Orange:
((IFruit) fruit).color = “Naranja”;
descanso;
}
(IFruit) fruit), hacer otras cosas ocultas;
devolver la fruta;
}
// definir una interfaz privada que contenga los configuradores.
interfaz privadaFruit
{
// definir el setter en la interfaz privada
string color { set; }
FruitType fruitType { set; }
voidDoOtherHiddenThings();
}
// Esta es la clase interior. Tiene miembros de color y frutaTipo que no debe ser modificado
// por los clientes, pero debe ser modificado por la fábrica.
clase públicaFruit: IFruit
{
pColor de cordón privado;
pFruitType privado de FruitType;
// implementar explícitamente a los fijadores
string IFruit.color { set { pColor = valor; } }
FruitType IFruit.fruitType { set { pFruitType = valor; } }
nulidad IFruit.DoOtherHiddenThings()
{
//No hace nada. Sólo mostrando cómo ocultar métodos también.
}
// crear un getters público
publicstring Color { get { return pColor; } } }
public FruitType FruitType { get { devolver pFruitType; } } }
}
}
clasePrograma
{
staticvoidMain(cadena[] args)
{
Factory.Fruit apple = Factory.Create(FruitType.Apple);
// sólo puede leer el color y la frutaType porque sólo el getter es público
// e IFruit es privado de Factory
string fruitColor = color de la manzana;
Tipo FruitType = manzana Tipo FruitType;
}
}
Primero, llamo al método Create de la fábrica y especifico a través de un enumerador qué tipo de fruta quiero que se me devuelva.Luego, establezco propiedades ocultas a través de la implementación de la interfaz explícita, e incluso llamo a un método oculto similar que no hace nada.La interfaz IFruit está oculta para el cliente, es privada y sólo es accesible desde el método create de la fábrica.Esto asegura que siempre obtenga una manzana roja, una banana amarilla y una naranja naranja.Esta misma técnica puede ser utilizada para crear siempre sus propias instancias de clases en un estado válido con datos por defecto de valor, así como para proteger a los miembros de sólo lectura.

>
Sin embargo, se puede encontrar otro beneficio usando esta técnica.A menudo, las grandes definiciones de interfaz obligan a una clase a implementar métodos que, para nuestros propósitos, no tienen sentido lógico para nuestro uso.Al implementarlas de forma explícita, ocultamos esos métodos de forma efectiva de la instancia de clase pública visible. Sobre el autor….. Lee McGraw ha trabajado en la industria de la tecnología durante más de 30 años, desarrollando por primera vez en un Apple II. Se ha desempeñado como Desarrollador Empresarial y Arquitecto para entidades como AIG, Ford, Coke, USAA, el Departamento de Defensa y Energía de los Estados Unidos y muchos bancos.

>

Etiquetas

Desarrollo de CSoftwareInterfaz ExplícitaImplantación de InterfazInterfazVisual StudioProgramaciónSupervisión de Miembros en CCoding

Comentarios

Continúe la discusión