Supongamos que tengo una clase principal abstracta llamada "Principal" que implementa un método llamado "Mostrar título". Quiero que este método sea el mismo para cada subclase que herede "Parent": me gustaría un error de compilación si una subclase intenta implementar su propio método "DisplayTitle". ¿Cómo puedo lograr esto en C#. Creo en Java, simplemente marcaría el método como "final", pero parece que no puedo encontrar una alternativa en C#. He estado jugando con "sellado" y "anular", pero no puedo obtener el comportamiento que estoy buscando.Evitar que una subclase de C# sobrescriba un método
Por ejemplo, en este código:
using System;
namespace ConsoleApplication1
{
class Parent
{
public void DisplayTitle() { Console.WriteLine("Parent's Title"); }
}
class ChildSubclass : Parent
{
public void DisplayTitle() { Console.WriteLine("Child's Own Implementation of Title");
}
static void Main(string[] args)
{
ChildSubclass myChild = new ChildSubclass();
myChild.DisplayTitle();
Console.ReadLine();
}
}
}
Me gustaría recibir un error de compilación diciendo que el "ChildSubClass" no puede anular "DISPLAYTITLE". Actualmente recibo una advertencia, pero parece que esto es algo que debería poder hacer y no conozco los atributos adecuados para etiquetar el método.
Supongo que mi verdadera preocupación sería el uso indebido accidental. Tengo una clase abstracta en otro proyecto que tiene un método "TurnOn" y "TurnOff". Sin entrar demasiado en los detalles, esta clase va a ser subclases varias veces para representar objetos del mundo real. Sin embargo, todos estos dispositivos se encenderán y apagarán de la misma manera. Simplemente no quiero que yo mismo u otra persona intente implementar sus propios comandos de apagado/encendido para dispositivos individuales sin una advertencia de algún tipo. – user1720817
@ user1720817: Bueno, habría * ser * una advertencia. Editaré la advertencia de su código de muestra en mi respuesta ... –
Sí, hay una advertencia :) Es solo mi OCD que me hace querer que sea un error de tiempo de compilación. Gracias por tomarse el tiempo para escribir esto! – user1720817