CustomReflectionContext Clase

Definición

Representa un contexto de reflexión personalizable.Represents a customizable reflection context.

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
Herencia
CustomReflectionContext
Derivado

Ejemplos

En el ejemplo siguiente se muestra cómo CustomReflectionContext agregar un atributo personalizado a todos los miembros de un tipo determinado cuyos nombres empiezan por "to".The following example demonstrates how to subclass CustomReflectionContext to add a custom attribute to all the members of a given type whose names begin with "To". Para ejecutar este código, péguelo en un proyecto de consola vacío y asegúrese de incluir una referencia a System. Reflection. Context. dll.To run this code, paste it into an empty console project, and make sure to include a reference to System.Reflection.Context.dll.

//A blank example attribute.
class myAttribute : Attribute
{


}

//Reflection context with custom rules.
class myCRC : 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")) {
                   yield return new myAttribute();
               }
               //Keep existing attributes as well.
               foreach (var attr in declaredAttributes) yield return attr;
         }    
}


class Program
{
    static void Main(string[] args)
    {
        myCRC mc = new myCRC();
        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 all the members of the type and their attributes.
        foreach (MemberInfo m in myTI.DeclaredMembers)
        {
           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();
        
        //All the attributes of "ToString" in the default reflection context.
        Console.WriteLine("'ToString' Attributes in Default Reflection Context:");
        foreach (Attribute cd in mi1.GetCustomAttributes())
        {
            Console.WriteLine(cd.GetType());
        }

        Console.WriteLine();

        //The same member in the custom reflection context.
        mi1 = myTI.GetDeclaredMethods("ToString").FirstOrDefault();

        //All its attributes, for comparison.  myAttribute is now included.
        Console.WriteLine("'ToString' Attributes in Custom Reflection Context:");
        foreach (Attribute cd in mi1.GetCustomAttributes())
        {
            Console.WriteLine(cd.GetType());
        }

        Console.ReadLine();
    }
}

Comentarios

CustomReflectionContextproporciona una manera de agregar o quitar atributos personalizados de objetos de reflexión, o de agregar propiedades ficticias a esos objetos, sin necesidad de volver a implementar el modelo de reflexión completo.CustomReflectionContext provides a way for you to add or remove custom attributes from reflection objects, or add dummy properties to those objects, without re-implementing the complete reflection model. El valor CustomReflectionContext predeterminado simplemente ajusta los objetos de reflexión sin realizar ningún cambio, pero mediante la creación de subclases e invalidaciones de los métodos pertinentes, puede Agregar, quitar o cambiar los atributos que se aplican a cualquier parámetro o miembro reflejado, o agregar nuevas propiedades a un objeto tipo reflejado.The default CustomReflectionContext simply wraps reflection objects without making any changes, but by subclassing and overriding the relevant methods, you can add, remove, or change the attributes that apply to any reflected parameter or member, or add new properties to a reflected type.

Por ejemplo, suponga que el código sigue la Convención de aplicar un atributo determinado a los métodos de generador, pero ahora tiene que trabajar con código de terceros que carece de atributos.For example, suppose that your code follows the convention of applying a particular attribute to factory methods, but you are now required to work with third-party code that lacks attributes. Puede usar CustomReflectionContext para especificar una regla para identificar los objetos que deben tener atributos y para proporcionar los objetos con esos atributos cuando se ven desde el código.You can use CustomReflectionContext to specify a rule for identifying the objects that should have attributes and to supply the objects with those attributes when they are viewed from your code.

Para usar CustomReflectionContext de forma eficaz, el código que usa los objetos reflejados debe admitir la noción de especificar un contexto de reflexión, en lugar de asumir que todos los objetos reflejados están asociados al contexto de reflexión en tiempo de ejecución.To use CustomReflectionContext effectively, the code that uses the reflected objects must support the notion of specifying a reflection context, instead of assuming that all reflected objects are associated with the runtime reflection context. Muchos métodos de reflexión en el .NET Framework proporcionan ReflectionContext un parámetro para este fin.Many reflection methods in the .NET Framework provide a ReflectionContext parameter for this purpose.

Para modificar los atributos que se aplican a un parámetro o miembro reflejado, GetCustomAttributes(ParameterInfo, IEnumerable<Object>) invalide el método o GetCustomAttributes(MemberInfo, IEnumerable<Object>) .To modify the attributes that are applied to a reflected parameter or member, override the GetCustomAttributes(ParameterInfo, IEnumerable<Object>) or GetCustomAttributes(MemberInfo, IEnumerable<Object>) method. Estos métodos toman el objeto reflejado y la lista de atributos en su contexto de reflexión actual y devuelven la lista de atributos que debe tener en el contexto de reflexión personalizado.These methods take the reflected object and the list of attributes under its current reflection context, and return the list of attributes it should have under the custom reflection context.

Advertencia

CustomReflectionContextlos métodos no deben tener acceso directamente a la lista de atributos de un objeto GetCustomAttributes o método reflejado llamando al método en la instancia o ParameterInfo proporcionada MemberInfo , sino que deben declaredAttributes usar la lista, que se pasa como parámetro. en las GetCustomAttributes sobrecargas del método.CustomReflectionContext methods should not access the list of attributes of a reflected object or method directly by calling the GetCustomAttributes method on the provided MemberInfo or ParameterInfo instance, but should instead use the declaredAttributes list, which is passed as a parameter to the GetCustomAttributes method overloads.

Para agregar propiedades a un tipo reflejado, invalide el AddProperties método.To add properties to a reflected type, override the AddProperties method. El método acepta un parámetro que especifica el tipo reflejado y devuelve una lista de propiedades adicionales.The method accepts a parameter that specifies the reflected type, and returns a list of additional properties. Debe utilizar el CreateProperty método para crear objetos de propiedad para devolver.You should use the CreateProperty method to create property objects to return. Puede especificar delegados al crear la propiedad que actuará como el descriptor de acceso de la propiedad, y puede omitir uno de los descriptores de acceso para crear una propiedad de solo lectura o de solo escritura.You can specify delegates when creating the property that will serve as the property accessor, and you can omit one of the accessors to create a read-only or write-only property. Tenga en cuenta que dichas propiedades ficticias no tienen metadatos ni copia de seguridad de lenguaje intermedio común (CIL).Note that such dummy properties have no metadata or Common Intermediate Language (CIL) backing.

Advertencia

Tenga cuidado con la igualdad entre los objetos reflejados al trabajar con contextos de reflexión, porque los objetos pueden representar el mismo objeto reflejado en varios contextos.Be cautious about equality among reflected objects when you work with reflection contexts, because objects may represent the same reflected object in multiple contexts. Puede usar el método MapType para obtener la versión de un determinado contexto de reflexión de un objeto reflejado.You can use the MapType method to obtain a particular reflection context's version of a reflected object.

Advertencia

Un CustomReflectionContext objeto modifica los atributos devueltos por un objeto de reflexión determinado, como los obtenidos por GetCustomAttributes el método.A CustomReflectionContext object alters the attributes returned by a particular reflection object, such as those obtained by the GetCustomAttributes method. No modifica los datos de atributos personalizados devueltos por GetCustomAttributesData el método, y estas dos listas no coincidirán cuando se utiliza un contexto de reflexión personalizado.It does not alter the custom attribute data returned by the GetCustomAttributesData method, and these two lists will not match when you use a custom reflection context.

Constructores

CustomReflectionContext()

Inicializa una nueva instancia de la clase CustomReflectionContext.Initializes a new instance of the CustomReflectionContext class.

CustomReflectionContext(ReflectionContext)

Inicializa una nueva instancia de la clase CustomReflectionContext con el contexto de reflejo especificado como base.Initializes a new instance of the CustomReflectionContext class with the specified reflection context as a base.

Métodos

AddProperties(Type)

Cuando se reemplaza en una clase derivada, proporciona una colección de propiedades adicionales para el tipo especificado, como se representa en este contexto de reflexión.When overridden in a derived class, provides a collection of additional properties for the specified type, as represented in this reflection context.

CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>)

