2015-12-11 35 views
0

好的,所以這種類型跟在上一個問題之後,我問過涉及結構和類。所以引用this question(我現在正在使用類的基礎)我有一個類的成員是一個數組(我知道我必須聲明它沒有維)作爲構造函數的一部分,我希望它定義陣列的尺寸。當我最初嘗試執行ReDim時,編譯器不高興,因爲我宣佈成員爲ReadOnly。雖然我在陣列中做了什麼,但它有自己的可行性問題,這不是我問的問題,因爲它提出了一個我必須首先回答的問題。Visual Basic:結構成員的只讀可見性

有沒有辦法讓一個類/結構的成員只能在類/結構之外讀取,但可以在類/結構中修改而不必使用屬性或內部函數/子來獲得讀取訪問權限?

基本上就像聲明成員是私人的,但至少可以讀取類/結構之外的成員。只是沒有別的。

+0

這正是一個屬性是。你爲什麼不想使用財產? – sstan

+0

嗯,這真的是因爲我猜的語義原因。即使該成員是私人的,它仍然是可見的,你只是無法做任何事情。因此,當你使用這個屬性時,你必須給它一個與你使用它訪問的成員不同的名字。看起來像一個不必要的複雜。 – balmerjd

+0

是的。如果只有VB.NET支持C#的自動實現屬性的語法,允許你指定一個私有setter。儘管如此,使用屬性聽起來像是在這裏做的正確的事情。 – sstan

回答

1

不可以。沒有辦法讓一個班級的領域公開閱讀,但是寫作是私人的。字段上的輔助功能修飾符同時影響讀取和寫入。

做你想做的最徹底的方法是在你的類中定義一個私有字段,並定義一個公共屬性的getter:

Private _dummy As String 

Public Property Dummy() As String 
    Get 
     Return _dummy 
    End Get 
End Property 

誠然,這將是很好能夠更簡潔地表達這種,如使用自動實現的屬性,可以用C#:

public string Dummy {get; private set;} 
+0

謝謝。我有點想到這將是答案,但我想我會問,我完全放棄之前。 – balmerjd

2

你可以做這樣的事情

Private _some As String 
Public Property Some As String 
    Get 
     Return _some 
    End Get 
    Private Set(value As String) 
     _some = value 
    End Set 
End Property