Tenemos varios miembros de la interfaz:
- Propiedades
- Métodos
- Eventos
- Indexadores
Estos son como esqueletos, y las clases derivadas deben encargarse de llenarlos de funcionalidad.
En esta demostración declararemos una interfaz llamada ServerInterface.
12345678910interfaz públicaServidorInterfaz{nombre de la cadena {get;set;}estado de la cadena {get;set;}voidrestart();voidgetStatus();voidstart();voidstop();eventEventHandler statusChanged;}
csharp
Esta interfaz declara dos propiedades, nombre y estado. También declara cuatro métodos, reiniciar, iniciar, detener y obtener el estado. Tenemos un manejador de eventos llamado statusChanged.
Para hacer cumplir nuestro contrato, la clase Server necesita heredar de esta interfaz.
1234public classServer:ServerInterface{}
csharp
Debido a la naturaleza del contrato, necesitamos definir los miembros heredados de nuestra clase. Si no los definimos, obtendremos el siguiente error de nuestro compilador:
12345$0027Servidor$0027 no implementa el miembro de interfaz $0027ServerInterface.name$0027$0027Servidor$0027 no implementa el miembro de interfaz $0027ServerInterface.type$0027$0027Servidor$0027 no implementa el miembro de interfaz $0027ServerInterface.restart()$0027$0027Servidor$0027 no implementa el miembro de interfaz $0027ServerInterface.status()$0027$0027Servidor$0027 no implementa el miembro de interfaz $0027ServerInterface.statusChanged$0027
bash
Esto nos dice explícitamente lo que tenemos que hacer. Miremos la aplicación completa y la diseccionemos.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 usando el sistema; namespace {publicinterfaceServerInterface{string name {get;set;}string status {get;set;}voidrestart();voidstop();voidstart();voidstatus();eventEventHandler statusChanged;}publicclassMyEventArgs: EventArgs{}publicclassServer:ServerInterface{nombre de la cadena pública {get;set;}estado de la cadena pública {get;set;}publiceventEventHandler statusChanged;publicServer(string Name){ name = Nombre; status ="off";}publicvoidgetStatus(){ Consola. WriteLine($"El servidor: {este.nombre} es {este.status}");}publicvoidstart(){if(this.status =="off"){ Consola.WriteLine($"Servidor de inicio: {este.nombre}");this.status ="on";}elseif(this. status =="on"){ Console.WriteLine($"El servidor: {este.nombre} ya ha comenzado!");}else{ Console.WriteLine($"El servidor está en un estado desconocido!");}}publicvoidstop(){if(this. status =="off"){ Console.WriteLine($"El servidor: {este.nombre} ya está detenido!");}elseif(this.status =="on"){ Console.WriteLine($"El servidor: {este.nombre}");this.status ="off";}else{ Console. WriteLine($"El servidor está en un estado desconocido!");}}publicvoidrestart(){ Console.WriteLine($"Evento para reiniciar el servidor atrapado: {este.nombre}");}protectedvirtualvoidrestart(MyEventArgs e){ statusChanged? .Invoke(this, e);}}publicclassInterfacing{publicstaticvoidMain(){Servidor a =newServer("Controlador de Dominio"); a.start(); a.stop(); a.restart(); Console.ReadKey();}}}
csharp
El resultado producido es el siguiente:
123Starting server: Controlador de DominioDetener el servidor: Domain ControllerEvent para reiniciar el servidor atrapado: Domain Controller
bash
Todo lo que hay que hacer es implementar nuestra parte del contrato. Definimos los métodos específicos, las propiedades y el manejador de eventos. En la función Main(), nuestra clase heredada de la interfaz viene sola. Vemos la instancia inicializada, y luego llamamos a los métodos apropiados para realizar sus tareas. El evento asociado con la acción de reinicio también se dispara.