Saltar al contenido

Miembros de la interfaz permitidos en C#

Tenemos varios miembros de la interfaz:

  1. Propiedades
  2. Métodos
  3. Eventos
  4. Indexadores

Estos son como esqueletos, y las clases derivadas deben encargarse de llenarlos de funcionalidad.

Miembros de la interfaz permitidos en C#
Miembros de la interfaz permitidos en C#

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.