Vb.net 只读属性

Vb.net 只读属性,vb.net,Vb.net,我的课程设置如下: private _eventId As String = "" private _eventDate As Date = Nothing Public ReadOnly Property eventId As String Get Return _eventId End Get End Property 所以另一种方法是相同的,但区别在于eventId有效,而eventDate无效。我把它们放在一个对象中,我希望eventDate与其他对

我的课程设置如下:

private _eventId As String = ""
private _eventDate As Date = Nothing

Public ReadOnly Property eventId As String
    Get
        Return _eventId
    End Get
End Property 
所以另一种方法是相同的,但区别在于eventId有效,而eventDate无效。我把它们放在一个对象中,我希望eventDate与其他对象一起只读

错误为属性eventDate为只读

然后该对象是主代码的一部分,如下所示

  Dim obj As New idObject(dr("EventID"))
  obj.eventDate = (dr("EventDate"))

所以我不明白为什么它不起作用我错过了什么。如果你愿意,我会发布所有代码,但我想如果我们能解决这个问题,我可以解决其余的问题,我现在没有选择了,我不确定我是否真的理解了你想要实现的目标。但是,如果要从类外部设置属性,则不能将其设置为只读,或者至少需要提供一个允许对其进行初始化的构造函数:

Public Sub New(eventID As Int32, eventDate As Date)
    Me._EventId = eventId
    Me._eventDate  = eventDate
End Sub
现在,您可以通过构造函数初始化对象:

Dim eventID As Int32 = dr.Field(Of Int32)("EventID")
Dim eventDate As Date = dr.Field(Of Date)("EventDate")
Dim obj As New idObject(eventID, eventDate)

这样,您就有了一个对象,它必须完全初始化,但之后很难更改

如果我错了,请原谅我,但是如果你试图修改它,为什么属性是只读的?我不想修改它,我需要声明它以便它显示出来,但我确实有一些东西需要编辑。你说你希望eventDate是只读的,而你说“错误”是eventDate是只读的。我完全不明白你的问题。@DNKROZ Ohhhhhh。。。您可能已经理解了问题的实质……您可以在构造函数中传递日期,因此只有当createdAn alternative提供一个改变属性的支持字段的函数时,才可以设置该日期。但从技术上讲,这很混乱,这使得它可以修改,这违背了只读属性的目的。你把一些东西变成只读的,然后给自己一个反向修改的方法。有点像绕着你的屁股走到你的肘部。小的技术性问题。我是回应尼克的评论,而不是你的回答;因为你的答案是唯一能让它在课堂之外被设定的方法,而且它仍然是一个readonly@BenBlack准确地说,这就是为什么它很混乱的原因。