我希望将一些VB6/COM +代码转换为C#/ COM +
但是在VB6或VB.NET中,我有:
Dim objAdmin
objAdmin = Server.CreateObject("AppAdmin.GUI")
objAdmin.ShowPortal()
Run Code Online (Sandbox Code Playgroud)
在C#中,似乎我必须执行以下操作:
object objAdmin = null;
System.Type objAdminType = System.Type.GetTypeFromProgID("AppAdmin.GUI");
m_objAdmin = System.Activator.CreateInstance(objAdminType);
objAdminType.InvokeMember("ShowPortal", System.Reflection.BindingFlags.InvokeMethod, null, objAdmin, null);
Run Code Online (Sandbox Code Playgroud)
有没有办法让c#不必使用InvokeMember函数直接调用函数?
Jon*_*eet 11
有没有办法让c#不必使用InvokeMember函数直接调用函数?
是的,从动态类型的C#4开始:
dynamic admin = Activator.CreateInstance(Type.GetTypeFromProgID("AppAdmin.GUI"));
admin.ShowPortal();
Run Code Online (Sandbox Code Playgroud)
它在CreateObject部分中仍然更加冗长,但是如果你愿意,你总是可以在方法调用中将它包装起来.(可能有一个我不知道的现有电话,或者你可以尝试找到VB在这种情况下调用的任何东西 - 我不知道其中的细节Server.CreateObject.)
请注意,动态类型比仅仅使反射更简单更丰富,但它肯定会这样做.在幕后,在这两种情况下都会发生同样的事情 - 它仍然不会像静态绑定那样快,但它几乎肯定足够快.
是的,您可以使用dynamic关键字
dynamic objAdmin = System.Activator.CreateInstance(objAdminType);
objAdmin.ShowPortal();
Run Code Online (Sandbox Code Playgroud)