Share via


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 örnekte, adları "Kime" ile başlayan belirli bir türün tüm üyelerine özel bir öznitelik eklemek için alt sınıfın CustomReflectionContext nasıl ekleneceği gösterilmektedir. Bu kodu çalıştırmak için boş bir konsol projesine yapıştırın ve System.Reflection.Context.dll başvurusu 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ıtma modelinin tamamını yeniden uygulamadan yansıma nesnelerinden özel öznitelikler eklemenize veya bunları kaldırmanıza ya da bu nesnelere sahte özellikler eklemenize olanak sağlar. Varsayılan, CustomReflectionContext hiç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 kodla çalışmanız gerektiğini varsayalım. Öznitelikleri olması gereken nesneleri tanımlamak için bir kural belirtmek ve nesneleri kodunuzdan görüntülendiğinde bu özniteliklerle sağlamak 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ı ile ilişkili olduğunu varsaymak yerine bir yansıma bağlamı belirtme düşüncesini desteklemesi gerekir. .NET Framework birçok yansıma yöntemi bu amaca yönelik bir ReflectionContext parametre sağlar.

Yansıtılan bir parametreye veya üyeye uygulanan öznitelikleri değiştirmek için veya GetCustomAttributes(MemberInfo, IEnumerable<Object>) yöntemini geçersiz kılınGetCustomAttributes(ParameterInfo, IEnumerable<Object>). 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.

Uyarı

CustomReflectionContextyöntemleri, sağlanan MemberInfo veya örnekte yöntemini çağırarak GetCustomAttributes yansıtılan nesne veya yöntemin öznitelik listesine doğrudan erişmemelidir, bunun yerine yöntem aşırı yüklemelerine parametre GetCustomAttributes olarak geçirilen listeyi kullanmalıdır declaredAttributesParameterInfo.

Yansıtılan bir türe özellik eklemek için yöntemini geçersiz kılın AddProperties . yöntemi yansıtılan türü belirten bir parametre kabul eder ve ek özelliklerin listesini döndürür. Döndürülecek özellik nesneleri oluşturmak için yöntemini kullanmalısınız CreateProperty . Özellik erişimcisi olarak görev yapacak özelliği oluştururken temsilcileri belirtebilir ve bir salt okunur veya salt yazma özelliği oluşturmak için erişimcilerden birini atlayabilirsiniz. Bu tür sahte özelliklerin meta veri veya Ortak Ara Dil (CIL) yedeklemesi olmadığını unutmayın.

Uyarı

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 MapType belirli bir yansıma bağlamının sürümünü almak için yöntemini kullanabilirsiniz.

Uyarı

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

Oluşturucular

CustomReflectionContext()

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

CustomReflectionContext(ReflectionContext)

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

Yöntemler

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>)

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

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

yöntemiyle AddProperties(Type) kullanılacak ve belirtilen özel öznitelikleri kullanarak 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()

Type Geçerli örneğini 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ındaki 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ındaki bir nesne tarafından temsil edilen türün gösterimini alır.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

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

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

(Devralındığı yer: Object)

Şunlara uygulanır