2012-03-30 15 views
5

मैं वेबसाइट (ASP.NET वीबी) और एक विशेष पृष्ठ पर के रखरखाव में ले लिया गया है मैं नीचे दिए गए कोड देखासार्वजनिक साझा परिवर्तनीय उपयोगकर्ताओं के बीच साझा किया गया?

Inherits System.Web.UI.Page 

Public Shared UserNumber As String 

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 

    UserNumber = Session("UserNumber") 

    ... 

End Sub 

मेरा प्रश्न चर UserNumber या पहुँचा जा सकता है कि क्या किसी अन्य के द्वारा बदला है वर्तमान से उपयोगकर्ता?

बहुत धन्यवाद

+0

हाँ; एक 'साझा' चर के रूप में, यह सभी मामलों के लिए सुलभ है ... इसलिए, उसी प्रक्रिया पर चलने वाले ऐप के सभी उपयोगकर्ता। –

उत्तर

9

Shared वैरिएबल static वैरिएबल के समान है।

इन सभी मामलों में साझा किया जा सकता है, इसलिए अलग-अलग उपयोगकर्ता समान चर साझा करेंगे।

चर नाम को देखते हुए, मैं यह मान लेगा कि इस Shared


दूर करने के लिए आप Page_Init पर Shared String करने के लिए एक Session चर मूल्य आवेदन कर रहे हैं की आवश्यकता होगी।

इसलिए प्रत्येक बार जब उपयोगकर्ता पृष्ठ लोड करता है, तो उनके सत्र चर वर्तमान मूल्य को ओवरराइड कर देंगे।


आप इस वर्ग के बाहर इस चर का उपयोग नहीं कर रहे हैं, तो मैं करने के लिए इसे बदलने की सिफारिश करेंगे:

Protected UserNumber As String 
+0

तो यदि कोड को आसानी से सार्वजनिक उपयोगकर्ता संख्या के रूप में स्ट्रिंग वैरिएबल केवल वर्तमान उपयोगकर्ता के लिए पहुंच योग्य होगा? – BugLover

+0

+1 इसे स्वयं बेहतर नहीं कर सका;) – musefan

+0

@BugLover यह सही है – Curt

4

संपादित मेरे प्रारंभिक उत्तर गलत था। फिर कोशिश कर रहा है ...

तकनीकी रूप से, @Curt संकेत के अनुसार, Shared चर वर्ग के उदाहरणों में साझा किया जाता है।

हालांकि, कोड के साथ, यह कम संभावना है कि मूल्य उपयोगकर्ताओं के बीच साझा किया जाएगा क्योंकि यह Page_Init में उनके सत्र में मूल्य की प्रत्येक उपयोगकर्ता की स्थानीय प्रति पर सेट है।

वहाँ एक संभव "रेस स्थिति" जहां के बाद साझा चर UserNumberPage_Init में initialised किया गया है, और किसी अन्य उपयोगकर्ता के लिए एक अनुरोध है जो अपने सत्र से कि चर के मूल्य को अद्यतन करता सबमिट करता है, पहले उपयोगकर्ता तो देखेंगे दूसरे उपयोगकर्ता के मूल्य। यानी उपयोगकर्ता समवर्ती अनुरोधों के लिए अन्य उपयोगकर्ता के मूल्य देख सकते हैं।

इसके बजाय, मैं एक ReadOnly गैर साझा संपत्ति का उपयोग करना चाहिये एक बार सत्र से मूल्य प्राप्त करने के:

Private mUserNumber As String 
Public ReadOnly Property UserNumber As String 
     Get 
      If String.IsNullOrEmpty(mUserNumber) Then 
       mUserNumber = Session("UserNumber") 
      End If 
      Return mUserNumber 
     End Get 
End Property 

यह एक पैटर्न "लेज़ी लोडिंग" कहा जाता है का उपयोग करता है, जो मैं केवल पढ़ने के लिए गुण में उपयोग कोड के प्रदर्शन और पठनीयता में सुधार करने के लिए पृष्ठों पर बहुत कुछ।

+0

उत्तर के लिए धन्यवाद लेकिन मुझे विरोधाभासी उत्तर मुझे एहसास है कि सत्र उपयोगकर्ताओं के बीच अलग रखा गया है लेकिन मेरा सवाल यह है कि क्या उपयोगकर्ता बी उपयोगकर्ता ए के लिए परिवर्तनीय UserNumber के मान को प्रभावित करने में सक्षम होगा? – BugLover

+0

'सत्र' शब्दकोश है, लेकिन 'साझा स्ट्रिंग' के बारे में क्या है? क्या अलग-अलग सत्र चर समान साझा चर को अपडेट नहीं करेंगे? – Curt

+0

-1।आप 'सत्र' शब्दकोश के बारे में सही हैं, लेकिन * परिवर्तनीय उपयोगकर्ता संख्या * (प्रश्न यही है, 'सत्र ("उपयोगकर्ता संख्या") ') * सभी उपयोगकर्ताओं के बीच साझा नहीं किया गया है। – Heinzi

संबंधित मुद्दे