Vâng, Reflection sẽ là con đường để đi. Đầu tiên, bạn sẽ lấy kiểu Type
đại diện cho kiểu (trong thời gian chạy) của thể hiện trong danh sách. Bạn có thể làm điều này bằng cách gọi GetType
phương thức trênObject
. Bởi vì nó nằm trên Object
lớp, mọi đối tượng trong .NET đều có thể gọi được , vì tất cả các loại đều xuất phát từ Object
( tốt, về mặt kỹ thuật, không phải tất cả mọi thứ , nhưng điều đó không quan trọng ở đây).
Khi bạn có Type
cá thể, bạn có thể gọi GetProperties
phương thức để lấy các PropertyInfo
thể hiện đại diện cho thông tin thời gian chạy về các thuộc tính trên Type
.
Lưu ý, bạn có thể sử dụng phiên bản nạp chồng của GetProperties
để giúp phân loại mà các thuộc tính bạn lấy.
Từ đó, bạn sẽ chỉ cần viết thông tin ra một tập tin.
Mã của bạn ở trên, được dịch, sẽ là:
// The instance, it can be of any type.
object o = <some object>;
// Get the type.
Type type = o.GetType();
// Get all public instance properties.
// Use the override if you want to classify
// which properties to return.
foreach (PropertyInfo info in type.GetProperties())
{
// Do something with the property info.
DoSomething(info);
}
Lưu ý rằng nếu bạn muốn thông tin phương thức hoặc thông tin trường, bạn sẽ phải gọi một trong những tình trạng quá tải của GetMethods
hoặc GetFields
phương thức tương ứng.
Cũng lưu ý, đây là một điều để liệt kê các thành viên vào một tệp, nhưng bạn không nên sử dụng thông tin này để điều khiển logic dựa trên các tập thuộc tính.
Giả sử bạn có quyền kiểm soát việc triển khai các loại, bạn nên xuất phát từ một lớp cơ sở chung hoặc thực hiện một giao diện chung và thực hiện các cuộc gọi trên đó (bạn có thể sử dụng as
hoặc is
toán tử để giúp xác định lớp / giao diện cơ sở nào bạn đang làm việc tại thời gian chạy).
Tuy nhiên, nếu bạn không kiểm soát các định nghĩa loại này và phải điều khiển logic dựa trên khớp mẫu, thì tốt thôi.