Конструкторы VB.NET - PullRequest
       13

Конструкторы VB.NET

0 голосов
/ 03 февраля 2010

Я делаю лабораторную работу для школы, и я столкнулся с тем, чего никогда раньше не делал: создать конструктор по умолчанию в моем классе.Он включает в себя создание частного поля для хранения строки подключения, а затем создание конструктора по умолчанию, который устанавливает строку подключения.

Вот что у меня есть:

Public Class Appointments

    Private sqlconnection As String = ConfigurationSettings.AppSettings("ConnectionString")

    Private Property connectionstring() As String
        Get
            Return sqlconnection
        End Get
        Set(ByVal value As String)
        End Set
    End Property

    Public Sub New(ByVal sConnectionString As String)
        sqlconnection = sConnectionString
    End Sub

Я делаюэто право?Что происходит?

Ответы [ 3 ]

3 голосов
/ 03 февраля 2010

Выглядит хорошо для меня, но вы уже инициализировали строку подключения как личную переменную вверху.

Предполагается, что вы позволите кому-то передать строку подключения?

Возможно, ваш набор должен быть:

Set(ByVal value as String)
 sqlconnection = value
End Set

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

Например, конструктор без параметров может быть установлен с помощью файла конфигурации web / app:

public sub new()
 sqlconnection = ConfigurationSettings.AppSettings("ConnectionString")
end sub

Все это может быть:

    Public Class Appointments 
        Private sqlconnection As String

        Private Property connectionstring() As String 
            Get 
                Return sqlconnection 
            End Get 
            Set(ByVal value As String) 
               sqlconnection = value
            End Set 
        End Property 

        Public Sub New() 
        sqlconnection = ConfigurationSettings.AppSettings("ConnectionString")
        End Sub 

        'optional you could add this but not sure how much of a fuss your professor might make it
    'parameterized constructor
    Public Sub New(ByVal sConnectionString As String) 
        sqlconnection = sConnectionString 
    End Sub 
End Class
2 голосов
/ 03 февраля 2010

Конструктор по умолчанию - это конструктор, который не принимает аргументов. В этом случае вы определили конструктор, который принимает 1 аргумент и устанавливает его в закрытое поле. Вам нужно будет изменить свой код следующими способами

  1. У конструктора нет параметров
  2. Переместить инициализацию частного поля в конструктор

Вот так

Public Class Appointments

  Private sqlconnection As String

  ...

  Public Sub New()
    sqlconnection = ConfigurationSettings.AppSettings("ConnectionString")
  End Sub
End Class
1 голос
/ 04 февраля 2010

Правильно ли вы делаете это или нет, зависит от того, что вы хотите сделать.

Что вы делаете, это следующее:

Вы объявляете личное поле String с именем sqlconnection и инициализируете его, чтобы оно содержало значение из файла конфигурации:

Private sqlconnection As String = ConfigurationSettings.AppSettings("ConnectionString")

... тогда вы настроили свойство для выставления поля:

Private Property connectionstring() As String
    Get
        Return sqlconnection
    End Get
    Set(ByVal value As String)
    End Set
End Property

Здесь следует отметить, что вы ничего не делаете в Set аксессоре . Если свойство должно быть только для чтения; удалите метод доступа Set и пометьте свойство как ReadOnly. Кроме того, свойство равно Private, что дает ему ту же область действия, что и поле. Возможно, это сделано намеренно, но если вы хотите получить (или установить) значение свойства вне класса, оно не должно быть Private.

Наконец, вы определяете конструктор, принимая параметр String, значение которого присваивается закрытому полю:

Public Sub New(ByVal sConnectionString As String)
    sqlconnection = sConnectionString
End Sub

Это выглядит вполне нормально, хотя инициализировать поле немного необязательно, когда вы заменяете значение в конструкторе. Поскольку класс не определяет конструктор без параметров, его невозможно создать без замены значения sqlconnection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...