Thomas Bandt

Über mich | Kontakt | Archiv

Überprüfen, ob eine Objekt ein Interface implementiert hat.

Es kann unter gewissen Umständen ganz praktisch sein, zu erfahren, ob ein Objekt ein bestimmtes Interface implementiert hat. Beispielsweise wenn man eine Reihe von Templates (UserControls) in einer Collection (PlaceHolder) hat, und jetzt genau die UserControls herausfiltern möchte, die eine bestimmte Bedingung erfüllen - anstatt hier festverdrahtet die Namen irgendwo zu speichern und darüber abzugleichen, könnte man z.B. auch in den Controls einfach ein Interface zur Kennzeichnung implementieren.

Das dann wieder auszulesen geht wie folgt:

static bool MyFilter(Type m, object filterCriteria)
{
   return m.Name.Equals((string)filterCriteria);
}

protected override void OnInitComplete(EventArgs e)
{
   base.OnInitComplete(e);
   PlaceHolder itemPlaceholder = new PlaceHolder();

   // Work [...] UserControls in PlaceHolder laden ...

   foreach (Control c in itemPlaceholder.Controls)
   {
      if(c.GetType().FindInterfaces(new TypeFilter(MyFilter), 
         "IEnableRssSubscription").Length > 0)
      {
         // Das UserControl hat das Interface 
         // "IEnableRssSubscription" implementiert

      }
   }

}

Kommentare

  1. Albert Weinert schrieb am Dienstag, 26. September 2006 12:52:00 Uhr:

    Ein

    if (c is IEnableRssSubscription)
    {
    }

    reicht eigentlich aus um auf ein Interface zu testen.
    Will man mit der Interface direkt weiterarbeiter empfiehlt sich "sanftes" casten.

    IEnableRssSubscription rssSub = c as IEnableRssSubscription;
    if (rssSub != null)
    {
    }

    Bei Generischen Interfaces geht dies nicht, siehe http://der-albert.com/archives/54-Pruefen-auf-generisches-Interface-in-.NET-2.0.html
  2. Thomas schrieb am Dienstag, 26. September 2006 13:16:00 Uhr:

    Du hast Recht ... so mache ich es eigenltich auch schon an anderer Stelle *grmpf* - das hatte ich wohl vergessen und mich zu schnell auf IntelliSense und FindInterfaces() eingelassen.

    Gruß
  3. Olli schrieb am Dienstag, 26. September 2006 14:15:00 Uhr:

    Hey, hat hier jemand Dummtrolle bestellt?
  4. Thomas schrieb am Dienstag, 26. September 2006 14:22:00 Uhr:

    Aus :-)


« Zurück  |  Weiter »