CustomReflectionContext Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Testre szabható tükröződési környezetet jelöl.
public ref class CustomReflectionContext abstract : System::Reflection::ReflectionContext
public abstract class CustomReflectionContext : System.Reflection.ReflectionContext
type CustomReflectionContext = class
inherit ReflectionContext
Public MustInherit Class CustomReflectionContext
Inherits ReflectionContext
- Öröklődés
- Származtatott
Megjegyzések
CustomReflectionContext Lehetővé teszi egyéni attribútumok hozzáadását vagy eltávolítását a tükröződési objektumokból, illetve áltulajdonságok hozzáadását ezekhez az objektumokhoz a teljes tükröződési modell újbóli implementálása nélkül. Az alapértelmezett beállítás CustomReflectionContext egyszerűen módosítások nélkül körbefuttatja a tükröződési objektumokat, de a megfelelő metódusok alosztályozásával és felülírásával hozzáadhatja, eltávolíthatja vagy módosíthatja a tükrözött paraméterekre vagy tagokra vonatkozó attribútumokat, vagy új tulajdonságokat adhat hozzá a tükrözött típushoz.
Tegyük fel például, hogy a kód egy adott attribútum gyári metódusokra való alkalmazásának konvencióját követi, de most már olyan külső kódokkal kell dolgoznia, amelyek nem rendelkeznek attribútumokkal. CustomReflectionContext Megadhat egy szabályt az attribútumokkal rendelkező objektumok azonosításához, valamint az objektumoknak az attribútumokkal való ellátásához, amikor a kódból tekintik meg őket.
A hatékony használathoz CustomReflectionContext a tükrözött objektumokat használó kódnak támogatnia kell a tükröződési környezet megadásának fogalmát, ahelyett, hogy feltételezzük, hogy az összes tükrözött objektum a futtatókörnyezethez van társítva. A .NET számos tükröződési módszere biztosít erre a célra egy paramétertReflectionContext.
A tükrözött paraméterre vagy tagra alkalmazott attribútumok módosításához bírálja felül a GetCustomAttributes(ParameterInfo, IEnumerable<Object>) vagy GetCustomAttributes(MemberInfo, IEnumerable<Object>) metódust. Ezek a metódusok figyelembe veszik a tükrözött objektumot és az attribútumok listáját az aktuális tükröződési környezetében, és visszaadják az egyéni tükrözési környezet alatt található attribútumok listáját.
Warning
CustomReflectionContexta felülbírálások nem kérdezhetők le attribútumok a megadott MemberInfo vagy hívássalGetCustomAttributes; használja inkább a declaredAttributesGetCustomAttributes túlterheléseknek ParameterInfo átadott sorozatot.
Ha tulajdonságokat szeretne hozzáadni egy tükrözött típushoz, felülbírálja a metódust AddProperties . A metódus elfogad egy paramétert, amely megadja a tükrözött típust, és visszaadja a további tulajdonságok listáját. A metódus használatával CreateProperty tulajdonságobjektumokat hozhat létre a visszatéréshez. A tulajdonság-hozzáférőként szolgáló tulajdonság létrehozásakor megadhatja a delegátumokat, és kihagyhatja az egyik hozzáférőt egy olvasás- vagy írásvédett tulajdonság létrehozásához. Vegye figyelembe, hogy az ilyen próbabábu-tulajdonságok nem rendelkeznek metaadatokkal vagy közös köztes nyelv (CIL) háttérrendszerével.
Warning
- Legyen óvatos a tükrözött objektumok közötti egyenlőséggel, amikor tükröződési környezetekkel dolgozik, mert az objektumok több környezetben is ugyanazt a tükrözött objektumot jelölhetik. A metódussal MapType lekérjük egy tükrözött objektum adott tükröződési környezetének verzióját.
- Az CustomReflectionContext objektumok módosítják egy adott tükröződési objektum által visszaadott attribútumokat, például a GetCustomAttributes metódus által kapott attribútumokat. Ez nem módosítja a metódus által GetCustomAttributesData visszaadott egyéni attribútumadatokat, és ez a két lista nem egyezik meg egyéni tükröződési környezet használatakor.
Az alábbi példa bemutatja, hogyan lehet az CustomReflectionContext osztályt kiterjeszteni egy egyéni attribútum hozzáadásához minden olyan taghoz egy adott típusban, amelynek a neve 'To' előtaggal kezdődik.
// A blank example attribute.
class MyAttribute : Attribute
{
}
// Reflection context with custom rules.
class MyCustomReflectionContext : CustomReflectionContext
{
// Called whenever the reflection context checks for custom attributes.
protected override IEnumerable<object> GetCustomAttributes(MemberInfo member, IEnumerable<object> declaredAttributes)
{
// Add example attribute to "To*" members.
if (member.Name.StartsWith("To", StringComparison.Ordinal))
{
yield return new MyAttribute();
}
// Keep existing attributes as well.
foreach (object attr in declaredAttributes)
{
yield return attr;
}
}
}
MyCustomReflectionContext mc = new();
Type t = typeof(string);
// A representation of the type in the default reflection context.
TypeInfo ti = t.GetTypeInfo();
// A representation of the type in the customized reflection context.
TypeInfo myTI = mc.MapType(ti);
// Display affected members of the type ("To*") and their attributes.
foreach (MemberInfo m in myTI.DeclaredMembers.Where(static m => m.Name.StartsWith("To", StringComparison.Ordinal)))
{
Console.WriteLine($"{m.Name}:");
foreach (Attribute cd in m.GetCustomAttributes())
{
Console.WriteLine(cd.GetType());
}
}
Console.WriteLine();
// The "ToString" member as represented in the default reflection context.
MemberInfo mi1 = ti.GetDeclaredMethods("ToString").FirstOrDefault();
Attribute[] defaultAttributes = mi1.GetCustomAttributes().ToArray();
// All the attributes of "ToString" in the default reflection context.
Console.WriteLine("'ToString' Attributes in Default Reflection Context:");
foreach (Attribute cd in defaultAttributes)
{
Console.WriteLine(cd.GetType());
}
Console.WriteLine();
// The same member in the custom reflection context.
mi1 = myTI.GetDeclaredMethods("ToString").FirstOrDefault();
Attribute[] customAttributes = mi1.GetCustomAttributes().ToArray();
// All its attributes, for comparison. MyAttribute is now included.
Console.WriteLine("'ToString' Attributes in Custom Reflection Context:");
foreach (Attribute cd in customAttributes)
{
Console.WriteLine(cd.GetType());
}
Konstruktorok
| Name | Description |
|---|---|
| CustomReflectionContext() |
Inicializálja a CustomReflectionContext osztály új példányát. |
| CustomReflectionContext(ReflectionContext) |
Inicializálja az CustomReflectionContext osztály új példányát a megadott tükröződési környezettel alapként. |
Metódusok
| Name | Description |
|---|---|
| AddProperties(Type) |
Ha egy származtatott osztályban felül van bírálva, a megadott típushoz további tulajdonságok gyűjteményét adja meg, ahogyan az ebben a tükröződési környezetben látható. |
| CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>) |
Létrehoz egy objektumot, amely egy típushoz hozzáadandó tulajdonságot jelöl, amelyet a AddProperties(Type) metódussal és a megadott egyéni attribútumokkal kell használni. |
| CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>) |
Létrehoz egy objektumot, amely egy típushoz hozzáadandó tulajdonságot jelöl, amelyet a AddProperties(Type) metódussal kell használni. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetCustomAttributes(MemberInfo, IEnumerable<Object>) |
Ha felül van bírálva egy származtatott osztályban, a megadott tag egyéni attribútumainak listáját adja meg, ahogyan az ebben a tükröződési környezetben látható. |
| GetCustomAttributes(ParameterInfo, IEnumerable<Object>) |
Ha felül van bírálva egy származtatott osztályban, a megadott paraméterhez tartozó egyéni attribútumok listáját adja meg, az ebben a tükröződési környezetben látható módon. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| GetTypeForObject(Object) |
Lekéri a megadott objektum típusának ábrázolását ebben a tükröződési környezetben. (Öröklődés forrása ReflectionContext) |
| MapAssembly(Assembly) |
Ebben a tükröződési környezetben lekéri egy olyan szerelvény reprezentációját, amelyet egy másik tükröződési környezetből származó objektum képvisel. |
| MapType(TypeInfo) |
Ebben a tükröződési környezetben egy objektum által egy másik tükröződési környezetből képviselt típus ábrázolását kéri le. |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |