Zjištění tříd implementujících určité rozhraní   zodpovězená otázka

Reflexe, .NET

Zdravím,

mám definováno určité rozhraní a několik tříd, které ho implementují. Chtěl bych zjistit, které třídy to jsou přímo za běhu programu. Třídy i rozhraní jsou ve stejném jmenném prostoru.

Lze to udělat nějak elegantně nebo musím procházet všechny typy ve jmenném prostoru?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pomocí Reflection lze získat informace (včetně rozhraní které implementuje) o všech typech v určité Assembly. Je jedno v jakém Namespace se typy v Assembly nacházejí, musíte projít všechny. K čemu potřebujete za běhu zjišťovat, zda-li nějaký typ implementuje nějaké rozhraní?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mám několik tříd a od každé z nich jednu instanci v poli (pole se načítá při spuštění). Problém je, že třídy mohou do budoucna přibývat, takže bych je mohl zapomenout přidat do pole.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No a co to má společného se zjišťováním implementuje-li třída určité rozhraní?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Potřebuju zjistit, které třídy patří do pole a které ne, což udělám tak, že budu hledat třídy, které implementují nějaké rozhraní (mohlo by jít i o abstraktní třídu, ale nevidím v tom žádnou výhodu).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím sice k čemu toto má sloužit, ale už tak se mi to zdá jako velmi zhovadilé řešení. Reflection se má používat co nejméně a pouze v případě, kdy to nejde udělat jinak.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Musíte projít všechny pomocí reflexe. Víte jak to udělat?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback