我对在VB.net中使用GET & SET方法的必要性感到有点困惑。我想在这方面讨论两种情况:首先,当我们将属性声明为PUBLIC时;其次,当我们将属性声明为PRIVATE时。
我发现,当我将一个属性定义为public时,我可以直接设置和访问该属性的值,而无需使用GET/SET方法-非常简单:见下文
Module Program
Sub Main()
Dim t As New test()
t.name = "Roy" 'Label 1
Console.WriteLine("t.name = {0}", t.name)
Console.ReadLine()
End Sub
End Module
Class test
Public Property name() As String
End Class如下所示,当我将相同的属性声明为private时,我仍然可以通过简单地使用构造函数和公有子例程来设置和访问private属性的值。如下所示:
Module Program
Sub Main()
Dim t As New test()
t.printValue()
Console.ReadLine()
End Sub
End Module
Class test
Private Property Name() As String
Sub New()
Name = "Roy" 'Label 2
End Sub
Public Sub printValue()
Console.WriteLine("Value stored in NAME is: {0}", Name)
End Sub
End Class所以我的问题是,为什么我们需要使用GET/SET方法呢?我知道,当一个属性发生赋值时,SET方法是隐式的called...but,你能帮助我理解我们必须显式使用GET/SET方法的情况吗?或者,使用GET/SET更多的是一种选择?如果使用GET/SET,验证是可以在稍后阶段轻松添加的一件事,但这是唯一的原因吗?请给出你的观点。
另外,我在stackoverflow中遇到了以下两个相关的问题(虽然针对不同的语言):链接如下:
Why to use getter and setter methods to set class properties?
Why use getters and setters/accessors?
但我无法理解使用GET/SET方法的大部分理由。例如,如果我们不使用GET/SET方法,那么我们就向外部世界公开了这个属性--这意味着它可以从类的外部直接访问。但这只适用于公共属性,因为私有属性不能从类外部直接访问。类似地,在第二个链接中,作者提到了以下内容作为使用GET/SET的原因:在某些语言中,如果没有这一点,当属性在运行时更改时提供调试拦截点-调试属性更改为特定值的时间和位置可能会非常困难。
这到底是什么意思-任何简单的现实生活中的例子?
发布于 2021-02-25 02:39:12
属性是字段的包装器,即类或结构变量。它提供了一个getter和/或setter方法来访问这个变量。(您还可以使用只读属性返回简单求值的结果,而不是绑定到单个字段。)
读取时隐式调用getter和setter,分别写入属性。
因此,问题不在于是否使用getter和setter,而在于是否直接或通过属性访问字段。
您可以像这样声明一个属性,方法是声明一个字段并显式地编写getter和setter。
Private _prop1 As String ' Backing field
Public Property Prop1() As String
Get
Return _prop1
End Get
Set(ByVal value As String)
_prop1 = value
End Set
End Property或使用自动实现的属性
Public Property Prop1 As String这两个声明是等效的。自动实现的属性隐式声明一个支持字段,并相应地实现getter和setter。
如果仅在声明属性的类中使用该属性,则将该属性声明为private是有意义的。这仍然提供了您提供的链接中描述的优点,因为此属性仍然隐藏了访问字段、执行验证等的细节;但是,它并不禁止直接访问类中的支持字段。因此,您需要更严格地处理私有属性。
——————————————————————————————————————
属性的含义是什么?调试什么?您可以很容易地在getter或setter中设置断点来检测对属性的访问。不能在字段上设置断点,因为字段从不执行。这只是一个声明。
您还可以添加一个System.Diagnostics.Debug.Writeline("=====> test")
(写入输出窗口),或者在getter和setter中做一些日志记录。
另请参阅:Tutorial: Learn to debug Visual Basic code using Visual Studio
当使用Windows Forms Data Binding or WPF Data Binding属性是必需的。它们还允许change notification.。
https://stackoverflow.com/questions/66356592
复制相似问题