PDA

View Full Version : تعریف متغیر سراسری



noorsoft
شنبه 19 خرداد 1386, 16:23 عصر
چه طور می شه یک متغیر را طوری تعریف کرد که در تمام فرم ها قابل استفاده باشد و مقادیر آن از بین نرود؟

mohammadkhan
شنبه 19 خرداد 1386, 16:30 عصر
جون مادرتون یکی جواب بده
بخدا نصف ملت گیر همین مشکلن
ممنون

noorsoft
شنبه 19 خرداد 1386, 16:30 عصر
من می خوام اگه فرمم بسته شد متغیر هایی را که در اون تنظیم کردم از بین نره

adabyron
شنبه 19 خرداد 1386, 16:38 عصر
چه طور می شه یک متغیر را طوری تعریف کرد که در تمام فرم ها قابل استفاده باشد و مقادیر آن از بین نرود؟

یه کلاس تعریف کن که یه متغیر سراسری از نوع static داره مثلا public static int x . یه سازنده واسه کلاس تعریف کن که یه پارامتر میگیره از طریق این پارامتر x رو مقدار دهی کن . حالا فرض کن توی فرم 1 یه متغیر داری که میخوای اونو به فرم 2 بفرستی . از طریق فرم 1 متغیر x رو در کلاست مقداردهی کن و بعد از طریق فرم 2 مقدار متغیر x رو بخون . درواقع این کلاس واسط بین دو فرم میشه .

noorsoft
شنبه 19 خرداد 1386, 16:50 عصر
من یه کلاس به صورت زیر تعریف کردم ولی توی فرم متغیر کلاس قابل استفاده نیست
public clASS code
}
public static string username;
}
داخل فرمم اینا نوشتم
code cd=new code();
cd.
ولی در لیست اسم متغیر استاتیکم نمیاد

adabyron
شنبه 19 خرداد 1386, 16:52 عصر
این هم کدش . اول یه کلاس اضافه کن .

namespace windowsapp1
{
class myclass
{
public static string str;

public myclass(string strValue) //constructor
{
str = strValue;
}

}
}
حالا فرض کن توی فرم1 یه متغیر به اسم x داری که میخوای بفرستیش به فرم2 .اول باید مقدارشو به myclass بفرستی به این صورت

myclass c = new myclass(x);
و بعد در فرم2 با نوشتن اسم کلاس و نام متغیر عضو می تونی مقدار x رو دریافت کنی :

string s = myclass.str;
امیدوارم مشکلت حل شده باشه .

noorsoft
شنبه 19 خرداد 1386, 17:45 عصر
اقا دمت گرم مشکل حل شد

iranrose63
شنبه 19 خرداد 1386, 18:17 عصر
میتونی با استفاده از Setting این کار رو بکنی
اگه تو تایپک ها Search کنی جوابت رو پیدا میکنی خیلی راه ساده و خوبی است
در قسمت SolutionExplorer روی نام پروژه کلیک راست کن و Poperties رو انتخاب کن در قسمت Setting یک متغیر تعریف کن حالا تو برنامت میتونی با کد زیر به این متغیر دسترسی داشته باشی

vartype temp=projectname.Properties.Setting.Defult.varname ;
برای اینکه مقدار این متغیر رو تغییر بدی


projectname.Properties.Setting.Defult.varname;
projectname.Properties.Setting.Defult.Save();

موفق باشید

reza.palang
شنبه 19 خرداد 1386, 22:23 عصر
این سوالات خیلی پرسیده شده.
فقط یه سرچ........
http://barnamenevis.org/forum/showthread.php?t=69943
یه نمونه مال همین امروز

اَرژنگ
یک شنبه 20 خرداد 1386, 20:26 عصر
با اینکه این سوالات خیلی پرسیده شده.

استفاده زیاد از متغیرهایه سراسری در برنامه نویسی کار اشتباهیست،یکی نیست بگه که چرا متغییر سراسری استفاده میکنید؟ استفاده از متغییر سراسری خلاف اصول طراحی برنامه نویسی است. البته همانطوری که جناب رضا پلنگ هم فرمودند گاهاْ به جز شکستن اصول روش دیگری نیست.
حالا این متغییر که قراره تمامه فرمها بهش دسترسی داشته باشند برایه چه کارییه؟ چی هست؟ مشکل اصلی شما در این مورد چیه که میخواهید با این روش حلش کنید؟

reza.palang
دوشنبه 21 خرداد 1386, 00:40 صبح
سوال پرسیده اشتباه است و جوابهاش هم اشتباه تر.
استفاده از متغیرهایه سراسری در برنامه نویسی کار اشتباهیست، استفاده از استاتیک برایه اینکار هم اشتباه است.
یکی نیست بگه که چرا متغییر سراسری استفاده میکنید؟ استفاده از متغییر سراسری خلاف اصول طراحی برنامه نویسی است.

با توجه به اینکه پست من رو مورد خطاب قرار دادی باید بگم:
1 - چرا توی تاپیک خودش ننوشتی
2 - توی لینکی که دیدی (http://barnamenevis.org/forum/showthread.php?t=69943) نه متغیر public تعریف شده و نه static.
..... حالا چرا اینجوری فکر کردی نمیدونم:متفکر:
احتمالا منظور شما property که نبود؟؟؟؟

اَرژنگ
دوشنبه 21 خرداد 1386, 06:33 صبح
با توجه به اینکه پست من رو مورد خطاب قرار دادی باید بگم:
1 - چرا توی تاپیک خودش ننوشتی
2 - توی لینکی که دیدی (http://barnamenevis.org/forum/showthread.php?t=69943) نه متغیر public تعریف شده و نه static.
..... حالا چرا اینجوری فکر کردی نمیدونم:متفکر:
احتمالا منظور شما property که نبود؟؟؟؟
۱) با عزض پوزش،پست شما مورد خطاب نبود ،فقط یک قسمت کوچکی از متنش بود (پست قبلیم را ویرایش کردم که شاید بهتر معلوم باشه). وقتی که جواب دادم همینجا نوشتن به نظرم درست آمد، ولی الانکه دوباره فکر کردم مطمعن نیستم چرا (۸ ساعت خواب یک فایده‌ای داشت).
۲)درست میفرمائید.
دلیلش اینبود که با پروژکتهایی کار کردم که در استفاده ز متغیرهایه سراسی زیاده روی شده بود (این موضوع بر میگررده به زمان Turbo Pascal).هرکی که از راه رسیده بود برایه راحتی متغیرهایه سارسیش را تعریف کرده بود و بعد از مدتی مواظبت از سیستم غیره ممکن شده بود.
حالا هم هر وقت حرف یکی میگه متغیرهایه سراسری را چطوری میشه (سو) استفاده کرد دوباره یک پرنامه اسپاگتی میاد در ذهنم.
شما در آن یکی پستتان کاملاْ درست گفتید، بعضاْ نقض قوانین درست است. منتها این هایی که از راه میرسند را مداوم باید درگوششان خواند که اول به مسعله خوب فکر کنند، اگر واقعاْ هیچ روش دیگری به جز متغییر سراسری نمیشه در آْْنموقع از متغییر سراسری استفاده کنند.

مخلصیم

aidinwashere
دوشنبه 21 خرداد 1386, 15:48 عصر
من احساس میکنم اینجا پتانسیل خوبی برای بحث/یادگیری/آموزش طراحی شی گرا بین چند نفر باشه.

aidinwashere
یک شنبه 27 خرداد 1386, 05:18 صبح
من هنوز درگیر این مطلب هستم.
یه پروژه دارم مینویسم که نصفش شی گرا هست, و نصفش نیست.
مشکل هم همین متغییر سراسریه.
هرچی فکر کردم راهی به ذهنم نرسید.
یه ساختمان داده دارم و 6تا تابع که به فراخور مطلب, اون توابع صدا زده میشن.
حالا اگه همه اون 6تا تابع رو بذارم داخل متد های این ساختمان داده, دیگه باز میشه ساختیافته که یه لایه روشه! راه دیگه ای به ذهنتون میرسه؟
آرژنگ جان, حال کردی در مورد این Singleton توضیح بده.

noorsoft
یک شنبه 27 خرداد 1386, 06:56 صبح
اگه نباید از متغییر سراسری استفاده کرد چه باید کرد و چرا منغییر سراسری مخالف OOp است میشه بیشتر توضیح بدین

kiani.mehdi
یک شنبه 27 خرداد 1386, 08:17 صبح
اگه نباید از متغییر سراسری استفاده کرد چه باید کرد و چرا منغییر سراسری مخالف OOp است میشه بیشتر توضیح بدین

کی گفته که استفاده از متغیر های سراسری و یا استاتیک و یا هر چیز دیگه ای خلاف اصول برنامه نوئیسی است؟

تو تاپیک زیر من توضیحات کاملی در این زمینه دادم
میتونی مطالعه کنی

http://www.barnamenevis.org/forum/showthread.php?t=70019


موفق باشید
مهدی کیانی

reza.palang
یک شنبه 27 خرداد 1386, 09:57 صبح
اگه نباید از متغییر سراسری استفاده کرد چه باید کرد و چرا منغییر سراسری مخالف OOp است میشه بیشتر توضیح بدین

ترجیه اینه که بجای ساخت یه متغیر سراسری یک متغیر private ساخت و از property برای دسترسی به اون استفاده کرد.
استفاده از public variable مزاحمت (:گیج:) برای کپسوله سازی درست میکنه.
کسی نمیگه از public variable استفاده نکنید. اما توصیه اکید هست که ازش استفاده نشه.

reza.palang
یک شنبه 27 خرداد 1386, 10:28 صبح
یه پروژه دارم مینویسم که نصفش شی گرا هست, و نصفش نیست.
مگه میشه با #Cبرنامه ای نوشت که نصفش OOباشه نصفش نه؟؟؟



یه ساختمان داده دارم و 6تا تابع که به فراخور مطلب, اون توابع صدا زده میشن.
حالا اگه همه اون 6تا تابع رو بذارم داخل متد های این ساختمان داده, دیگه باز میشه ساختیافته که یه لایه روشه! راه دیگه ای به ذهنتون میرسه؟
من تا الان به این اصطلاحاتی که به کار بردی توی #C برخورد نکردم:متفکر:
میتونی (در حقیقت باید) یه کلاس تعریف کنی و توی اون متد، property و ... بذاری. اگه کد رو بذاری شاید بیشتر بشه کمک کرد


آرژنگ جان, حال کردی در مورد این Singleton توضیح بده.
http://msdn2.microsoft.com/en-us/library/ms998426.aspx
http://msdn2.microsoft.com/en-us/library/ms998558.aspx

noorsoft
یک شنبه 27 خرداد 1386, 12:47 عصر
پس منظور شماها اینکه چون امکان تعریف متغییر عمومی وجود داره مخالف برنامه نویسی OOP نیست؟

reza.palang
یک شنبه 27 خرداد 1386, 15:37 عصر
پس منظور شماها اینکه چون امکان تعریف متغییر عمومی وجود داره مخالف برنامه نویسی OOP نیست؟
تقریبا آره. اما استفاده از اون encapsulation رو کم میکنه.
و این رو هم باید در نظر داشت که یکی از مفاهیم اصلی OOPهست.