Hier ist ein persönliches Beispiel, bei dem ich die Vererbung genutzt habe, um eine Entwicklungssituation erheblich zu verbessern:
Ich brauchte, um ein asp.net (c#) Formular-Steuerelement zu entwickeln, die sowohl Standard-Web-Formulare (Bündel von Formularfeldern mit Schaltfläche "Senden"), als auch eine sichere Version, die Gespräche mit einem Web-Service, um die Informationen über SSL zu übermitteln würde.
Aufgrund der vielen Ähnlichkeiten zwischen den Kontrollen und Konzepten habe ich eine Reihe von Klassen entwickelt:
BaseWebControl
- benutzerdefinierte Basissteuerklasse, die erbt von
System.Web.UI.WebControl
Klasse (Teil des .NET-Frameworks
- hat benutzerdefinierte Eigenschaften und Methoden, die in unserer Anwendung von allen benutzerdefinierten Steuerelementen verwendet werden (Informationen über den Zustand des Steuerelements usw.)
BaseFormControl
- erbt von BaseWebControl und erhält damit alle seine zugrunde liegenden Funktionen
- behandelt die Basisfunktionalität von Formularen, wie z. B. das dynamische Hinzufügen von Feldern, das Markieren von Pflichtfeldern, das Hinzufügen der Schaltfläche "Senden" usw. usw.
- enthält eine Bezeichnung und einen zugehörigen Kontrollindex zum einfachen Nachschlagen
- als abstrakte Klasse gekennzeichnet, mit einer abstrakten Methode namens
SubmitForm
. Diese Methode ist in dieser Klasse nicht definiert, wird aber durch das Klick-Ereignis der Submit-Schaltfläche aufgerufen. Das bedeutet, dass jede spezifische Formularsteuerklasse, die von dieser Basisklasse erbt, die abstrakte Methode SubmitForm
Funktionalität nach Bedarf.
EmailFormControl
- Erbt von
BaseFormControl
so dass alle oben genannten grundlegenden Funktionen ohne Duplizierung zur Verfügung stehen.
- enthält sehr wenig, außer der Überschreibung der abstrakten Methode
SubmitForm
und erstellt eine E-Mail auf der Grundlage der Formularfelder.
- Alle anderen Kontrollfunktionen und die Ereignisbehandlung werden von der Basisklasse übernommen. Wenn in der Basisklasse die Schaltfläche "Submit" angeklickt und behandelt wird, ruft sie diese spezielle Implementierung von
SubmitForm
SecureFormControl
- wiederum erbt von
BaseFormControl
so dass alle oben genannten Funktionen ohne Duplizierung zur Verfügung stehen.
- Bei der Umsetzung von
SubmitForm
stellt er eine Verbindung zu einem WCF-Webdienst her und übergibt die Informationen über SSL.
- keine weiteren Funktionen erforderlich sind, da die Basisklasse den Rest übernimmt.
Die Grundzüge des Codes sehen wie folgt aus:
public class BaseWebControl : System.Web.UI.WebControl
{
//base web control with application wide functionality built in
}
public abstract class BaseFormControl : BaseWebControl
{
//handles all 'common' form functionality
//...
//...
//event handler for submit button calls abstract method submit form,
//which must be implemented by each inheriting class
protected void btnSubmit_Click(object sender, EventArgs e)
{
SubmitForm();
}
protected abstract SubmitForm();
}
public class EmailFormControl : BaseFormControl
{
protected override SubmitForm()
{
//implement specific functionality to email form contents
}
}
public class SecureFormControl : BaseFormControl
{
protected override SubmitForm()
{
//connect to WCF web service and submit contents
}
}
Dies ist das Ergebnis der obigen Ausführungen, BaseFormControl
hat etwa 1000 Zeilen Code in einer ganzen Reihe von Methoden, Eigenschaften usw. SecureFormControl
y EmailFormControl
haben jeweils etwa 40 Zeilen. Alle anderen Funktionen werden von der Basisklasse gemeinsam genutzt und gesteuert. Dies fördert:
- Wartbarkeit
- Effizienz
- Flexibilität
- Konsistenz
Jetzt kann ich jede Art von Webformular erstellen, z. B. DataBaseFormControl
usw. usw. sehr leicht. Ich kann allen Formularen großartige neue Funktionen hinzufügen, indem ich Methoden und Eigenschaften zu den Basisklassen hinzufüge, usw.
Und die Liste geht weiter.
Puh, das war eine Menge Tipparbeit. Ich hoffe, das hilft Ihnen, ein gutes Beispiel zu geben. Dies war ein Beispiel, bei dem ich die Vererbung als Schlüssel zum Erfolg in einem Projekt empfand.