@usetester

Как возможно получить инстанс объекта по имени его статического класса?

Мы очень далеки от C#, но для работы оборудования нам требуется взаимодействие с чужим SDK в виде DLL. В этой DLL есть много однотипных статических классов, хранящих состояние переключателей, которые возможно вызывать как A.B.C.D.
Требуется функция, в которую мы передаем строковую сигнатуру конечного объекта "A.B.C.D", и эта функция возвращает нам соответствующий инстанс.
Вероятно, такую задачу надо решать как-то через рефлексию, но по полному незнанию возможностей языка гуглить толком не получается.
  • Вопрос задан
  • 433 просмотра
Пригласить эксперта
Ответы на вопрос 2
tomnolane
@tomnolane
профессиональный разработчик
если нужна рефлексия, то вот:
using System.Reflection;

Assembly assembly = Assembly.LoadFrom(@"полный путь к dll в виде строки"); // загружаем dll 
                Type type = assembly.GetType("Library2.MainWindow"); // namespace.class
                dynamic obj = Activator.CreateInstance(type); //получаем/создаём объект
                Window dd = (Window)obj; // преобразовываем объект как вам нужно, в данном случае создаётся объект WIndow (dll - от WPF)
                dd.Show();  //и работает уже с ним...


UPD

Assembly assembly = Assembly.LoadFrom("https://tft.a*****.SDK.dll"); 
                Type type = assembly.GetType("SkalarkiIO.SDK.Outputs+GLARE+FCU");
                MethodInfo myMethodInfo = type.GetMethod("get_All");
                var t = myMethodInfo.Invoke(type, null);
Ответ написан
@John_Nash
coder
Чтобы из неуправляемого кода обращаться к сборке NET, придется написать обертку в mixed mode (например на c++ cli).
Или такой еще вариант

Ну, и
Вызов методов через рефлексию
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы