Frage

ReadOnlyCollection<T> realisiert die ICollection<T> Schnittstelle, die Methoden wie Hinzufügen und Entfernen hat. Ich weiß, wie zu verbergen Methoden von Intellisense Attributen, aber wie ist es möglich, einen tatsächlichen Übersetzungsfehler zu verursachen, wenn ich versuche, diese Methoden zu benutzen?

(Btw, ich weiß es nicht sinnvoll, um den Anruf Add macht und entfernt auf einer ROC, es ist eine Frage auf was für vererbte memebers Übersetzungsfehler, nicht auf die richtige Datenstruktur).

War es hilfreich?

Lösung

Sie sind implementiert mit explizite Schnittstellenimplementierung , wie diese:

void ICollection<T>.Add(T item) {
    throw NotSupportedException();
}

Das Verfahren ist noch aufrufbar, aber nur, wenn Sie das Objekt als ICollection<T> anzuzeigen. Zum Beispiel:

ReadOnlyCollection<int> roc = new ReadOnlyCollection<int>(new[] { 1, 2, 3 });
// Invalid
// roc.Add(10);

ICollection<int> collection = roc;
collection.Add(10); // Valid at compile time, but will throw an exception

Andere Tipps

Tatsächlich durch diese Methoden aus der ICollection<T> Schnittstelle explizit Implementierung, man kann sie nicht direkt aufrufen.
Sie finden das Objekt (die ReadOnlyCollection Instanz) zu ICollection<T> explizit haben zu werfen. Dann können Sie die Add-Methode aufrufen. (Also nicht die Compiler beschweren, obwohl Sie eine Laufzeitausnahme erhalten werden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top