CustomReflectionContext Sınıf

Tanım

Özelleştirilebilir bir yansıma bağlamı temsil eder.

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
Devralma
CustomReflectionContext
Türetilmiş

Örnekler

Aşağıdaki örnek, adları "To" ile başlayan belirli bir türün tüm üyelerine özel bir öznitelik eklemek için CustomReflectionContext sınıfının nasıl alt sınıf yapılacağını göstermektedir. Bu kodu çalıştırmak için boş bir konsol projesine yapıştırın ve System.Reflection.Context.dlliçin bir başvuru eklediğinizden emin olun.

//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();
    }
}

Açıklamalar

CustomReflectionContext yansıma modelinin tamamını yeniden uygulamadan yansıma nesnelerinden özel öznitelikler eklemenizi veya kaldırmanızı ya da bu nesnelere sahte özellikler eklemenizi sağlar. Varsayılan değer CustomReflectionContext , herhangi bir değişiklik yapmadan yansıma nesnelerini sarmalar, ancak ilgili yöntemleri alt sınıflandırıp geçersiz kılarak, yansıtılan herhangi bir parametreye veya üyeye uygulanan öznitelikleri ekleyebilir, kaldırabilir veya değiştirebilir ya da yansıtılmış bir türe yeni özellikler ekleyebilirsiniz.

Örneğin, kodunuzun fabrika yöntemlerine belirli bir özniteliği uygulama kuralına uyduğunu, ancak artık öznitelikleri olmayan üçüncü taraf kodlarla çalışmanız gerektiğini varsayalım. Öznitelikleri olması gereken nesneleri tanımlamak ve nesneleri kodunuzdan görüntülendiğinde bu özniteliklerle sağlamak için bir kural belirtmek için kullanabilirsiniz CustomReflectionContext .

Etkili bir şekilde kullanmak CustomReflectionContext için, yansıtılan nesneleri kullanan kodun, yansıtılan tüm nesnelerin çalışma zamanı yansıma bağlamıyla ilişkili olduğunu varsaymak yerine bir yansıma bağlamı belirtme düşüncesini desteklemesi gerekir. .NET Framework'teki birçok yansıma yöntemi bu amaçla bir ReflectionContext parametre sağlar.

Yansıtılan bir parametreye veya üyeye uygulanan öznitelikleri değiştirmek için GetCustomAttributes(ParameterInfo, IEnumerable<Object>) veya GetCustomAttributes(MemberInfo, IEnumerable<Object>) yöntemlerini geçersiz kılın. Bu yöntemler yansıtılan nesneyi ve öznitelik listesini geçerli yansıma bağlamı altına alır ve özel yansıma bağlamı altında sahip olması gereken özniteliklerin listesini döndürür.

Warning

CustomReflectionContext yöntemleri, sağlanan GetCustomAttributes veya MemberInfo örneğine ParameterInfo yöntemini doğrudan çağırarak yansıtılan bir nesnenin ya da yöntemin öznitelik listesine erişmemeli, bunun yerine parametre olarak declaredAttributes yöntem aşırı yüklemelerine geçirilen listeyi kullanmalıdırGetCustomAttributes.

Yansıtılan bir türe özellik eklemek için AddProperties yöntemini geçersiz kılın. yöntemi, yansıtılan türü belirten bir parametre kabul eder ve ek özelliklerin listesini döndürür. Özellik nesneleri döndürmek için CreateProperty yöntemini kullanmanız gerekir. Özellik erişimcisi olarak görev yapacak özelliği oluştururken temsilciler belirtebilir ve erişimcilerden birini atlayarak salt okunur veya salt yazma özelliği oluşturabilirsiniz. Bu tür geçici özelliklerin herhangi bir meta veri veya Ortak Ara Dil (CIL) desteği olmadığını unutmayın.

Warning

Yansıma bağlamlarıyla çalışırken yansıtılan nesneler arasındaki eşitlik konusunda dikkatli olun, çünkü nesneler aynı yansıtılan nesneyi birden çok bağlamda temsil edebilir. Yansıtılan bir nesnenin belirli bir yansıma bağlamındaki sürümünü elde etmek için MapType yöntemini kullanabilirsiniz.

Warning

Belirli bir yansıtma nesnesi tarafından döndürülen ve CustomReflectionContext yöntemiyle elde edilen öznitelikleri bir GetCustomAttributes nesnesi değiştirir. Yöntemi tarafından döndürülen özel öznitelik verilerini değiştirmez ve özel yansıma bağlamı GetCustomAttributesData kullandığınızda bu iki liste eşleşmez.

Oluşturucular

Name Description
CustomReflectionContext()

CustomReflectionContext sınıfının yeni bir örneğini başlatır.

CustomReflectionContext(ReflectionContext)

Temel olarak belirtilen yansıma bağlamıyla sınıfının yeni bir örneğini CustomReflectionContext başlatır.

Yöntemler

Name Description
AddProperties(Type)

Türetilmiş bir sınıfta geçersiz kılındığında, bu yansıma bağlamında gösterildiği gibi belirtilen tür için ek özellikler koleksiyonu sağlar.

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

yöntemiyle ve belirtilen özel öznitelikleri AddProperties(Type) kullanarak bir türe eklenecek özelliği temsil eden bir nesne oluşturur.

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

yöntemiyle AddProperties(Type) kullanılacak bir türe eklenecek özelliği temsil eden bir nesne oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetCustomAttributes(MemberInfo, IEnumerable<Object>)

Türetilmiş bir sınıfta geçersiz kılındığında, bu yansıma bağlamında gösterildiği gibi belirtilen üye için özel özniteliklerin listesini sağlar.

GetCustomAttributes(ParameterInfo, IEnumerable<Object>)

Türetilmiş bir sınıfta geçersiz kılındığında, bu yansıma bağlamında gösterildiği gibi belirtilen parametre için özel özniteliklerin listesini sağlar.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
GetTypeForObject(Object)

Bu yansıma bağlamında belirtilen nesne türünün gösterimini alır.

(Devralındığı yer: ReflectionContext)
MapAssembly(Assembly)

Bu yansıma bağlamında, başka bir yansıma bağlamından bir nesne tarafından temsil edilen bir derlemenin gösterimini alır.

MapType(TypeInfo)

Bu yansıma bağlamında, başka bir yansıma bağlamından bir nesne tarafından temsil edilen bir türün gösterimini alır.

MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır