所以,我为我正在从事的一个练习项目写了两节课,而且我已经考虑了一段时间了。
以下是课程:
卡:
Public Class Card
Dim Suit As String
Dim Name As Object
Dim Value As Byte
Public Function GetSuit()
Return Suit
End Function
Public Function GetName()
Return Name
End Function
Public Function GetValue()
Return Value
End Function
Public Sub SetSuit(ByVal a)
Suit= a
End Sub
Public Sub SetName(ByVal a)
Name= a
End Sub
Public Sub SetValue(ByVal a)
Value= a
End Sub
End Class
Deck类的构造函数调用的过程将在初始化时填充卡片组:
Private Sub Populate(ByVal Name As Object, ByVal Suit As String, ByRef Deck As List(Of Karta))
Dim NewCard As Card = New Card
New.SetSuit(Suit)
Select Case Name
Case 1
New.SetName("Ace")
New.SetValue(11)
Case 3
New.SetName(Name)
New.SetValue(10)
Case 11
New.SetName(Name)
New.SetValue(2)
Case 12
New.SetName(Name)
New.SetValue(3)
Case 13
New.SetName(Name)
New.SetValue(4)
Case Else
New.SetName(Name)
End Select
Deck.Add(New)
End Sub
我一直想知道的是,我有什么办法可以使Card类中的Setter程序变为私有程序,而人口程序仍然能够完成它的工作?
在Card类中具有这些setter程序有点违反了使变量本身私有的目的。
答案 0 :(得分:2)
您可以将getter / setter方法设置为Private,并允许通过构造函数创建卡对象。这将使属性在从其他类初始化时成为“可设置的”,但一旦创建对象便不可编辑。这对于“卡片”对象似乎很有意义,因为卡片的值和名称不太可能更改。
Card类的示例构造函数:
Public Sub New(_suit As String, _name As Object, _value as Byte)
Suit = _suit
Name = _name
Value = _value
End Sub
答案 1 :(得分:0)
您绝对应该使用属性。属性的全部要点是它们的行为类似于外部的字段,即您可以像设置字段一样直接设置它们,但是它们的行为类似于内部的方法,即可以添加诸如计算,验证和引发等额外代码。事件。您可以自己声明私有后备字段并完全实现该属性,例如
Public Class Card
Private _suit As String
Public Property Suit As String
Get
Return _suit
End Get
Set
_suit = value
End Set
End Property
End Class
如您所见,属性定义包含Get和Set方法。编译时,该Suit
属性实际上变成了get_Suit
方法和set_Suit
方法。
如果您除了获取并设置背景字段之外不做其他任何事情,则可以使用自动属性:
Public Class Card
Public Property Suit As String
End Class
这将编译为与第一个代码段,私有后备字段以及所有代码完全相同的代码,但使您编写起来容易得多。