2012-10-16 84 views
0

我試圖圍繞這個包裹我的頭,但我不能。用戶自定義的自定義變量

假設我有一個名爲custom的類。我有一個名爲User_ID的變量,我用它來檢索用戶的會話(所以我不必一直反覆調用會話變量)。類似這樣的:

Public Class custom 

Public Shared User_ID as integer 

Public Shared sub GatherUserID() 

    User_ID = Session ("user_ID") 

end sub 

end class 

是的,這是一個非常簡單的例子,但它得到了我的觀點。我在傳統的ASP(使用includes,不使用類)中做了類似於此的事情,並且User_ID對於當時訪問有問題的頁面的人是唯一的。

出於某種原因,這是我不明白,當我在自定義類中使用custom.User_ID時,它被共享爲大家。這就是我不想要的。我想要的是能夠使用像這樣的變量並保持用戶特定的。我發現跨類共享變量的好處(例如數據庫連接字符串),但我沒有看到如何在自定義類中設置自定義變量,我只能爲該用戶使用該變量,而無需不斷地調用Sessions。

我發現我可以聲明它是一個屬性而不是一個共享變量,但我真的不知道到底要完成什麼,而且似乎也沒有人有明確的解釋。屬性用戶/會話特定?它會解決我的具體問題嗎?這是我沒有得到的。

編輯:我只想澄清,該USER_ID在這個例子是我打算在幾個點的創建網頁的過程中被調用使用。因此(如主文件,頁面本身,各種類。)創建自定義變量的原因。

謝謝。

回答

0
Public Class custom 

Public User_ID as integer 

Public sub GatherUserID() 

    User_ID = Session ("user_ID") 

end Sub 

end Class

然後,要啓動一個會話中的每個新用戶:


Dim userSpecificCustom as New Custom() 
userSpecificCustom.GatherUserID() 

我是一個C#的傢伙,所以不敲我失望,如果語法是不是100%正確。

還建議將User_ID設置爲屬性而不是公共字段。 (例如,請參閱http://www.vbdotnetheaven.com/uploadfile/manish1231/fields-and-properties-in-vb-net/http://blogs.msdn.com/b/vbteam/archive/2009/09/04/properties-vs-fields-why-does-it-matter-jonathan-aneja.aspx

+0

再次感謝......我仍然不明白**爲什麼**當我需要在整個董事會中使用單個值時,我會創建屬性。 – SEFL

1

共享意味着它與應用程序域中的所有人共享。當你調用一個方法並設置一個共享變量時,所有使用共享變量的變量都會得到相同的返回值。

你可以做的是包裝你對Session對象的訪問。使用模塊或我的首選方法,使用擴展方法和共享的自定義類,我掛斷Session。這使我可以看到它來自Session,但是像Session.vars.UserID那樣訪問它,而UserID是vars類的一個屬性。

Module SessionExt 

    Public Class SessionVars 
     Private this as HttpSessionState 
     Public New (ths as HttpSessionState) 
      this = ths 
     End New 
     Public Property Example as Integer 
      Get 
       Static nm as String = MethodBase.GetCurrentMethod().Name.Substring(4) 
       return CType(this(nm), Integer) 
      End Get 
      Set (value as Integer) 
       Static nm as String = MethodBase.GetCurrentMethod().Name.Substring(4) 
       this(nm) = value 
      End Set 
     End Property 
    End Class 
    <Extension()> 
    Public Function vars(ByVal this as HttpSessionState) as SessionVars 
     return New SessionVars(this) 
    End Function 
End Module 

而你去了,所有的會話變量都包裝在一個不錯的類中。添加新屬性是簡單的鍋爐板代碼,您只需更改名稱並設置類型即可。您可以將它重構爲更好的名稱,查看它的使用位置,使用它來包含更復雜的結構(數據表,其他類或結構等)。

注意:如果您使用全局。asax,當代碼運行時會話可能還沒有建立,請注意,從那裏調用的任何屬性都不使用會話狀態,或者先檢查null。