การสะท้อนคือเมื่อโค้ดที่ได้รับการจัดการสามารถอ่านข้อมูลเมตาของตัวเองเพื่อค้นหาแอสเซมบลีได้ โดยพื้นฐานแล้ว โค้ดดังกล่าวจะช่วยให้โค้ดตรวจสอบโค้ดอื่นๆ ภายในระบบเดียวกันได้ ด้วยการสะท้อนแสงใน C # เราสามารถสร้างอินสแตนซ์ของประเภทแบบไดนามิกและผูกประเภทนั้นกับวัตถุที่มีอยู่ ยิ่งกว่านั้น เราสามารถรับประเภทจากวัตถุที่มีอยู่และคุณสมบัติการเข้าถึงได้ เมื่อเราใช้แอตทริบิวต์ในโค้ดของเรา การสะท้อนกลับทำให้เราเข้าถึงได้เนื่องจากมีอ็อบเจ็กต์ประเภทที่อธิบายโมดูล แอสเซมบลี และประเภท
สมมติว่าเรามีคุณสมบัติประเภท double และในรันไทม์เรามีค่าเป็นสตริงและกำหนดให้กับคุณสมบัติหลังจากเปลี่ยนประเภท เราสามารถใช้ Convert.ChangeType() - ช่วยให้เราใช้ข้อมูลรันไทม์กับ IConvertible ประเภทใดก็ได้เพื่อเปลี่ยนรูปแบบการแสดง
ตัวอย่าง
using System; using System.Reflection; namespace DemoApplication{ class Program{ static void Main(){ Circle circle = new Circle(); string value = "6.5"; PropertyInfo propertyInfo = circle.GetType().GetProperty("Radius"); propertyInfo.SetValue(circle, Convert.ChangeType(value, propertyInfo.PropertyType), null); var radius = circle.GetType().GetProperty("Radius").GetValue(circle, null); Console.WriteLine($"Radius: {radius}"); Console.ReadLine(); } } class Circle{ public double Radius { get; set; } } }
ผลลัพธ์
Radius: 6.5
ในตัวอย่างข้างต้น เราจะเห็นว่าค่าสตริง "6.5" ถูกแปลงเป็น typedouble จริงโดยใช้ Convert.ChangeType และกำหนดให้กับคุณสมบัติ Radius โดยใช้การสะท้อน inruntime