Вы можете сделать это с помощью отражения и (необязательно) динамической генерации IL.
Например, когда вы знаете тип (т.е. имеете экземпляр System.Type
), вы можете перечислить все поля (type.GetFields()
возвращает список FieldInfo
объектов), а затем используйте метод GetValue
для получения значения поля.Это работает с частными полями, если пройдены проверки уровня доверия безопасности.
Это не очень быстро, поэтому вы можете захотеть предварительно скомпилировать код доступа к полю (делайте это только после того, как профилировщик скажет вам!),В этом случае вы можете использовать System.Reflection.Emit
и DynamicMethod
услуги.(вы можете найти учебники в Google и MSDN; я нашел полезным скомпилировать некоторые функции, которые делают то же, что и я, с C # / F #, а затем проверить вывод MSIL в Reflector / ildasm).