การสะท้อนคือเมื่อโค้ดที่ได้รับการจัดการสามารถอ่านข้อมูลเมตาของตัวเองเพื่อค้นหาแอสเซมบลีได้ โดยพื้นฐานแล้ว โค้ดดังกล่าวจะช่วยให้โค้ดตรวจสอบโค้ดอื่นๆ ภายในระบบเดียวกันได้ ด้วยการสะท้อนแสงใน 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