Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net中只读属性/函数的最佳实践是什么?_Vb.net_Visual Studio 2008_Function_Properties - Fatal编程技术网

VB.Net中只读属性/函数的最佳实践是什么?

VB.Net中只读属性/函数的最佳实践是什么?,vb.net,visual-studio-2008,function,properties,Vb.net,Visual Studio 2008,Function,Properties,我对VB.Net和语法不是太陌生,但我不是专家。我正在用VB重写以前用C#写过的东西,在重写过程中,我遇到了一个“dilemna”。我可以有一个只读属性: Public ReadOnly Property MaximumIndenture() Get Try 'If the connection is closed, open it.' If _dbConnection.State = ConnectionState.Clo

我对VB.Net和语法不是太陌生,但我不是专家。我正在用VB重写以前用C#写过的东西,在重写过程中,我遇到了一个“dilemna”。我可以有一个只读属性:

Public ReadOnly Property MaximumIndenture()
    Get
        Try
            'If the connection is closed, open it.'
            If _dbConnection.State = ConnectionState.Closed Then
                _dbConnection.Open()
            End If

            Dim dictFigureIndenture As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
            Using dbReader As IDataReader = ExecuteReader("SELECT PART_FIGURE, MAX(PART_INDENTURE) AS 'MAX_INDENT' FROM PARTS GROUP BY PART_FIGURE")
                While dbReader.Read()
                    dictFigureIndenture.Add(dbReader("PART_FIGURE").ToString(), Convert.ToInt32(dbReader("MAX_INDENT").ToString()))
                End While
            End Using

            'If the connection is open, do what you need to and/or close it.'
            If _dbConnection.State = ConnectionState.Open Then
                _dbConnection.Close()
            End If

            Return dictFigureIndenture
        Catch ex As Exception
            'An exception was thrown.  Show it to the user so they can report it.'
            MessageBox.Show(ex.Message)

            'If the connection is open, do what you need to and/or close it.'
            If _dbConnection.State = ConnectionState.Open Then
                _dbConnection.Close()
            End If

            Return Nothing
        End Try
    End Get
End Property
我可以有一个函数做同样的事情:

Public Function MaximumIndenture() As Integer
    Try
        'If the connection is closed, open it.'
        If _dbConnection.State = ConnectionState.Closed Then
            _dbConnection.Open()
        End If

        Dim dictFigureIndenture As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
        Using dbReader As IDataReader = ExecuteReader("SELECT PART_FIGURE, MAX(PART_INDENTURE) AS 'MAX_INDENT' FROM PARTS GROUP BY PART_FIGURE")
            While dbReader.Read()
                dictFigureIndenture.Add(dbReader("PART_FIGURE").ToString(), Convert.ToInt32(dbReader("MAX_INDENT").ToString()))
            End While
        End Using

        'If the connection is open, do what you need to and/or close it.'
        If _dbConnection.State = ConnectionState.Open Then
            _dbConnection.Close()
        End If

        Return dictFigureIndenture
    Catch ex As Exception
        'An exception was thrown.  Show it to the user so they can report it.'
        MessageBox.Show(ex.Message)

        'If the connection is open, do what you need to and/or close it.'
        If _dbConnection.State = ConnectionState.Open Then
            _dbConnection.Close()
        End If

        Return Nothing
    End Try
End Function

他们基本上都做相同的事情,但我不确定哪一个会更被社区接受。最终,我想写很多开源代码供人们使用(大多数可能已经编写好了),但我绝对不希望有人认为我所做的是最佳实践。谁能给我一个外行的描述,哪一个更好用,为什么?抱歉,如果这是别人的重复文章,只是好奇。谢谢。

这绝对应该是一种方法,而不是属性


属性通常包含一个轻量级的操作,比如获取私有变量的值,并可能进行一些简单的计算或转换。从数据库中提取数据的东西肯定与通常期望的属性不匹配。

