2013-08-22 3 views
3


Предположим, у меня есть этот родительский класс:Можно ли назначить переменную ReadOnly в дочернем классе?

Public MustInherit Class Parent 

    ' ReadOnly instance variables: 
    Protected ReadOnly str1 As String 
    Protected ReadOnly str2 As String 
    Protected ReadOnly str3 As String 

    ' constructor: 
    Public Sub New() 
    End Sub 
End Class 



Я хочу, чтобы назначить эти переменные в конструктор класса ребенок, и я хочу, чтобы они были ReadOnly, поэтому они не могут быть изменены после своего назначения, как это:

Public Class Child 
    Inherits Parent 

    ' constructor: 
    Public Sub New() 
      MyBase.New() 

      ' can't assign the ReadOnly variables here! 
      ' compile error: 'ReadOnly' variable cannot be the target of an assignment 
      Me.str1 = "asdf" 
      Me.str2 = "qwerty" 
      Me.str3 = "foobar" 
    End Sub 
End Class 



Как я могу это сделать? Если это невозможно, почему бы и нет?

ответ

2

Передайте их через родительский конструктор:

Public MustInherit Class Parent 

    ' ReadOnly instance variables: 
    Protected ReadOnly str1 As String 
    Protected ReadOnly str2 As String 
    Protected ReadOnly str3 As String 

    ' constructor: 
    Public Sub New(s1 as String, s2 as String, s3 as String) 
     str1 = s1 
     str2 = s2 
     str3 = s3 
    End Sub 
End Class 

Ваш класс, то можно сделать:

Public Class Child 
    Inherits Parent 

    ' constructor: 
    Public Sub New(s1 as String) ' You can pass these through if needed 
      MyBase.New(s1, "qwerty", "foobar") 
    End Sub 
End Class 
+0

Aha, не думать об этом, спасибо @Reed! –

+0

Привет @Reed - Можно ли передать переменную в качестве аргумента в 'MyBase.New' в' Child'? Я получаю сообщение об ошибке: 'Неявная ссылка на строящийся объект недействительна при вызове другого конструктора'. –

+1

@IanCampbell Проверьте мое редактирование - это то, что вы имеете в виду? Однако вы не можете использовать переменные 'Me ....', так как объект еще не создан. Вы * можете * использовать общие переменные ... –