Crea un objeto que representa una propiedad que se va a agregar a un tipo y que se va a utilizar con el método AddProperties(Type) .Creates an object that represents a property to be added to a type, to be used with the AddProperties(Type) method.

CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>)

Crea un objeto que representa una propiedad que se va a agregar a un tipo y que se va a utilizar con el método AddProperties(Type) y utilizando los atributos personalizados especificados.Creates an object that represents a property to be added to a type, to be used with the AddProperties(Type) method and using the specified custom attributes.

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Heredado de Object)
GetCustomAttributes(MemberInfo, IEnumerable<Object>)

Cuando se reemplaza en una clase derivada, proporciona una lista de atributos personalizados para el miembro especificado, como se representa en este contexto de reflexión.When overridden in a derived class, provides a list of custom attributes for the specified member, as represented in this reflection context.

GetCustomAttributes(ParameterInfo, IEnumerable<Object>)

Cuando se reemplaza en una clase derivada, proporciona una lista de atributos personalizados para el parámetro especificado, como se representa en este contexto de reflexión.When overridden in a derived class, provides a list of custom attributes for the specified parameter, as represented in this reflection context.

GetHashCode()

Sirve como función hash predeterminada.Serves as the default hash function.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
GetTypeForObject(Object)

Obtiene la representación del tipo del objeto especificado en este contexto de reflexión.Gets the representation of the type of the specified object in this reflection context.

(Heredado de ReflectionContext)
MapAssembly(Assembly)

Obtiene la representación, en este contexto de reflexión, de un ensamblado representado por un objeto de otro contexto de reflexión.Gets the representation, in this reflection context, of an assembly that is represented by an object from another reflection context.

MapType(TypeInfo)

Obtiene la representación, en este contexto de reflexión, de un tipo representado por un objeto de otro contexto de reflexión.Gets the representation, in this reflection context, of a type represented by an object from another reflection context.

MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
ToString()

Devuelve un valor de tipo string que representa el objeto actual.Returns a string that represents the current object.

(Heredado de Object)

Se aplica a