Так, Рефлексія була б дорогою. По-перше, ви отримаєте те, Type
що представляє тип (під час виконання) екземпляра у списку. Це можна зробити, зателефонувавши на GetType
методObject
. Оскільки він знаходиться в Object
класі, він може викликати кожен об’єкт в .NET, оскільки всі типи походять від Object
( ну, технічно, не все , але це не важливо тут).
Як тільки у вас є Type
примірник, ви можете викликати GetProperties
метод, щоб отримати PropertyInfo
екземпляри, які представляють інформацію про час роботи про властивості в Type
.
Зверніть увагу, ви можете використовувати перевантаження, GetProperties
щоб допомогти класифікувати, які властивості ви шукаєте.
Звідти ви просто записуєте інформацію у файл.
Ваш код, перекладений вище, буде таким:
// 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);
}
Зауважте, що якщо ви хочете інформацію про метод або інформацію про поле, вам доведеться викликати одне з перевантажень GetMethods
або GetFields
методів відповідно.
Також зауважте, що одне з них має перелічити членів у файлі, але ви не повинні використовувати цю інформацію для керування логікою на основі наборів властивостей.
Якщо припустити, що ви маєте контроль над реалізацією типів, вам слід виходити із загального базового класу або впроваджувати загальний інтерфейс і здійснювати дзвінки по цим (ви можете скористатися оператором as
або is
оператором, щоб визначити, для якого базового класу / інтерфейсу ви працюєте час виконання).
Однак, якщо ви не керуєте цим визначенням і доводиться керувати логікою на основі відповідності шаблонів, то це добре.