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

จะดึงค่าคุณสมบัติแบบไดนามิกใน C # ได้อย่างไร


เราสามารถใช้ประโยชน์จากการสะท้อนเพื่อดึงค่าคุณสมบัติแบบไดนามิก

Reflection จัดเตรียมวัตถุ (ประเภท Type) ที่อธิบายการประกอบ โมดูล และประเภท เราสามารถใช้การสะท้อนเพื่อสร้างอินสแตนซ์ของประเภทแบบไดนามิก ผูกประเภทกับวัตถุที่มีอยู่ หรือรับประเภทจากวัตถุที่มีอยู่แล้วเรียกใช้เมธอดหรือเข้าถึงฟิลด์และคุณสมบัติของวัตถุ หากเราใช้แอตทริบิวต์ในโค้ดของเรา การสะท้อนกลับช่วยให้เราเข้าถึงได้

เนมสเปซ System.Reflection และคลาส System.Type มีบทบาทสำคัญใน .NET Reflection ทั้งสองทำงานร่วมกันและช่วยให้เราสามารถไตร่ตรองแง่มุมอื่นๆ ของประเภทได้

ตัวอย่าง

using System;
using System.Text;
   namespace DemoApplication {
      public class Program {
         static void Main(string[] args) {
            var employeeType = typeof(Employee);
            var employee = Activator.CreateInstance(employeeType);
            SetPropertyValue(employeeType, "EmployeeId", employee, 1);
            SetPropertyValue(employeeType, "EmployeeName", employee, "Mark");
            GetPropertyValue(employeeType, "EmployeeId", employee);
            GetPropertyValue(employeeType, "EmployeeName", employee);
            Console.ReadLine();
         }
         static void SetPropertyValue(Type type, string propertyName, object instanceObject, object value) {
            type.GetProperty(propertyName).SetValue(instanceObject, value);
         }
         static void GetPropertyValue(Type type, string propertyName, object instanceObject) {
            Console.WriteLine($"Value of Property {propertyName}:                   {type.GetProperty(propertyName).GetValue(instanceObject, null)}");
         }
      }
      public class Employee {
         public int EmployeeId { get; set; }
         public string EmployeeName { get; set; }
      }
   }

ผลลัพธ์

ผลลัพธ์ของโค้ดด้านบนคือ

Value of Property EmployeeId: 1
Value of Property EmployeeName: Mark

ในตัวอย่างข้างต้น เราจะเห็นว่าค่าคุณสมบัติของพนักงานถูกตั้งค่าโดยใช้การสะท้อนโดยรับประเภทและชื่อคุณสมบัติ ในทำนองเดียวกันสำหรับการดึงค่าคุณสมบัติที่เราใช้ GetProperty() วิธีการของคลาส Reflection เมื่อใช้สิ่งนี้ เราสามารถดึงค่าของคุณสมบัติใดๆ ระหว่างรันไทม์ได้