با سلام
Behrouz_Rad گفته بودید :
Sessionیکی از راه های ذخیره ی مقداری عمومی برای هر فرد در ASP.NET هست. متغیرهای عمومیبه منظور نگهداری داده بین صفحات کاربردی ندارن.
متغیرهای عمومی مگر فقط برای انتقال اطلاعات بین صفحات باید استفاده شوند ؟ حتی اگر به Object Oreinted هم کاری نداشته باشیم ( منظورم این است که آن کلاسی که نوشتم ، حذف کنیم ) و کدی مشابه با کد متدLoad بنویسیم ، می بینیم که اصلا مقدار متغیر Public را در همان صفحه هم بعد از PostBack نگه نمی دارد. دیگر چه برسد به اینکه صفحه ی دیگر بخواهد از مقدار متغیر Public صفحه ی قبل استفاده کند.
خواهش می کنم در پاسخ به این سوال نگوئید :
بعد از ارسال صفحه به کلاینت، اون صفحه به طور کامل از بین میره
چون اولا این حرفتان را قبول دارم ، ثانیا سوالم این است که چطور می تواند مقدار Session را ذخیره کند ؟ اما مثلا نمی تواند مقدار متغیرهای Private را ذخیره کند ؟ حالا اصلا نمی تواند ، درست . راه حلش چیست که بتواند مقدار متغیرهای Private را ذخیره کرد؟
من یک سوالی از همه ی شما دارم : مثلا در پروژه های ویندوزی می گوئیم که یک ماشین یک سری خصوصیاتی دارد : مثلا رنگش و مدلش و تعداد درهایش و یک سری رفتارهایی دارد : مثلا : ترمز می کند و جلو می رود و عقب می رود. بنابراین می آئیم و یک کلاس ماشین درست می کنیم .
دائم می گوئید :
وب را با ویندوز اشتباه گرفتی
حال سوال اصلی من این است :
آیا این مفاهیمی که گفتم در پروژه های وب از بین می رود ؟
آیا در این ASP.NET ی که شما از آن ترسیم می کنید ، این مفهوم که ماشین ، خصوصیات اختصاصی (Private Property) و یا رفتار اختصاصی(Private Method) دارد ، از بین می رود ؟ با توجه به آنچه که شما می گوئید و می خواهید که ظاهرا متغیرهای کلاس ماشین را هم Static تعریف کنید ، مشکل زیر بوجود می آید :
اگر کلاس لندرور و کلاس بنز ، از کلاس ماشین به ارث برده شوند ، و بعد مثلا یک خصوصیتی در کلاس لندرور را تغییر دهید ( این خصوصیت را از کلاس ماشین ) به ارث برده ، آنگاه ، مقدار کلاس بنز را هم تغییر داده اید . به این دلیل که همانطور که قبلا گفتم ، ماهیت متغیرهای استاتیک این است که این مقدار برای تمام آبجکت ها یکسان است.
مگر اینکه نخواهید از یکی از مفاهیم اصلی Object Oreinted یعنی Inheritance ( وراثت ) استفاده کنید.
protectedvoid Page_Load(object sender, EventArgs e)
{
if (Session["FirstLoad"] == null)
{
Session["FirstLoad"] = true;
Machine.theProperty = "";
BMV.theProperty = "xxxxxxxxxxxx";
}
//مشکل خط زیر پیدا می شود . در زیر کلاس بنز تا به حال نباید مقدار
// می گرفته ، ولی به دلیل اینکه از متغیر استاتیک در جائی غیر از خودش
// استفاده کردیم ، مقدار داده شده در کلاس بی ام و را دارد نشان می دهد
// طبیعی هم هست که مشکل بوجود آید
Label1.Text = Benz.theProperty;
}
publicclassMachine
{
/*Private متغیر استاتیک زیر قرار بوده که یک متغیر*/
/* در کلاس های دیگر به آن دسترسیset , get باشد که بعدها از طریق متد */
/*پیدا شود*/
publicstaticstring theProperty;
}
publicclassBenz : Machine
{
public Benz()
{
//
// TODO: Add constructor logic here
//
}
}
publicclassBMV : Machine
{
public BMV()
{
//
// TODO: Add constructor logic here
//
}
}
من البته برنامه ی کوچکی مطلبی را که گفتم ، به سایت فرستادم . لطف کنید آن را ببینید.