Refleksi dalam C# merujuk kepada mekanisme yang membolehkan atur cara memperoleh dan memanipulasi maklumat jenis secara dinamik semasa masa jalan. Melalui refleksi, kita boleh mendapatkan jenis semasa runtime, mengakses ahli jenis (sifat, kaedah, medan, dll.), mencipta contoh dan kaedah panggilan, dan juga mengubah suai ahli jenis secara dinamik.
Refleksi sangat berguna dalam banyak senario, terutamanya apabila menulis kod atau rangka kerja umum. Ia membolehkan kami memuatkan dan menggunakan jenis secara dinamik berdasarkan maklumat tanpa mengetahui jenis tertentu.
Refleksi dalam C# disokong terutamanya oleh beberapa kelas dan antara muka di bawah ruang nama System.Reflection
. Antaranya, kelas Assembly
digunakan untuk memuatkan dan mengakses maklumat pemasangan, kelas Type
digunakan untuk mendapatkan dan mengendalikan maklumat jenis dan MethodInfo kelas digunakan untuk mendapatkan dan maklumat kaedah Operasi, kelas <code>PropertyInfo
digunakan untuk mendapatkan dan mengendalikan maklumat atribut, dsb. System.Reflection
命名空间下的一些类和接口来支持。其中,Assembly
类用于加载和访问程序集信息,Type
类用于获取和操作类型信息,MethodInfo
类用于获取和操作方法信息,PropertyInfo
类用于获取和操作属性信息等等。
下面通过一个具体的代码示例来演示如何使用反射。
using System; using System.Reflection; class MyClass { public int MyProperty { get; set; } public void MyMethod() { Console.WriteLine("Hello, reflection!"); } } class Program { static void Main(string[] args) { // 加载程序集 Assembly assembly = Assembly.GetExecutingAssembly(); // 获取类型 Type myClassType = assembly.GetType("MyNamespace.MyClass"); // 创建实例 object myClassInstance = Activator.CreateInstance(myClassType); // 获取属性 PropertyInfo myProperty = myClassType.GetProperty("MyProperty"); // 设置属性值 myProperty.SetValue(myClassInstance, 42); // 获取方法 MethodInfo myMethod = myClassType.GetMethod("MyMethod"); // 调用方法 myMethod.Invoke(myClassInstance, null); } }
上面的代码首先通过Assembly.GetExecutingAssembly()
方法获取当前程序集的信息,然后使用GetType
方法获取MyClass
的Type
对象。接下来,通过Activator.CreateInstance
方法创建了MyClass
的实例。
通过反射,我们获取了MyProperty
和MyMethod
的信息,并使用SetValue
方法设置了属性的值,使用Invoke
rrreee
Kod di atas mula-mula mendapatkan maklumat pemasangan semasa melalui kaedahAssembly.GetExecutingAssembly()
, dan kemudian menggunakan kaedah GetType
untuk mendapatkan MyClass
code>Jenisobjek. Seterusnya, contoh MyClass
dibuat melalui kaedah Activator.CreateInstance
. 🎜🎜Melalui refleksi, kami memperoleh maklumat MyProperty
dan MyMethod
, dan menggunakan kaedah SetValue
untuk menetapkan nilai harta tersebut dan menggunakan Invoke
Kaedah memanggil kaedah. 🎜🎜Melalui contoh mudah ini, kita dapat melihat kuasa refleksi, yang membolehkan kita memuatkan, mengakses dan mengubah suai ahli jenis secara dinamik pada masa jalan, mencapai reka bentuk kod yang lebih fleksibel dan serba boleh. Walau bagaimanapun, refleksi mungkin membawa overhed prestasi, jadi ia perlu digunakan dengan berhati-hati dalam senario dengan keperluan prestasi tinggi. 🎜Atas ialah kandungan terperinci Pengenalan kepada mekanisme pantulan dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!