m.r.m.40 Ответов: 2

Присвоение значения свойствам объекта в VB ООП


Привет,

У меня есть класс, который содержит в себе некоторые поля и свойства,
Проблема в том, что когда я пытаюсь присвоить значение его переменным, я терплю неудачу, и все, что я вижу, когда я отслеживаю его, это то, что поля моего кода не приняли никаких значений,
Вот код моего объекта под названием "MenuLogItem"
...

Public Class MenuLogItem
#Region "Fields"
    Private _menuName As String
    Private _formEntrance As DateTime
#End Region

#Region "Methods"
 
    ''' <summary>
    ''' Creates an object of MenuLogItem Class Which holds the information of the formEntrance
    ''' </summary>
    ''' <param name="menuName"></param>
    ''' <param name="EntranceDateTime"></param>
    ''' <remarks></remarks>
    Public Sub New(newMenuName As String,
                   newEntranceDateTime As DateTime)
        menuName = newMenuName
        formEntrance = newEntranceDateTime
    End Sub

    ''' <summary>
    ''' Stores the object of form entrance log into the database
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Store()
        'Me.menuName
        'Me.formEntrance
        'TODO write the code for saving the information
        System.Windows.Forms.MessageBox.Show(Me.menuName.ToString() + vbCrLf +
                                             Me.formEntrance.ToString() + vbCrLf +
                                             "Stored.")
    End Sub

#End Region

#Region "Properties"
    ''' <summary>
    ''' menuName Set Get
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property menuName() As String
        Get
            Return _menuName
        End Get

        Set(value As String)
            _menuName = menuName
        End Set
    End Property

    ''' <summary>
    ''' formEntrance Get Set
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property formEntrance() As DateTime
        Get
            Return _formEntrance
        End Get
        Set(value As DateTime)
            _formEntrance = formEntrance
        End Set
    End Property

#End Region
End Class



Вот код, который используется для создания и заполнения одного объекта этого класса
...
Dim lastClick As New MenuLogItem(Me.value, DateTime.UtcNow)

Допустим, Me.vlaue уже присвоен "menuItem7" , а dateTime - это Utc DateTime,

Но когда я прослеживаю его и курсор переходит на строку ниже
...
Public Sub New(newMenuName As String,
                   newEntranceDateTime As DateTime)
        menuName = newMenuName
        formEntrance = newEntranceDateTime
    End Sub

и проходя его, я все еще не вижу того, что я ожидаю, что новый объект будет истанцирован с текущими значениями (свойства не получают никаких значений).

С уважением,

Что я уже пробовал:

Я все еще работаю над этим, но пока не получил никакого ответа.

2 Ответов

Рейтинг:
2

Maciej Los

М. Р. М. 40 писал:
когда я пытаюсь присвоить значение его переменным, я терплю неудачу


Это происходит из-за переменной видимости/области видимости. Пожалуйста, прочтите это:
Переменная и область действия метода в Microsoft .NET[^]
Область действия в Visual Basic[^]

Вы объявили _menuName как частный член, что означает, что переменная видна только внутри вашего класса.
Private _menuName As String

Если вы хотите получить к нему доступ, вы должны изменить его видимость на общедоступную или определить метод/свойство. Вы выбрали свойство, но его сеттер пытается получить доступ к переменной, объявленной Вами в конструкторе класса! Пожалуйста, посмотрите Геньяни[^] ответ.

Еще одна проблема, которую я нашел внутри конструктора класса:
Public Sub New(newMenuName As String,
               newEntranceDateTime As DateTime)
    _menuName = newMenuName 'WRONG: menuName = newMenuName
    _formEntrance = newEntranceDateTime 'WRONG: formEntrance = newEntranceDateTime
End Sub


Вы должны избегать установки свойства внутри конструктора класса. Вместо этого используйте внутренние переменные.
Пожалуйста, прочтите это:
Дизайн Конструктора[^]
Объектно-ориентированное программирование в Visual Basic .NET[^]


Рейтинг:
18

User 11061201

Public Property menuName() As String
      Get
          Return Me._menuName
      End Get
      Set(value As String)
         'WRONG  _menuName = menuName 

         Me._menuName = value
      End Set
End Property


m.r.m.40

Да, это сработало,
Спасибо,

Какая ошибка.

Maciej Los

5ед!