Как возможно получить инстанс объекта по имени его статического класса?
Мы очень далеки от C#, но для работы оборудования нам требуется взаимодействие с чужим SDK в виде DLL. В этой DLL есть много однотипных статических классов, хранящих состояние переключателей, которые возможно вызывать как A.B.C.D.
Требуется функция, в которую мы передаем строковую сигнатуру конечного объекта "A.B.C.D", и эта функция возвращает нам соответствующий инстанс.
Вероятно, такую задачу надо решать как-то через рефлексию, но по полному незнанию возможностей языка гуглить толком не получается.
Assembly ass = Assembly.Load("SkalarkiIO.SDK"); // имя сборки
Type t = ass.GetType("SkalarkiIO.SDK.Displays"); // namespace.имя_класса
t = t.GetNestedType("OVHD");
t = t.GetNestedType("ELEC");
// TODO Change to while NestedType != null do t = t.GetNestedType(...)
FieldInfo f = t.GetField("BAT1", BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.Static); // поле
object value = f.GetValue(null); // значение поля
eventClient.SetDisplayText((SkalarkiIO.SDK.IDisplayDescriptor)value,"123");
John_Nash: Для нас mixed mode - темный лес :) Нам нужно консольное приложение, с которым будет взаимодействовать оборудование, мы его на c# накидали, но уперлись в вышеописанную проблему. Хардкодить имена классов нельзя, поскольку они будут меняться у вендора, и нам фактически нужна обертка для изоляции этих изменений. Готовы заплатить за решение.
По факту нам надо не обертку а именно понять как решить нашу запутку. Некий код, работающий с оборудованием, уже есть, так что проще дописать туда, чем делать отдельное решение.