2016-07-09 6 views
0

Когда я использую следующий код для создания моего объекта, значения, которые я назначаю в части с, не отражают в моем классе, и я пытаюсь использовать эти значения в части Sub New(), которая находится во втором фрагменте. Как я могу сделать эту работу?Свойство в объекте, не обновляющемся

Dim RoughPnl As New RoughPnl(trvPartList, pnlBasePanel, chkRoughUnderFinal.Checked) With 
       {.Material = cboMaterial.Text, .Label = cboLabel.Text, .Qty = cboQty.Text, 
        .BoardThickness = cboThickness.Text, 
        .BoardWidth = cboWidth.Text, 
        .BoardLength = cboLength.Text, 
        .BoardColor = picFinalColor.Tag, 
        .BoardImage = picFinalColor.Image, 
        .DimLinesON = chkFinalDimLines.Checked, 
        .LabelsON = chkLabelsON.Checked, 
        .SizeON = chkSizeON.Checked} 

второй Отрывок

Public NotInheritable Class RoughPnl 
    Inherits MyPanel 

    Sub New(objTree As TreeView, basePnl As Panel, rpnl As boolean) 
     MyBase.New(objTree, basePnl) 

     'Initial values 
     m_myKey = myKey 
     m_refNum = refNum 
     m_material = material 
     m_label = label 
     m_qty = qty 
     m_pnlID = "Rough" 
     Me.Name = m_pnlID & "key" & m_material & "-" & m_myKey 
    End Sub 
End Class 
+1

Ваш 'With' раздел запускается * после * конструктор завершается. Поэтому эти переменные будут их значениями по умолчанию, когда вы действительно находитесь в конструкторе. Есть ли причина, по которой вы не просто предоставляете эти значения в качестве параметров конструктору? –

ответ

0

Как было предложено @GlorinOakenfoot, код так:

Dim obj As New SomeType With {.SomeProperty = someValue} 

просто сокращение для этого:

Dim obj As New SomeType 

obj.SomeProperty = someValue 

Должно быть очевидно, почему вы не можете использовать someValue в конструкторе. Если вы хотите использовать значение в конструкторе, то, как и для любого другого метода, вы должны указать это значение через параметр.

+0

Я не передавал их как паразиты, потому что это казалось дополнительным кодом для написания, но теперь, глядя на него, возможно, это единственный способ. Я просто подумал, что все эти параметры выглядят как плохая практика. Сколько будет слишком много параметров? Когда я увидел эту порцию, я подумал, что это их прощание, но я не думаю. Я просто борюсь с этими объектами. – goomba454

+0

Конструктор, как и любой метод, должен иметь все необходимые ему параметры и только те параметры, которые ему нужны. Если вам нужно использовать значение в конструкторе, то этот конструктор должен иметь параметр для этого значения. Помните, что вы можете перегрузить конструктор, чтобы иметь разные комбинации параметров. Если вашему объекту требуется значение, чтобы существовать, все конструкторы должны иметь параметр для этого значения. Любые значения, которые являются необязательными, должны быть оставлены как свойства, чтобы вызывающий мог их опционально установить. – jmcilhinney

+0

Короче, нужно ли добавить параметр к конструктору, а не номер. Если вам нужно значение, укажите параметр, а если нет, то нет. – jmcilhinney

Смежные вопросы