Computer >> Máy Tính >  >> Lập trình >> C#

Làm cách nào để đặt thuộc tính có kiểu dữ liệu khác với giá trị chuỗi bằng cách sử dụng phản xạ trong C #?

Phản ánh là khi mã được quản lý có thể đọc siêu dữ liệu của chính nó để tìm các tập hợp, về mặt cơ bản, nó cho phép mã kiểm tra mã khác trong cùng hệ thống. Với sự phản chiếu trong C #, chúng ta có thể tạo động một thể hiện của một kiểu và liên kết kiểu đó với đối tượng hiện có. Hơn nữa, chúng ta có thể lấy kiểu từ một đối tượng hiện có và truy cập các thuộc tính. Khi chúng tôi sử dụng các thuộc tính trong mã của mình, sự phản chiếu cho phép chúng tôi truy cập vì nó cung cấp các đối tượng thuộc Loại mô tả các mô-đun, cụm và kiểu.

Giả sử chúng ta có thuộc tính kiểu double và trong thời gian chạy, chúng ta thực sự có giá trị là chuỗi và gán nó cho thuộc tính sau khi thay đổi kiểu. Chúng tôi có thể sử dụng Convert.ChangeType () - Nó cho phép chúng tôi sử dụng thông tin thời gian chạy trên bất kỳ loại IConvertible nào để thay đổi các định dạng biểu diễn.

Ví dụ

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; }
   }
}

Đầu ra

Radius: 6.5

Trong ví dụ trên, chúng ta có thể thấy rằng giá trị chuỗi "6.5" được chuyển đổi thành có thể gõ thực tế bằng Convert.ChangeType và được gán cho thuộc tính Radius bằng cách sử dụng thời gian phản chiếu.