2010-02-03 119 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 2010-02-03 20:57:39

回答

3

看起来不错,但您已经将连接字符串初始化为私有变量。

你应该允许某人传递连接字符串吗?

你设置可能需要:

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

您还需要一个参数的构造函数,什么时候你实例化一个对象,它给出了字符串的值。

例如参数的构造函数可以通过一个Web /应用程序配置文件中设置:

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 2010-02-03 21:08:09

2

一个默认构造函数是一个构造函数,不带任何参数。在这种情况下,您已经定义了一个构造函数,该构造函数接受1个参数并将其设置为私有字段。你需要改变以下列方式

  1. 有构造你的代码不带参数
  2. 移动私有字段的初始化到构造

像这样

Public Class Appointments 

    Private sqlconnection As String 

    ... 

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

我会更进一步,实际上会创建一个构造函数重载来处理设置sqlconnection,并使用默认值将配置设置传递给重载。 – 2010-02-03 21:00:24

+0

这不起作用,因为该集未定义。可以忘记指出来。 – JonH 2010-02-03 21:02:30

+1

@JonH,我刚刚从OP的原始问题中复制了那部分verbatum。去掉它,因为这部分答案没有必要。感谢您指出 – JaredPar 2010-02-03 21:13:07

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访问器中做任何事情。如果该财产是只读的;删除Set访问者并将其标记为ReadOnly。此外,该属性是Private,有效地给它与该领域相同的范围。也许这是故意的,但如果你想能够从课堂以外获得(或设置)该房产的价值,那就不应该是Private

Finllaly,你定义一个构造函数,采取String参数,该参数的值被分配给私有字段:

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

这看起来相当好,即使它是一个有点不必要初始化场,当你替换构造函数中的值时。由于该类未定义无参数构造函数,因此如果不替换sqlconnection的值,则无法创建它。