Как ссылаться на переменную класса из другого класса в vb.net

У меня есть следующее (упрощено, чтобы его было легко читать)

первый класс:

Class MainWindow
     Private mFile As myFile 'myFile is a class containing a bunch of stuff

     Sub go()
          dim editFiles as New EditFiles(mFile)
     End Sub
End Class

Второй класс:

Public Class EditFiles
    Private mFile As myFile 'myFile is a class containing a bunch of stuff
Sub New(ByRef passedFile As myFile)

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

    mFile = passedFile

End Sub

то, что я хотел бы, - это любые изменения, которые я делаю в mFile во втором классе, чтобы также изменить mFile в первом классе, я думал, что, передав его ByRef при инициализации, это произойдет, но, по-видимому, нет.

Что мне интересно, так это то, что это подходящий метод, чтобы сделать эту работу? Я знаю, что мог бы создать глобальную переменную, но должен быть способ передать указатель mFile из первого класса, чтобы mFile во втором классе был по существу таким же.

Если бы вы могли показать мне простой пример, возможно, отредактировав приведенный выше код, я был бы очень признателен!


person user1839684    schedule 20.11.2012    source источник
comment
Из первого класса вы не создаете экземпляр «myFile» перед передачей его объекту «EditFiles», поэтому он не будет работать ... Является ли это ошибкой упрощения кода?   -  person Minus    schedule 20.11.2012


Ответы (3)


Вы должны создать объект первого класса во втором классе. Также вам нужен метод, который изменяет значение mFile в первом классе. Это должно быть что-то вроде следующего.

Class MainWindow
     Private  mFile As myFile 'myFile is a class containing a bunch of stuff

     Sub go()
          dim editFiles as New EditFiles(mFile)

     End Sub

     sub setMFile(_mfile as myfile)
        me.mfile = _mfile
End Class

Второй класс

Public Class EditFiles
    Private mFile As myFile 'myFile is a class containing a bunch of stuff
    Sub New(ByRef passedFile As myFile)

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

    mFile = passedFile
    dim newObject as new MainWindow
    newobject.setMFile(mFile)
End Sub
person Austin Davis    schedule 20.11.2012
comment
Спасибо, это заставило меня задуматься в правильном направлении, в итоге я передал первый класс второму классу, когда я его инициализировал, а затем, после того, как я закончил всю свою работу, я мог установить mFile равными друг другу и готово! - person user1839684; 21.11.2012
comment
Поэтому, если мой ответ окажется правильным, нажмите на галочку рядом с моим ответом. Если нет, опубликуйте свой собственный ответ с примером кода, чтобы помочь будущим зрителям этого сообщения. - person Austin Davis; 21.11.2012

Вы должны убедиться, что переменная mFile в MainWindow инициализирована перед передачей ее объекту EditFiles.

Кроме того, если myFile является классом, вам даже не нужно передавать его ByRef.

person Meta-Knight    schedule 20.11.2012

Вот как я решил свою проблему:

 Class MainWindow
 Private  mFile As myFile 'myFile is a class containing a bunch of stuff

 Sub go()
      dim editFiles as New EditFiles(me, mFile)
 End Sub

 sub setMFile(_mfile as myfile)
    me.mfile = _mfile
 End Class

Второй класс

Public Class EditFiles
Private mainWindow As mainWindow
Private mFile as myFile
Sub New(ByVal sourceWindow As mainWindow, byVal sourceFile as myFile)

     ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    mainWindow = sourceWindow
    mFile = sourceFile

end Sub
Sub setFile
    mainWindow.setMFile(mFile)
End Sub
person user1839684    schedule 21.11.2012
comment
Было ли что-то, что мешало вам инициализировать mFile в MainWindow перед созданием экземпляра EditFiles? Потому что это было бы гораздо проще. - person Meta-Knight; 21.11.2012
comment
Что ж, это не лучшее решение, но оно работает. Я думаю, что было бы лучше создать общедоступное свойство во втором классе, на которое я ссылаюсь в первом классе, чтобы получить mfile. - person user1839684; 14.07.2014