سؤال

وأواجه قليلا من مشكلة غريبة للقيام مع نطاق المتغيرات. لقد تعريف متغير على النحو التالي:

public partial class MyClass: System.Web.UI.Page
{
    protected static int MyGlobalVariable;

    protected void MyFunction()
    {
        MyGlobalVariable = 1;
    }
}

وهذا يعمل بشكل جيد على طريقة عمل صفحتي. ولكن عندما واثنين من المستخدمين يستخدمون نفس الصفحة أنا وجدت أنني أتلقى عبر أكثر. إذا كان مستخدم واحد لتعيين متغير إلى 5 واستخدام آخر ثم الوصول هذا المتغير فإنه يتم تعيين إلى 5. كيف يمكنني تعيين متغير بحيث يمكن الوصول إليها فقط للمستخدم الذي قام أصلا؟

هل كانت مفيدة؟

المحلول

إذا قمت بتعريف MyGlobalVariable كما ساكنة، ثم مثيل واحد فقط منه سيكون موجودا لجميع مثيلات الفئة، لذلك كما قلت، العديد من المستخدمين، على مثيلات متعددة من تيه نفس الصفحة سوف يكون الوصول إلى نفس القيمة.

وإما أن يعلن كثافة العمليات دون المعدل static أو إذا كنت في حاجة إليها أن تستمر لهذا المستخدم، النظر في استخدام Viewstate (لنطاق الصفحة) أو Session (لنطاق جلسة)

ومنها مثلا.

protected int MyGlobalVariable
{
    get
    {
        return ViewState["MyGlobalVariable"] != null ? Convert.ToInt32(ViewState["MyGlobalVariable"] : 0;
    }
    set
    {
        ViewState["MyGlobalVariable"] = value;
    }
}

أو

protected int MyGlobalVariable
{
    get
    {
        return Session["MyGlobalVariable"] != null ? Convert.ToInt32(Session["MyGlobalVariable"] : 0;
    }
    set
    {
        Session["MyGlobalVariable"] = value;
    }
}

نصائح أخرى

وإزالة إعلان ثابت:

protected int MyGlobalVariable;

المتغيرات ثابتة

لا تستخدم أي وقت مضى المتغيرات ثابتة في صفحات موقعك.

والمتغيرات ثابتة استخدام عنوان الذاكرة نفسه داخليا. لذلك كل المستخدمين سيحصلون على نفس القيمة المخزنة.

حسنا، إذا كنت تستخدم هذا في حاجة إلى "الجمهور" varilables. فإنك سوف تحتاج إلى استخدام بعض الحيل مثل حالة العرض أو الدورة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top