полностью связанный слой отличается от документации [тензор потока]

Если вы измените все свои типы на классы. У вас есть варианты. Большая ошибка перехода от типа к классу заключается в том, что вам нужно использовать новый keyworld. Каждый раз, когда объявление переменной типа добавляет новое.

Тогда вы можете использовать ключевое слово варианта или CallByName. VB6 не имеет никакого типа отражения, но вы можете составить список допустимых полей и проверить, присутствуют ли они, например

. Тест класса имеет следующий

Public Key As String
Public Data As String

You может затем выполнить следующее

Private Sub Command1_Click()
    Dim T As New Test 'This is NOT A MISTAKE read on as to why I did this.
    T.Key = "Key"
    T.Data = "One"
    DoTest T
End Sub

Private Sub DoTest(V As Variant)
    On Error Resume Next
    Print V.Key
    Print V.Data
    Print V.DoesNotExist
    If Err.Number = 438 Then Print "Does Not Exist"
    Print CallByName(V, "Key", VbGet)
    Print CallByName(V, "Data", VbGet)
    Print CallByName(V, "DoesNotExist", VbGet)
    If Err.Number = 438 Then Print "Does Not Exist"
End Sub

. Если вы попытаетесь использовать поле, которое не существует, будет поднята ошибка 438. CallByName позволяет использовать строки для вызова поля и методов класса.

Что VB6 делает, когда вы объявляете Dim как New, довольно интересно и значительно минимизирует ошибки в этом преобразовании. Вы видите, что это

Dim T as New Test

не обрабатывается точно так же, как

Dim T as Test
Set T = new Test

Например, это будет работать

Dim T as New Test
T.Key = "A Key"
Set T = Nothing
T.Key = "A New Key"

. Это даст ошибку

Dim T as Test
Set T = New Test
T.Key = "A Key"
Set T = Nothing
T.Key = "A New Key"

Причиной этого является то, что в первом примере флаги VB6 T, так что в любой момент доступа к члену он проверяет, является ли T ничем. Если это так, он автоматически создаст новый экземпляр тестового класса, а затем назначит переменную.

Во втором примере VB не добавляет этого поведения.

В большинстве проектов мы строго следим за тем, чтобы мы пошли Dim T в качестве теста, Set T = New Test. Но в вашем случае, поскольку вы хотите конвертировать типы в классы с наименьшим количеством побочных эффектов, используя Dim T, поскольку новый тест - это путь. Это связано с тем, что Dim как New заставляет переменную имитировать способ работы более тесно.

0
задан Shuangjun Liu 6 March 2019 в 16:32
поделиться