2010-02-03 3 views
-1

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

Вот то, что я до сих пор:

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 

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

+2

Что именно вы пытаетесь сделать? – SLaks

ответ

3

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

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

Ваш набор, возможно, потребуется:

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

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

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

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 
+0

Хорошо, это имеет смысл. Я думаю, это то, чего я пытался добиться. – broke

2

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

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

Подобно

Public Class Appointments 

    Private sqlconnection As String 

    ... 

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

Я сделал бы это шаг дальше и фактически создаю перегрузку конструктора для обработки настройки sqlconnection и использую по умолчанию, чтобы передать настройку конфигурации в перегрузку. –

+0

Это не сработает, потому что набор не определен. Можно забыть, просто указывая на это. – JonH

+1

@JonH, я только что скопировал эту часть с исходным вопросом OP. Собираюсь удалить его, потому что это не обязательно для этой части ответа. Спасибо, что указали это – JaredPar

1

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

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

Вы объявляете частное 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 accessor. Если свойство должно быть только для чтения; удалите аксессуар Set и отметьте его как ReadOnly. Кроме того, свойство равно Private, что дает ему ту же область действия, что и поле. Возможно, это намеренно, но если вы хотите получить (или установить) значение свойства вне класса, оно не должно быть Private.

Finllaly, можно определить конструктор, принимая параметр String, значение которого присваивается частному поле:

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

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

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