[c#] Wann sollte ein Klassenmitglied virtual (C #) / Overridable (VB.NET) deklariert werden?



Answers

Sie würden abstract verwenden, wenn Sie keine Implementierung in der Basisklasse definieren möchten und diese in einer abgeleiteten Klasse definieren möchten. Definieren Sie es als virtuell, wenn Sie eine Standardimplementierung bereitstellen möchten, die von abgeleiteten Klassen überschrieben werden kann.

Ja, nur Methoden können virtuell sein.

Question

Warum sollte ich nicht abstrakt wählen? Welche Einschränkungen gibt es, ein Klassenmitglied virtuell zu deklarieren? Können nur Methoden als virtuell deklariert werden?




Zunächst werde ich Ihnen die zweite Frage beantworten. Nur Methoden können als virtuell deklariert werden. Sie würden virtuell statt abstrakt wählen, wenn Sie eine Standardfunktionalität in Ihrer Basisklasse benötigen, aber Sie möchten die Möglichkeit lassen, diese Funktionalität durch Klassen zu überschreiben, die von Ihrer Basisklasse erben. Zum Beispiel:

Wenn Sie die Shape- Klasse implementieren, haben Sie wahrscheinlich eine Methode namens getArea () , die den Bereich Ihrer Form zurückgibt. In diesem Fall gibt es kein Standardverhalten für die getArea () -Methode in der Shape-Klasse, also würden Sie es als abstrakt implementieren. Wenn Sie eine Methode als abstrakt implementieren, können Sie ein Shape- Objekt nicht instanziieren.

Auf der anderen Seite, wenn Sie die Klasse Dog implementieren, möchten Sie vielleicht die Methode Bark () in diesem Fall implementieren, möchten Sie vielleicht einen Standard-Barking-Sound implementieren und ihn in die Dog- Klasse setzen, während einige geerbte Klassen, wie die Klasse Chiwawa möchte diese Methode möglicherweise außer Kraft setzen und einen bestimmten Bell-Sound implementieren. In diesem Fall wird die Methode bark als virtuell implementiert und Sie können sowohl Hunde als auch Chiwawas instanziieren.




Es gibt ein Problem mit Windows Forms.

Wenn Sie ein Control / UserControl wünschen, von dem Sie erben können, auch wenn Sie keine Logik in der Basisklasse haben, wollen Sie es nicht abstrakt, weil Sie andernfalls den Designer nicht in den abgeleiteten Klassen verwenden können: http : //www.urbanpotato.net/default.aspx/document/2001




Abstrakt bedeutet, dass Sie keine Standardimplementierung bereitstellen können. Dies bedeutet wiederum, dass alle Unterklassen eine Implementierung der abstrakten Methode bereitstellen müssen, um instanziierbar (konkret) zu sein.

Ich bin mir nicht sicher, was Sie mit "Einschränkungen" meinen, also kann ich diesen Punkt nicht beantworten.

Eigenschaften können als virtuell deklariert werden, aber Sie können sie auch begrifflich als Methoden betrachten.




Related



Tags

c# c#   .net .net   vb.net