2009-05-22 62 views
1
Public Class frmMain 
    Private p_dlgAdd As frmAdd = Nothing 
    Public ReadOnly Property _dlgAdd As frmAdd 
     Get 
      If p_dlgAdd Is Nothing Then 
       p_dlgAdd = New frmAdd() 
      End If 
      Return p_dlgAdd 
     End Get 
    End Property 

    Public Sub DoStuff() 
     ''// Should not touch p_dlgAdd 
    End Sub 
End Class 

對於少數類型的對象,我希望僅在需要時(sql連接,大型機連接,大型表單)初始化它們,因爲有些用戶只使用程序的非常特定的部分(管理員可能使用一個大型機來完成他們想要什麼,普通用戶主要使用其他資源)。Vb.net如何從類的其餘部分隱藏這個變量?

爲什麼p_? 我想使用p_會幫助我不使用或輕鬆地在intellisense中找到變量,而不是該類中的本地屬性。然後在私有屬性或私有變量前面單獨使用_,這些變量不需要在本地被屬性訪問。

這將有助於防止我意外地直接訪問p_dlgAdd? 這對2008年的匿名變量很有用嗎? (我還沒有2008年的工作,但他們認爲我們很快就會有)

+0

對不起,我是想自由形式輸入代碼,所以我沒有一幫我實現的方式與我的實際類。沒想到只是粘貼到Visual Studio窗口中,然後再回來。 – Maslow 2009-05-22 12:36:29

+0

糟糕,看起來像我踩在你的編輯。抱歉。 – 2009-05-22 12:37:49

+0

任何人都可以發表評論,可以說這裏的匿名變量的可能性? – Maslow 2009-05-23 17:23:20

回答

2

您可以使用EditorBrowseableAttribute從Intellisense隱藏類成員。

<EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _ 
Private p_dlgAdd As frmAdd = Nothing 

想到的另一種選擇是使用靜態分析工具,如Gendarme檢查違反「不直接訪問場」規則。不知道憲兵是否已經有適當的規則,但它是可擴展的(但可能不值得在你的情況下努力)。

0

老實說,我不熟悉匿名變量。這就是說,我知道真的沒有任何機制阻止你編寫代碼來訪問同一個類中的私有變量。只要注意你的代碼。如果你想在變量上加上某種前綴來提醒你自己,那是可以接受的。

0

你總是可以做什麼(但它可能是你的情況矯枉過正),將執行以下操作:

public class Base 
{ 
    private frmAdd p_dlgAdd = null; 
    protected frmAdd _dlgAdd 
    { 
     get 
     { 
      if(p_dlgAdd == null) 
       p_dlgAdd = new frmAdd(); 
      return p_dlgAdd; 
     } 
    } 
} 

這樣一來,你的「p_dlgAdd」會不會只是在訪問和_dlgAdd派生類。但是,只有在您可以定義/更改基本類型時纔有效。

+0

是的,但是如果你看他的例子,他試圖阻止從它自己的類訪問私有變量,而不是消費類。 – NYSystemsAnalyst 2009-05-22 13:08:25

0

這是什麼靜態是。

Public Class frmMain 
    Public ReadOnly Property _dlgAdd As frmAdd 
     Get 
      Static dlgAdd As frmAdd = Nothing 
      If dlgAdd Is Nothing Then 
       dlgAdd = New frmAdd() 
      End If 
      Return dlgAdd 
     End Get 
    End Property 

    Public Sub DoStuff() 
     ' cannot touch dlgAdd 
    End Sub 
End Class 

https://msdn.microsoft.com/en-us/library/z2cty7t8.aspx