首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何重新声明类的实例?

如何重新声明类的实例?
EN

Stack Overflow用户
提问于 2015-12-09 12:07:33
回答 1查看 707关注 0票数 1

我正在清理vb.net需要工作,我有一个问题,我希望你能澄清。我的应用程序需要一个与数据库的连接,现在当表单加载时,我执行以下函数:

代码语言:javascript
复制
Sub OpenConnection()
    Try
        Dim connection As New Connection
        Dim MysqlConn = connection.establishConnection()

        MysqlConn.Open()

    Catch myerror As MySqlException
        MessageBox.Show("Connection failed: " & myerror.Message)
    Finally
        MysqlConn.Dispose() 
    End Try
End Sub

问题是在另一个函数中也使用了connectionMysqlConn变量,所以我已经将这两个变量声明为全局变量。如何看到这个变量是在OpenConnection()中重新声明的,因为我有一个表单,用户可以在其中更改设置连接字符串。现在,如果软件无法连接到数据库以获得错误的凭据,用户就会将其更改为设置表单,但是如果我删除了connectionMysqlConn,则应用程序将使用类的过去实例,因此即使凭据是正确的,也不会声明应用程序无法连接的连接的新实例。目前,我已经解决了OpenConnection()内部的重声明问题,但这是一个好的步骤吗?有没有一种方法可以让两个全局变量在不重新定义函数的情况下调用一个新实例?

连接类- EstablishConnection函数

代码语言:javascript
复制
Public Function establishConnection()

    Dim MysqlConn As MySqlConnection = New MySqlConnection()  
    Dim server_name = My.Settings.server_name
    Dim username = My.Settings.username
    Dim password = My.Settings.password
    Dim database = My.Settings.database

    MysqlConn.ConnectionString = "server=" & server_name & ";" _
    & "user id=" & username & ";" _
    & "password=" & password & ";" _
    & "database=" & database & ";"

    Return MysqlConn

End Function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 13:02:05

如何重新声明类的实例?

变量被声明。

对象被实例化(实例化)。

它们从来不是_re_declared,而是刚刚创建的另一个新的。采取这一行(类似于你的):

代码语言:javascript
复制
Dim connection As MySQLConnection

它声明一个变量,给它一个名称和类型。

代码语言:javascript
复制
Dim connection As MySQLConnection = New MySQLConnection

第二部分创建一个实例-- New操作符是关键:它创建一个新实例。您使用的短手表单可以同时完成这两个操作,并且可能会使两个不同的操作--声明一个变量和创建一个实例的--正在进行中。

显然,您有一个名为Connection的类来“管理”连接。但是顶部的方法,OpenConnection只是使用它来设置/重置一些全局对象var。通常应该创建、使用和处理dbConnections。

像您这样的连接制造者-助手可以防止将连接字符串分散在代码中。例:

代码语言:javascript
复制
Function GetMySQLConnection(Optional usr As String = "root",
                       Optional pw As String = "123456") As MySqlConnection
    Dim conStr As String
    conStr = String.Format("Server=localhost;Port=3306;Database={0};Uid={1}; Pwd={2};", 
         MySQLDBase, usr, pw)

    Return New MySqlConnection(constr)
End Function

这可能是一个用于保存DBname和其他登录信息的小类的一部分。但是使用它不需要全局var:

代码语言:javascript
复制
Sub GetSomeData(...)
    Using dbCon As MySqlConnection = GetMySQLConnection()
        ...
        dbCon.Open()

        myDA.Fill(myDT)
        ...

    End Using
End Sub

开始时,为这组操作创建一个新的连接对象,该操作仅在本地存在(在该方法中)。Using块确保连接已关闭(并返回到池),并在完成连接时释放。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34178461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档