【问题标题】:Does .Net's Assembly class store variables?.Net 的 Assembly 类是否存储变量?
【发布时间】:2010-08-20 21:25:55
【问题描述】:

好的,故事就讲到这里。

我有一组由[Assembly].LoadFrom() 启动的程序集,它们加载了许多DLL。初始化时,会调用一个名为 InitMain(来自 DLL!)的方法,它会在此方法之外设置许多变量,如下所示:

Public Class Example
    Dim C As Integer = 0

    Public Sub InitMain()
        C = 50
    End Sub

    Public Sub Test()
        MsgBox("C = " & C)
    End Sub
End Class

如果我稍后在主应用程序的某处使用相同的程序集数组调用方法测试(例如按下按钮或其他东西来触发它),它将弹出一个消息框,上面写着:“C = 0”

这是为什么?是否可以在没有任何奇怪的解决方法的情况下修复?

提前致谢!

【问题讨论】:

    标签: .net vb.net assemblies


    【解决方案1】:

    方法 InitMain 和 Test 以及您的变量 C 都是在您的调用示例中定义的实例变量。 Example 类的每个实例都有自己的方法和变量的副本。

    我怀疑您的代码创建了 Example 类的新实例并在其上调用了 InitMain 方法。稍后您创建一个新实例并在其上调用 Test。这两个实例不会共享变量 C 的同一个副本。

    解决方法是将 C 定义为 Shared(C# 中的静态)变量。现在您将只有一份 C 变量副本,该副本在 Example 类的所有实例之间共享。

    您可能还想将 InitMain 和 Test 方法定义为 Shared。如果您这样做,您将只有每个方法的一个实例,并且必须像这样调用它们:Example.InitMain() 而不是创建一个实例并在其上调用该方法。

    【讨论】:

    • 啊,太好了!这解决了问题!非常感谢! :)
    【解决方案2】:

    所以你需要在实例化你的类 Example 之后调用 sub Test 之前调用 initMain sub?

    【讨论】:

    • Example 类在 DLL 中。
    • (然后通过 [Assembly].LoadFrom() 加载。)所以基本上是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2021-10-20
    相关资源
    最近更新 更多