gpt4 book ai didi

c# - 为什么 C# CreateObject 比 VB.NET 冗长得多?

转载 作者:太空狗 更新时间:2023-10-29 18:15:06 25 4
gpt4 key购买 nike

我希望将一些 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 函数而直接调用该函数?

最佳答案

Is there a way of getting c# to not have to use the InvokeMember function and just call the function directly?

是的,从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com