如何将对象声明为公共?

时间:2015-12-09 15:53:20

标签: vb.net

当我说:

时,VB.net生气了
Public thisTicket as new ticket

并坚持说我需要使用Dim而不是Public,但这会阻止我访问我声明它的子对象之外的对象。

基本上我试图在一个子目录中执行以下操作:

Public thisTicket as new ticket

thisTicket.completed = true

然后在另一个子中:

if thisTicket.completed = true then

'do this

else

'do this instead

end if

类别:

Public Class ticket

    Property hasStatusChange As Boolean

    Property initialAssignmentStatus As String
    Property initialApprovalStatus As String
    Property initialCompletionStatus As String

    Property newApprovalStatus As String
    Property newCompletionStatus As String
    Property newAssignmentStatus As String

    Property wasUpdated As Boolean

End Class

另一个问题,

如果我在一张名为&#34的完成的新票据下创建了一个新物业;则完成了更改为布尔"

如果initialCompletionStatus不等于newCompletion状态(那么它将是真的),

并且该条件为真或假的标准,

我怎么能得到它以便我可以说:

if thisTicket.completionchanged = true then

让它知道自己是否真实,没有我每次都要拼出if / then?

2 个答案:

答案 0 :(得分:1)

Sub或Function或属性getter或setter中的局部变量(即在方法中)仅在执行方法时生效。在调用此方法之前或之后,本地变量不存在。因此,像Public这样的修饰符在那里毫无意义。

如果您需要从方法外部访问变量,请将其设为类成员(字段或属性)。

回答第二个问题。这就是物业存在的原因。您可以为它们添加在访问它们时执行的逻辑。

Private m_completionStatus As String
Property CompletionStatus() As String
    Get
        Return m_completionStatus
    End Get
    Set(ByVal Value As String)
        If Value <> m_completionStatus Then
            m_completionStatus = Value
            completionChanged = True
        End If
    End Set
End Property

然后请写下

If thisTicket.completionchanged Then

并删除“= true”。 If语句想要的是一个产生布尔结果的表达式,而布尔变量本身就是一个表达式。在If语句中不需要进行任何比较。

如果completionchangedTrue,那么completionchanged = True也是True。如果completionchangedFalse,则completionchanged = True也为False。与“= True”相比有点像将数字乘以1.它不会改变任何东西。

答案 1 :(得分:0)

如果您希望它成为该类的成员,例如属性。

Public Property ThisTicket As Ticket

在你的课堂上&#39;构造函数初始化它。

Public Sub New()
    ThisTicket = new Ticket
End Sub

现在,您可以从班级内部访问此票证。但是,请考虑代码中的其他位置是否确实需要了解此成员。如果他们不这样做,请将其设为私有。如果您可以在将来需要访问子类型的情况下扩展此类,请将其保护。

如果您决定将其设为私有,则可以绕过将其设为属性并将其创建为字段。

Private _thisTicket As Ticket

你也应该问问自己,这个玩家是否真的属于包含对象的状态。包含对象是否处理了很多票?也许票证应该被传递到处理函数而不是被包含。如果包含对象的状态在其整个生命周期中只涉及该票证,则将其作为属性是有效的。

至于你的第二个问题..

在Ticket中创建一个函数来评估你提到的业务逻辑,如果它已经改变,则返回布尔值。

Public Function HasStatusChanged As Boolean
   logic...
End Function