这应该是一种方法,而不是属性


属性通常包含一个轻量级的操作,比如获取私有变量的值,并可能进行一些简单的计算或转换。从数据库中提取数据的东西肯定与通常期望的属性不匹配。

我不能向您保证这是最佳实践,但我要说的是,使用对您来说更自然、在现实世界中更有意义的方法。我会说maximumindepture是一个比函数更好的属性,因为在我看来,它更多的是对象的属性或属于它的名词的属性。我会用一个函数来做更多有结果的操作或动词。那是我的2美分。希望有帮助

我不能向你保证这是最好的做法,但我要说的是,按照你觉得更自然、在现实世界中更有意义的方式去做。我会说maximumindepture是一个比函数更好的属性,因为在我看来,它更多的是对象的属性或属于它的名词的属性。我会用一个函数来做更多有结果的操作或动词。那是我的2美分。希望有帮助

使用方法,而不是属性, 如果操作是命令式的 比现场访问速度慢的量级 是的。特别是操作 访问网络或文件 系统,应该很可能是方法

您的代码访问数据库:因此它应该是一个方法

从。第二版第135页

使用方法,而不是属性, 如果操作是命令式的 比现场访问速度慢的量级 是的。特别是操作 访问网络或文件 系统,应该很可能是方法

您的代码访问数据库:因此它应该是一个方法


从。第二版第135页

顺便说一句。有免费工具可以从C#转换为vb,请看这里@elsni-:)谢谢。但我之所以手工编写,只是因为以前的C#版本并不是最好的版本。因此,当我经历并转换它时,我正在改变周围的事物。不过我肯定会保存那个链接。有免费的工具可以从C#转换到vb,请看这里@elsni-:)谢谢。但我之所以手工编写,只是因为以前的C#版本并不是最好的版本。因此,当我经历并转换它时,我正在改变周围的事物。不过我肯定会保留那个链接。我就是这么想的。但我也在想,“好吧,它们允许你把代码放在那里,而不仅仅是一个简单的返回,为什么不呢?”我知道我甚至可以把断点放在那里。我也不知道是不是出于美学的原因。感谢您的回复。同意上面的说法,另外我要说的是,函数可能会有副作用(做一些事情来改变其他地方的状态或数据),但属性永远不应该有副作用。只读属性在语言、可调试性等方面与函数一样强大。。你的决定与美学无关。i、 当另一个程序员使用你的属性或函数时,他们期望发生什么…起初,当我把它作为一个属性时,我让它在树状视图中拉取所选图形的最大缩进。但是,我想在应用程序开始的时候就把它们都拿出来,因为这些数字永远不会改变,我会一直保持不变。我开始觉得我应该回去,在每一个选择上都能做到。它看起来还是一样,但在美学上可能更有意义。然而,这是在一个dataFactory类中,而不是在一个“figure”本身的类中。这就是我所想的。但我也在想,“好吧,它们允许你把代码放在那里,而不仅仅是一个简单的返回,为什么不呢?”我知道我甚至可以把断点放在那里。我也不知道是不是出于美学的原因。感谢您的回复。同意上面的说法,另外我要说的是,函数可能会有副作用(做一些事情来改变其他地方的状态或数据),但属性永远不应该有副作用。只读属性在语言、可调试性等方面与函数一样强大。。你的决定与美学无关。i、 当另一个程序员使用你的属性或函数时,他们期望发生什么…起初,当我把它作为一个属性时,我让它在树状视图中拉取所选图形的最大缩进。但是,我想在应用程序开始的时候就把它们都拿出来,因为这些数字永远不会改变,我会一直保持不变。我开始觉得我应该回去,在每一个选择上都能做到。它看起来还是一样,但在美学上可能更有意义。然而,这是在一个dataFactory类中,而不是在“figure”本身的类中。:)这正是我的dilemna。是的,我可以做“GetMaximumin假牙”功能