[英]Access a class property only from a certain class
假設我有以下課程:
Public Class lbMenu
Inherits Form
...
Public Sub AddItem(header As String)
Dim item As New lbMenuItem()
item.Owner = Me
item.Header = header
Controls.Add(item)
End Sub
...
End Class
以及以下類別:
Public Class lbMenuItem
Inherits Control
Private _Owner As lbMenu
Public Property Owner As lbMenu
Get
Return _Owner
End Get
Set(value As lbMenu)
_Owner = value
End Set
End Property
Private _Header As String
Public Property Header As String
Get
Return _Header
End Get
Set(value As String)
_Header = value
End Set
End Property
...
End Class
如您所見,我從lbMenu
類訪問lbMenuItem
的Owner
屬性。
我想要的是沒有其他人可以訪問Owner
屬性,或者只是讀取該屬性的值。 我認為沒有辦法做到,但也許有解決方案可以解決類似的情況。
有什么建議么?
編輯:
我已經考慮過將所有者作為構造函數中的參數傳遞,但是我希望任何人都可以訪問lbMenuItem
類。 任何人都可以創建該類的新實例,讀取和寫入許多屬性,等等。我唯一不需要的是有人可以編寫 Owner
屬性。 有人可以創建類的新實例,而不必將ownerMenu
參數傳遞給New
方法(他不知道ownerMenu
的作用)。 出於同樣的原因, lbMenuItem
不能嵌套類的lbMenu
。 我試圖獲得與ContextMenuStrip
和ToolStripMenuItem
相同的結果。 ToolStripMenuItem
具有Owner
屬性(在這種情況下具有讀/寫訪問權限)和OwnerItem
是只讀的。 因此,是否有一種方法可以使lbMenu
類的Owner
屬性為只讀但可寫的?
如果要允許讀取其值並將其設置在構造函數中,則可以僅將Owner
屬性設為私有或只讀 。
編輯:
有人可以創建類的新實例,而不必將
ownerMenu
參數傳遞給New
方法。
好了,您可以有兩個構造函數,一個可以接受lbMenu
參數,另一個可以不帶。 因此,您的代碼將如下所示:
Public Class lbMenu
Public Sub AddItem(header As String)
Dim item As New lbMenuItem(Me)
item.Header = header
Controls.Add(item)
End Sub
End Class
Public Class lbMenuItem
' Use this instead if you don't want the property to be accessible at all.
'Private Property Owner As lbMenu
Public ReadOnly Property Owner As lbMenu
Public Property Header As String
' Allow creating an instance of the class without having to pass/set the owner.
Public Sub New()
End Sub
Public Sub New(ownerMenu As lbMenu)
Owner = ownerMenu
End Sub
End Class
最后一項建議:
根據您的類的名字,你可能會考慮讓它們之間的父/子關系(即lbMenuItem
類將是內嵌套類lbMenu
)。 這將使您具有能夠從lbMenuItem
實例訪問lbMenu
的私有成員的lbMenu
。
希望能有所幫助。
ToolStripMenuItem
具有Owner
屬性...和一個只讀的OwnerItem
。
那正是我提出的(即使用只讀屬性)。 需要注意的是OwnerItem
屬性不會暴露為可寫的任何其他類別。
因此,是否有一種方法可以使
lbMenu
類的Owner
屬性為只讀但可寫的?
不,那不可能。 只讀屬性是只讀句點。 您不能將其設置器公開給特定的類。 但是,您可以通過使用關鍵字Friend
, Private
或Protected
來限制其設置者的可訪問性:
Friend Set
>將使setter在當前項目內部可訪問(使屬性可寫),在項目外部只讀。 Private Set
->將使設置者可以從子類中訪問。 Protected Set
->將使設置者可以從派生類訪問。 看一下這個問題 ,以更好地了解如何限制屬性設置器的可訪問性。 關於C#,但是概念是相同的 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.