类中属性的优点

时间:2013-12-16 00:18:46

标签: vb.net class

我一直在使用课程一段时间,但我觉得我可能错误地使用了它们。

当我为类创建属性时,我只使用公共变量,所以最终得到如下内容:

Class clsMyClass
    Public Name As String
End Class

但是,我一直在网上阅读一些信息,他们建议应该按照以下方式设置:

Class clsMyClass
    Private Name As String

    Property UsersName() As String
        Get
            Return Name
        End Get
        Set(ByVal Value As String)
            Name = Value
        End Set
    End Property
End Class

我这样做的方式是不是非常错误?如果是这样,为什么?我觉得第二种方法增加了一些安全性,但说实话,它看起来像不必要的代码..?

4 个答案:

答案 0 :(得分:3)

属性的一个优点是,它们允许您自定义对私有字段的访问权限,并使您能够执行更多操作,以便您可以执行以下操作(示例,它不仅限于此):

  • 为公共访问设置只读属性
  • 在更新属性时提高偶数
  • 更新媒体资源时更新其他私人字段
  • 验证正在设置的值

答案 1 :(得分:1)

请参阅下面C#深度article中属性优于变量的优点:

•具有属性的更精细的访问控制。需要它是公开可获得的,但实际上只希望它设置为受保护的访问?没问题(从C#2开始,至少)。

•只要值发生变化,想要进入调试器吗?只需在setter中添加断点即可。

•想要记录所有访问权限吗?只需将日志记录添加到getter即可。

•属性用于数据绑定;字段不是。

其他几点: 1)您也可以将属性设置为只读,这样没有来自类外的人设置值但可以获取它。 2)您可以在get和set中执行某些操作。即在任何时候附加一个前缀添加前缀 3)您还可以使用自动实现的属性来最小化以下代码:

Public Property Name As String 

答案 2 :(得分:0)

你没有做错任何事。属性基本上给你一个简写,一个语法糖。

如果必须在使用属性时,仍然可以使用支持私有变量并在get和set中执行逻辑。更好的是私有/受保护的集合或获取,这又是另一种语法糖,因此您不必手动编写所有代码。

答案 3 :(得分:0)

首先,VB.NET允许您使用这种语法(称为速记属性声明 - 我相信自VS 2010以来):

Public Property Name As String

与此不同(称为字​​段声明):

Public Name As String

其次,Microsoft数据绑定对字段不起作用。试试这个例子(见下文)。

示例。在空的WinForms项目的空表单上放置一个名为ListBox1的列表框(默认名称)和一个名为Button1的按钮。用以下内容替换您的表单代码:

Public Class Form1
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim lst As New List(Of clsMyClass)
    lst.Add(New clsMyClass)
    ListBox1.ValueMember = "Name"
    ListBox1.DisplayMember = "Name"
    ListBox1.DataSource = lst
  End Sub
End Class

Class clsMyClass
  Public Property Name As String = "Hello"
End Class

启动应用程序并注意列表框中填充了一个条目Hello。这证明绑定工作正常。现在用字段声明替换你的属性声明。再次启动您的应用程序并注意列表框显示您的类类型转换为String。这意味着您的字段绑定不起作用,而是使用默认绑定,其中DisplayMember被分配为classInstance.ToString()

如果您想了解更多有关幕后情况的信息,可以在.DataSource作业中设置断点,并查看DisplayMember如何重置或保留其值,具体取决于您是否使用字段或属性。