2008-12-16 8 views
5

Gestern dachte ich, es wäre nett, meinen eigenen Trigger in einer WPF-App zu implementieren. Ich habe eine Klasse MyTrigger erstellt, die TriggerBase geerbt hat. TriggerBase ist eine öffentliche abstrakte Klasse. Vererbung ist also kein Problem. Die Konstruktoren in dieser Klasse sind jedoch als intern markiert. Der Compiler gibt einen Fehler aus, da es keinen gültigen Konstruktor gibt. Warum erstellt jemand eine öffentliche Klasse, sondern markiert die Konstruktoren als intern?interner Konstruktor

Antwort

9

Wenn Sie möchten, dass die Klasse sichtbar ist, aber nur, dass sie innerhalb Ihrer eigenen Baugruppe unterklassifiziert werden kann. Die Unterklassen können öffentliche Konstruktoren selbst haben - oder sie können mit einer Fabrik aufgerufen werden.

Ich kann nicht sagen, ob das eine gute Design-Entscheidung für TriggerBase in WPF ist, aber es ist zumindest in einigen Situationen sinnvoll.

5

Ein Grund, an den ich denken könnte, ist, dass die tatsächliche Erstellung neuer Instanzen von einer anderen öffentlichen Klasse in derselben Baugruppe behandelt würde. Dies würde dazu führen, dass Sie die Instanz über diese andere Klasse erstellen - möglicherweise eine Art von Factory-Pattern-Implementierung.

2

Es ist öffentlich, da es als Basisklasse für die Trigger verwendet wird, die mit WPF (Trigger, MultiTrigger, EventTrigger, DataTrigger usw.) ausgeliefert werden. Es war nicht öffentlich, dann wäre es nicht möglich, diese Klassen als öffentlich zu kennzeichnen.

Die Konstruktoren sind intern, weil sie nicht beabsichtigen, sie selbst zu verwenden. Ich nehme an, Sie sollten von einer der oben genannten Klassen ableiten.