我想将一些VB6/COM +代码转换为C#/COM +

但是在VB6或VB.NET中,我有:

Dim objAdmin
objAdmin = Server.CreateObject("AppAdmin.GUI")
objAdmin.ShowPortal()

在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);

有没有一种方法可以使C#不必使用InvokeMember函数而直接调用该函数?

最佳答案



是的,从C#4开始,带有dynamic typing:

dynamic admin = Activator.CreateInstance(Type.GetTypeFromProgID("AppAdmin.GUI"));
admin.ShowPortal();

CreateObject部分,它仍然比较冗长,但是如果需要,您可以始终将其包装在方法调用中。 (可能存在一个我不知道的现有调用,或者您可以尝试找到那种情况下VB正在调用的任何东西-我不知道Server.CreateObject的详细信息。)

请注意,动态类型化不仅使反射更简单,而且它确实做到了。在幕后,尽管在两种情况下都将发生相同的事情-它仍然不会像静态绑定(bind)那样快,但是几乎可以肯定它足够快。

关于c# - 为什么C#CreateObject比VB.NET更加冗长?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12319422/

10-09 09:34