我想将一些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/