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.


  • Administrator

    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 von ArrangedElementCollection und auch IList, da aber ArrangedElementCollection 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).


  • Administrator

    Die Frage ist natürlich auch noch, wieso überhaupt Insert ? Wieso nicht Add ? 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!


Anmelden zum Antworten