Bagikan melalui


CustomReflectionContext Kelas

Definisi

Mewakili konteks pantulan yang dapat disesuaikan.

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
Warisan
CustomReflectionContext
Turunan

Contoh

Contoh berikut menunjukkan cara subkelas CustomReflectionContext untuk menambahkan atribut kustom ke semua anggota jenis tertentu yang namanya dimulai dengan "Ke". Untuk menjalankan kode ini, tempelkan ke proyek konsol kosong, dan pastikan untuk menyertakan referensi ke 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();
    }
}

Keterangan

CustomReflectionContext menyediakan cara bagi Anda untuk menambahkan atau menghapus atribut kustom dari objek refleksi, atau menambahkan properti dummy ke objek tersebut, tanpa menerapkan kembali model pantulan lengkap. Default CustomReflectionContext hanya membungkus objek pantulan tanpa membuat perubahan apa pun, tetapi dengan subkelas dan mengambil alih metode yang relevan, Anda dapat menambahkan, menghapus, atau mengubah atribut yang berlaku untuk parameter atau anggota yang tercermin, atau menambahkan properti baru ke jenis yang tercermin.

Misalnya, kode Anda mengikuti konvensi penerapan atribut tertentu ke metode pabrik, tetapi Anda sekarang diharuskan untuk bekerja dengan kode pihak ketiga yang tidak memiliki atribut. Anda dapat menggunakan CustomReflectionContext untuk menentukan aturan untuk mengidentifikasi objek yang harus memiliki atribut dan untuk menyediakan objek dengan atribut tersebut saat dilihat dari kode Anda.

Untuk menggunakan CustomReflectionContext secara efektif, kode yang menggunakan objek yang tercermin harus mendukung gagasan menentukan konteks refleksi, alih-alih mengasumsikan bahwa semua objek yang tercermin dikaitkan dengan konteks refleksi runtime. Banyak metode refleksi dalam .NET Framework menyediakan ReflectionContext parameter untuk tujuan ini.

Untuk mengubah atribut yang diterapkan ke parameter atau anggota yang tercermin, ganti GetCustomAttributes(ParameterInfo, IEnumerable<Object>) metode atau GetCustomAttributes(MemberInfo, IEnumerable<Object>) . Metode ini mengambil objek yang tercermin dan daftar atribut di bawah konteks pantulannya saat ini, dan mengembalikan daftar atribut yang harus dimilikinya di bawah konteks refleksi kustom.

Peringatan

CustomReflectionContextMetode tidak boleh mengakses daftar atribut objek atau metode yang tercermin secara langsung dengan memanggil GetCustomAttributes metode pada instans atau ParameterInfo yang disediakanMemberInfo, tetapi harus menggunakan declaredAttributes daftar, yang diteruskan sebagai parameter ke GetCustomAttributes metode kelebihan beban.

Untuk menambahkan properti ke jenis yang tercermin, ambil alih AddProperties metode . Metode menerima parameter yang menentukan jenis yang tercermin, dan mengembalikan daftar properti tambahan. Anda harus menggunakan CreateProperty metode untuk membuat objek properti untuk dikembalikan. Anda dapat menentukan delegasi saat membuat properti yang akan berfungsi sebagai pengaktor properti, dan Anda dapat menghilangkan salah satu pengaktor untuk membuat properti baca-saja atau tulis-saja. Perhatikan bahwa properti dummy tersebut tidak memiliki metadata atau dukungan Common Intermediate Language (CIL).

Peringatan

Berhati-hatilah tentang kesetaraan di antara objek yang tercermin saat Anda bekerja dengan konteks refleksi, karena objek dapat mewakili objek yang tercermin yang sama dalam beberapa konteks. Anda dapat menggunakan MapType metode untuk mendapatkan versi konteks refleksi tertentu dari objek yang tercermin.

Peringatan

Objek CustomReflectionContext mengubah atribut yang dikembalikan oleh objek pantulan tertentu, seperti yang diperoleh dengan GetCustomAttributes metode . Ini tidak mengubah data atribut kustom yang dikembalikan oleh GetCustomAttributesData metode , dan kedua daftar ini tidak akan cocok saat Anda menggunakan konteks pantulan kustom.

Konstruktor

CustomReflectionContext()

Menginisialisasi instans baru kelas CustomReflectionContext.

CustomReflectionContext(ReflectionContext)

Menginisialisasi instans CustomReflectionContext baru kelas dengan konteks refleksi yang ditentukan sebagai basis.

Metode

AddProperties(Type)

Saat ditimpa di kelas turunan, menyediakan kumpulan properti tambahan untuk jenis yang ditentukan, seperti yang diwakili dalam konteks refleksi ini.

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

Membuat objek yang mewakili properti yang akan ditambahkan ke jenis, untuk digunakan dengan AddProperties(Type) metode .

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

Membuat objek yang mewakili properti yang akan ditambahkan ke jenis, untuk digunakan dengan AddProperties(Type) metode dan menggunakan atribut kustom yang ditentukan.

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GetCustomAttributes(MemberInfo, IEnumerable<Object>)

Saat ditimpa di kelas turunan, berikan daftar atribut kustom untuk anggota yang ditentukan, seperti yang diwakili dalam konteks refleksi ini.

GetCustomAttributes(ParameterInfo, IEnumerable<Object>)

Saat ditimpa di kelas turunan, berikan daftar atribut kustom untuk parameter yang ditentukan, seperti yang diwakili dalam konteks refleksi ini.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
GetTypeForObject(Object)

Mendapatkan representasi jenis objek yang ditentukan dalam konteks refleksi ini.

(Diperoleh dari ReflectionContext)
MapAssembly(Assembly)

Mendapatkan representasi, dalam konteks refleksi ini, dari rakitan yang diwakili oleh objek dari konteks refleksi lain.

MapType(TypeInfo)

Mendapatkan representasi, dalam konteks refleksi ini, dari jenis yang diwakili oleh objek dari konteks pantulan lain.

MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk