Megosztás a következőn keresztül:


Tükröződés a .NET-ben

A névtér osztályai System.Reflection és azok System.Typelehetővé teszik a betöltött szerelvények és a bennük definiált típusok, például osztályok, interfészek és értéktípusok (azaz struktúrák és enumerációk) információinak beszerzését. A reflexió használatával futásidőben is létrehozhat típuspéldányokat, és meghívhatja és elérheti őket.

A szerelvények modulokat tartalmaznak, a modulok típusokat, és a típusok tagokat. A tükröződés olyan objektumokat biztosít, amelyek szerelvényeket, modulokat és típusokat foglalnak össze. A tükröződés használatával dinamikusan létrehozhat egy típuspéldányt, megkötheti a típust egy meglévő objektumhoz, vagy lekérheti a típust egy meglévő objektumból. Ezután meghívhatja a típus metódusait, vagy hozzáférhet a mezőihez és tulajdonságaihoz. A tükröződés tipikus felhasználási módjai a következők:

  • A szerelvényjegyzékben felsorolt szerelvények, betöltési modulok definiálására és betöltésére, valamint a szerelvény típusának megkeresésére és példányának létrehozására használható Assembly .
  • Az Module olyan információk felfedezésére szolgál, mint például a modult és a modulban lévő osztályokat tartalmazó szerelvény. A modulban definiált összes globális vagy más, nem globális metódust is lekérheti.
  • Olyan információk felderítésére használható ConstructorInfo , mint a konstruktor neve, paraméterei, hozzáférési módosítói (például public vagy private), és implementációjának részletei (például abstract vagy virtual). A GetConstructors egy adott konstruktorának meghívásához használja a GetConstructor vagy Type metódust.
  • Olyan információk felderítésére használható MethodInfo , mint a metódus neve, visszatérési típusa, paraméterei, hozzáférési módosítói és implementációs részletei (például abstract vagy virtual) Egy speciális metódus meghívásához használja a GetMethods vagy GetMethod módszerét egy Type.
  • Olyan információk felderítésére használható FieldInfo , mint a mező neve, a hozzáférési módosítók és a megvalósítás részletei (például static) és a mezőértékek lekérése vagy beállítása.
  • Olyan információk felderítésére használható EventInfo , mint a név, az eseménykezelő adattípusa, az egyéni attribútumok, a deklarálás típusa és az esemény tükrözött típusa, valamint eseménykezelők hozzáadása vagy eltávolítása.
  • Olyan információk felderítésére használható PropertyInfo , mint a név, az adattípus, a deklarálás típusa, a tükrözött típus, valamint a tulajdonság írásvédett vagy írható állapota, valamint a tulajdonságértékek lekérése vagy beállítása.
  • Olyan információk felderítésére szolgál ParameterInfo , mint a paraméter neve, adattípusa, hogy egy paraméter bemeneti vagy kimeneti paraméter-e, valamint a paraméter pozíciója egy metódus-aláírásban.
  • Az egyéni attribútumokkal kapcsolatos információk felderítéséhez használja CustomAttributeData , amikor a MetadataLoadContext vagy csak tükröződési környezetben (.NET-keretrendszerben) dolgozik. CustomAttributeData lehetővé teszi az attribútumok vizsgálatát példányok létrehozása nélkül.

A névtér osztályai System.Reflection.Emit speciális tükröződési formát biztosítanak, amely lehetővé teszi a típusok futásidőben történő összeállítását.

A tükröződés típusböngészők létrehozására is használható, amelyek lehetővé teszik a felhasználók számára a típusok kiválasztását, majd az ezekre vonatkozó információk megtekintését.

A tükröződésnek más felhasználási módjai is vannak. A JScripthez hasonló nyelvek fordítói a jeltáblák létrehozására használják a tükröződést. A névtér osztályai tükröződés System.Runtime.Serialization használatával férnek hozzá az adatokhoz, és meghatározzák, hogy mely mezőket kell őrizni. A névtér osztályai System.Runtime.Remoting közvetett módon, szerializálással használják a tükröződést.

A futásidejű típusok reflektálása

A reflexió osztályokat biztosít, például Type és MethodInfo, amelyek típusokat, tagokat, paramétereket és más kódentititásokat jelölnek. A tükröződés használatakor azonban nem közvetlenül ezekkel az osztályokkal dolgozik, amelyek többsége absztrakt (MustInherit a Visual Basicben). Ehelyett a közös nyelvi futtatókörnyezet (CLR) által biztosított típusokkal dolgozik.

Ha például a C# typeof operátortGetType (a Visual Basicben) használja egy Type objektum beszerzéséhez, az objektum valójában egy RuntimeType. RuntimeType a Type származéka, és minden absztrakt módszerhez implementációkat biztosít.

Ezek a futtatókörnyezeti osztályok internal (Friend a Visual Basicben). A rendszer nem külön dokumentálja őket az alaposztályoktól, mivel viselkedésüket az alaposztály dokumentációja ismerteti.

Referenciák