设置另一个类的私有变量的值

时间:2019-01-15 00:33:52

标签: vb.net class procedure encapsulation getter-setter

所以,我为我正在从事的一个练习项目写了两节课,而且我已经考虑了一段时间了。

以下是课程:

卡:

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程序有点违反了使变量本身私有的目的。

2 个答案:

答案 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

这将编译为与第一个代码段,私有后备字段以及所有代码完全相同的代码,但使您编写起来容易得多。