Private Vererbung in C #?

8

Ich bin neu in C # und habe mich gefragt, ob es so etwas wie private Vererbung in C # gibt (wie in C ++)?

Mein Problem ist wie folgt: Ich möchte eine Warteschlange (nennen Sie es SpecialQueue) mit den folgenden Änderungen implementieren:

  1. Die Warteschlange hat eine maximale Anzahl von Elementen, die darin gespeichert werden können.
  2. Wenn die Warteschlange voll ist und Sie ein neues Element einfügen, wird ein Element automatisch aus der Warteschlange (das erste Element in der Warteschlange) und das neue Element wird an das Ende der Warteschlange eingefügt.
  3. Einige Methoden (z. B. peek ()), die von der Warteschlange bereitgestellt werden, sollten nicht den Benutzern von SpecialQueue zugänglich gemacht werden.

In C ++ würde ich private aus der Warteschlange herausholen, nur die Methoden offen legen, die ich möchte, und andere nach meinem Willen ändern. Leider haben alle Methoden in der Warteschlange nicht den Modifikator "Override" und ich weiß nicht, wie ich das in C # erreichen soll.

Irgendwelche Hilfe?

Grüße, Dan

    
libi 23.12.2010, 17:14
quelle

2 Antworten

15

Komposition verwenden: Fügen Sie ein normales Queue als Feld in Ihrem SpecialQueue ein. . Private Vererbung ist eigentlich etwas sehr ähnlich wie Komposition.

Siehe Ссылка zur Diskussion.

Die Implementierung könnte so aussehen:

%Vor%

Sie müssen weitere Funktionen / Schnittstellen hinzufügen, wenn SpecialQueue diese unterstützen soll. Ich würde jedoch nicht empfehlen, IEnumerable zu implementieren, da dies Peek (das Sie verbieten möchten) zulassen würde.

    
Vlad 23.12.2010 17:17
quelle
4

Sie könnten die gleichen Schnittstellen wie ein Queue (oder Queue<T> ) implementieren, ein Queue als Backing-Feld haben und diese Methoden anzeigen, die die Aufrufe einfach in das Backing-Feld einschließen.

Zum Beispiel (habe die Implementierung von ICollection in Übereinstimmung mit Queue<T> beibehalten)

%Vor%     
Russ Cam 23.12.2010 17:18
quelle

Tags und Links