从另一个班级调用一个函数

时间:2015-11-05 11:11:06

标签: vb.net

我是一个自学成才的程序员,在这种环境中,我无法随时检查最佳实践,但在这种情况下,我不相信我在做什么是最好的做法和如有必要,需要有人告诉我。

我有我的主类,然后是一个SQLFunctions类,在主类中我显然做了表单加载,我也填充了一些DataTables。

我在SQLFunctions类中有一个函数,它为我返回SQL到DataTable,工作正常。

我的查询是我将此ReturnDataTable函数声明为

Public Shared Function ReturnDataTable(ByVal SQL As String)

现在我确信这不是我应该这样做的方式,或者是它?还有另一种方法我应该从我的主类中调用SQLFunctions类中的函数吗?

干杯

1 个答案:

答案 0 :(得分:0)

使用共享方法与实例方法有两个主要思路。

当您的班级没有州时使用共享,例如下面的伪代码:

' This is state-less object
Public Class UserDataAccess

    ' hide constructor to make sure no instance created
    Private Sub New()
    End Sub

    Public Shared Function GeAlltUsers() As List(Of User)
        ' Get all users from DB
    End Sub

    Public Shared Function GetUser(id As Integer) As User
        ' Get single user from DB
    End Sub

End Class

当你的类有状态时使用实例,例如下面的伪代码:

Public Class UserRepository

    ' private members represent state of the object
    Private _dataProvider As IDataProvider ' Oracle? Sql Serv? MySql?
    Private _users As List(Of User)

    Public Sub New(dataProvider As MyDataProvider)
        _dataProvider = dataProvider
    End Sub

    Public Shared Function GetUsers() As List(Of User)
        If _users Is Nothing Then 
            LoadUsers() ' loads collection _users
        End If
        Return _users
    End Sub

    Public Shared Function GetUser(id As Integer) As User
        If _users Is Nothing Then 
            LoadUsers() ' loads collection _users
        End If
        Return _users.FirstOrDefault(Function(u) u.Id = id) ' This is System.LINQ extention
    End Sub

End Class

所以,答案是 - 如果不需要状态,shared方法或类没有错。