Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีการตั้งค่าคุณสมบัติที่มีประเภทข้อมูลต่างกันด้วยค่าสตริงโดยใช้การสะท้อนใน C #


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