PDA

View Full Version : سوال: ساخت متغییر عمومی



EnKamran
سه شنبه 27 دی 1390, 09:48 صبح
سلام دوستان ببینید سوال بنده این هست :
من می خوام یک متغییر داشته باشم که همه جای وب سایت ازش استفاده کنم ( سیشن نمیخوام ) یک متغیر می خوام حالا چرا سیشن نباشه ؟ چون که می خوام مثلان اگه یک کاربر مقدار این متغیر رو عوض کرد برای بقیه کاربران هم این مقدار عوض بشه.
کسی نظری داره ؟

mahmood_4246
سه شنبه 27 دی 1390, 10:21 صبح
تو Global.asax با Application میتونی تعریف کنی

Application["Name"]="Value"

hamid_shrk
سه شنبه 27 دی 1390, 10:43 صبح
با سلام :
یک کلاس بسازید و اینگونه عمل کنید :

public class global
{
private static string _globalvVar;
public global()
{

}
public string GlobalVar
{
get
{
return _globalvVar;
}
set
{
_globalvVar = value;
}
}

}

GlobalVar تو تمام قسمتهای پروژه به اینصورت قابل دسترسی هست :

global Item = new global();
Item.GlobalVar = "مقدار متغیر";
string test = Item.GlobalVar;

mahmood_4246
سه شنبه 27 دی 1390, 10:47 صبح
متغییر عمومی تعریف شده با Application نیاز به هیچ نمونه سازی نداره و همه جا معتبر می باشد

programer-ir
سه شنبه 27 دی 1390, 10:52 صبح
یک کلاس بسازید و اینگونه عمل کنید :

این برای همه یکی نست هست؟؟؟ فکر کنم برای هر کاربر جدااست

programer-ir
سه شنبه 27 دی 1390, 10:53 صبح
اگر هم درست باشه چه کاریه application بهترین ابزار این کاره

hamid_shrk
سه شنبه 27 دی 1390, 10:54 صبح
هرکسی راه خودش رو پیشنهاد میکنه و این امر به سبک برنامه نویسی بر میگرده و میزان خوانایی اون.
من از این روش استفاده میکنم چون اگه تو پروژم تعداد زیادی متغیر عمومی نیاز داشته باشم فایل global.asax رو پر نکنم و خوانایی برنامم از بین نره ،این روش در تهیه مستندات پروژه کمک زیادی میکنه.
--------------
در روش من در نظر داشته باشید که متغیرها رو null کنید
موفق باشید ..

hamid_shrk
سه شنبه 27 دی 1390, 10:55 صبح
این برای همه یکی نست هست؟؟؟ فکر کنم برای هر کاربر جدااست
برای همه یکی میباشد

mahmood_4246
سه شنبه 27 دی 1390, 11:01 صبح
البته حضرت برادر حمید اون کار هم درسته ولی بهترش تعریف از نوع Static هست .. بحث حافظه هم تو کلاس مهم هستش

mahmood_4246
سه شنبه 27 دی 1390, 11:09 صبح
هرکسی راه خودش رو پیشنهاد میکنه و این امر به سبک برنامه نویسی بر میگرده و میزان خوانایی اون.
من از این روش استفاده میکنم چون اگه تو پروژم تعداد زیادی متغیر عمومی نیاز داشته باشم فایل global.asax رو پر نکنم و خوانایی برنامم از بین نره ،این روش در تهیه مستندات پروژه کمک زیادی میکنه.
--------------
در روش من در نظر داشته باشید که متغیرها رو null کنید
موفق باشید ..
جای خاصی برای تعریف Application وجود ندارد .. هر جا تعریف کنی تو همه جا قابل استفاده هست

hamid_shrk
سه شنبه 27 دی 1390, 11:14 صبح
جای خاصی برای تعریف Application وجود ندارد .. هر جا تعریف کنی تو همه جا قابل استفاده هست
بله دیگه جای خاصی نداره / تمام حرف های من برای این هست که در تهیه مستندات تو پروژه های بزرگ تر دچار مشکل نباشیم.
برای حافظه هم بهتر تو تعریف از نوع static بعد از استفاده اون رو null کنیم.
تفاوت این روش ها انقدر نیست که ارزش بحث کردن داشته باشه، آقای دلشاد این موضوع رو تو سایتشون کاممل توضیح دادن.
هرکی راه خودش رو داره.
خیلی ها هم عشق session دارن خوب.:لبخند:
موفق باشید..

A.S.Roma
سه شنبه 27 دی 1390, 11:32 صبح
با سلام :
یک کلاس بسازید و اینگونه عمل کنید :

public class global
{
private static string _globalvVar;
public global()
{

}
public string GlobalVar
{
get
{
return _globalvVar;
}
set
{
_globalvVar = value;
}
}

}

GlobalVar تو تمام قسمتهای پروژه به اینصورت قابل دسترسی هست :

global Item = new global();
Item.GlobalVar = "مقدار متغیر";
string test = Item.GlobalVar;


همان طور که دوستمون هم اشاره کرد به ازای هر Instance مقدار Property ها تغییر پیدا می کنه .
با این الگو خیلی از مشکلات حل میشه :

public class MyClass<T> where T : struct
{
private static MyClass<T> instance;
private MyClass() { }
public static MyClass<T> Instance
{
get
{
if (instance == null)
instance = new MyClass<T>();
return instance;
}
}
public T Value { get; set; }
}


مشکل این روش هم اینه که Thread Safe‌نیست.
البته تو MSDN برای این مشل هم راه حل ارائه شده :
http://msdn.microsoft.com/en-us/library/ff650316.aspx