IList ...
-
Die Klasse Panel hat eine Eigenschaft namens Controls von Typ Control.ControlCollection. Dieser implementiert die Schnittstelle IList. IList enthält eine Methode namens Insert. Wenn panel1 ein Objekt der Panel-Klasse ist, dann geht panel1.Controls.Insert ... bzw panel1.Controls.IList.Insert ... nicht. Muss man da Insert von IList selber implementieren ? Bei der Klassendefinition von Control.ControlCollection wird IList.Insert als explizite Schnittstellenmethode aufgeführt. Weiss jemand Rat ?
-
Damit wir dir kompetent helfen koennen waere es schoen wenn du uns verraets in welcher Umgebung du dich befindest. WPF, WinForms, Web?
-
Ich bin in WindowsForms, VS 2008 Standard.
-
Firefighter schrieb:
Damit wir dir kompetent helfen koennen waere es schoen wenn du uns verraets in welcher Umgebung du dich befindest. WPF, WinForms, Web?
Es kann fast nur Web oder WinForms sein, da bei WPF keine
Controls
Eigenschaft in Panel vorhanden ist. Und ich nehme mal stark an, dass es schlussendlich um eine WinForms Anwendung geht. Aber klar, grundsätzlich hast du recht@Boy,
Werde etwas auführlicher mit dem Teil "geht nicht". Das ist keine sinnvolle Fehler beschreibung. Was geht nicht? Was erwartest du? Was erhälst du? Was passiert? usw. usf. "Geht nicht" kann alles und nichts heissen ist.Grüssli
-
Es lässt sich nicht compilieren, panel1.Controls.Insert, Insert findet er nicht. Insert ist auch nicht im Intellisense vorhanden.
-
'explizit' bedeutet, daß du auf dieses Interface casten mußt, um es benutzen zu können: Explizite Schnittstellenimplementierung
Bei deinem Beispiel also
IList list = panel1.Controls as IList; list.Insert(...);
Üblicherweise werden explizite Schnittstellen aber für Methoden definiert, welche nicht direkt vom Anwender aufrufbar sein sollen (alternativ: wo es Probleme mit doppelten Methodennamen gibt).
-
Ich habe gerade mal mit dem Reflector etwas reingeschaut. Wie es aussieht implementiert die Klasse
ArrangedElementCollection
das IList Interface privat(wenn man das so sagen kann, saemtliche Methoden des IList Interface sind privat implementiert). ControlCollection erbt dann vonArrangedElementCollection
und auch IList, da aberArrangedElementCollection
hier alles dicht macht, wirst du mit Insert nicht weit kommen weil du auf saemtliche Methoden von IList kein Zugriff ueber das ControlCollection Interface bekommst.
-
Th69 schrieb:
'explizit' bedeutet, daß du auf dieses Interface casten mußt, um es benutzen zu können: Explizite Schnittstellenimplementierung
Bei deinem Beispiel also
IList list = panel1.Controls as IList; list.Insert(...);
Üblicherweise werden explizite Schnittstellen aber für Methoden definiert, welche nicht direkt vom Anwender aufrufbar sein sollen (alternativ: wo es Probleme mit doppelten Methodennamen gibt).
Wirst du leider kein Spass dran haben, weil die Methode nicht implementiert wurde(NotSupportedException).
-
Die Frage ist natürlich auch noch, wieso überhaupt
Insert
? Wieso nichtAdd
? Die Position in dieser Collection ist ja für die Funtionalität völlig egal. Daher wird dies wahrscheinlich auch nicht unterstützt.Grüssli
-
Kann man davon ausgehen, dass die Methoden anderer Schnittstellen, implementiert sind ?
-
Du kannst davon ausgehen dass das, was auf dem tatsählichen Typen (ControlCollection) noch sichtbar ist, implementiert ist. Im Zweifel RTFM (heißt "read the fine MSDN" wie ich kürzlich aufgeschnappt habe :D).
-
Hängt wohl von den Einzelfällen ab. Muss man das ausprobieren ?
-
LordJaxom schrieb:
Im Zweifel RTFM (heißt "read the fine MSDN" wie ich kürzlich aufgeschnappt habe :D).
Wo findet man die „fine“ MSDN? Ich kenn nur die normale.
</off-topic>
-
Bashar schrieb:
Wo findet man die „fine“ MSDN? Ich kenn nur die normale.
Das war ich nicht, das war das Forum! Das ersetzt fine einfach durch fine. Ich meinte fine. Ach love!
-
*******
Die Passwörter ersetzt es auch, cool.
-
Bashar schrieb:
*******
Die Passwörter ersetzt es auch, cool.
Es ist sogar so cool, dass du dein PW in Klartext sehen kannst und _wir_ es als Sternchen sehen
Ahwsum!