Khi phát xung quanh với sự phản chiếu trong Khuôn khổ .NET 4.5 mới, tôi gặp phải một hành vi lạ mà tôi thấy khá bất ngờ. Không gian tên System.Reflection cung cấp một số phương thức mở rộng mới để khai thác các đối tượng Type. Hai trong số đó là GetRuntimeProperty (tên chuỗi) và GetRuntimeProperties().Phản ánh: hành vi khung không phù hợp với các phương thức GetRuntimeProperty
Bây giờ hãy tưởng tượng rằng bạn có một đối tượng đơn giản với thuộc tính nội bộ.
public class ObjectBase
{
protected int Id { get; set; }
public string Name { get; set; }
}
Và bây giờ bạn cố gắng khai thác loại này.
var properties = typeof(ObjectBase).GetRuntimeProperties();
// properties.Count = 2
var idProperty = typeof(ObjectBase).GetRuntimeProperty("Id");
var nameProperty = typeof(ObjectBase).GetRuntimeProperty("Name");
// idProperty = null
// nameProperty = System.String Name
Đúng như dự đoán đối tượng properties
giữ hai định nghĩa thuộc tính cho Id và Tên defintions bất động sản và các nameProperty giữ nét Tên tài sản. Những gì không được mong đợi là đối tượng idProperty
là null ...
Đến từ .NET Framework, tôi đoán đây là dự định của các kiến trúc sư Microsoft nhưng tôi phải nói nó dường như không giống như điều bạn thực sự mong đợi xảy ra. Tôi tin rằng các phương pháp tương tự như vậy sẽ hoạt động giống nhau nhưng có vẻ như các bộ lọc GetRuntimeProperty trên các thuộc tính công cộng mà GetRuntimeProperties không áp dụng bộ lọc nào.
Có ai có giải thích hợp lý về lý do tại sao Microsoft quyết định rằng những phương pháp tương tự đó nên có các hành vi khác nhau không? Lỗi thiết kế?
Cảm ơn.
Hãy nhớ rằng việc sử dụng tính năng này chỉ bắt buộc trong ứng dụng Cửa hàng. Vì vậy, những gì bạn đang thấy là một sự thỏa hiệp, IInspectable không chính xác là một giao diện phong phú. –
Họ hoàn toàn buggered lên các API phản ánh mới. Đó là một mớ hỗn độn theo nhiều cách mà tôi thậm chí không biết bắt đầu từ đâu. –