Хранит ли переменная класса .Net переменные? - PullRequest
0 голосов
/ 21 августа 2010

Хорошо, вот история.

У меня есть массив сборок, которые инициируются [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

Если я вызову метод Test с использованием того же массива сборок где-нибудь позже в основном приложении (например, нажатием кнопки или чего-то для его запуска), появится всплывающее окно с сообщением: «C = 0»

Почему это? Это исправимо без каких-либо странных обходных путей?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 21 августа 2010

Методы InitMain и Test, а также ваша переменная C - все переменные экземпляра, определенные в вашем примере Example. Каждый экземпляр класса Example имеет свои собственные копии как методов, так и переменной.

Я подозреваю, что ваш код создает новый экземпляр класса Example и вызывает для этого метод InitMain. Позже вы создаете новый экземпляр и вызываете Test для этого. Эти два экземпляра не будут использовать одну и ту же копию переменной C.

Обходной путь должен определить C как переменную Shared (статическую в C #). Теперь у вас будет только одна копия переменной C, которая является общей для всех экземпляров класса Example.

Вы также можете определить методы InitMain и Test как Shared. Если вы сделаете это, у вас будет только один экземпляр каждого метода, и вы должны будете вызывать его следующим образом: Example.InitMain () вместо создания экземпляра и вызова метода для этого.

0 голосов
/ 21 августа 2010

Итак, вам нужно вызывать sub initMain после создания экземпляра класса Example и перед вызовом sub Test?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...