PDA

View Full Version : سوال: متغیر های global



fatemehmoon
سه شنبه 15 دی 1388, 14:19 عصر
با سلام
کسی می دونه متغیر های global برای چی تعریف می شه و نحوه ی تعریف کردن به چه صورت هست
با تشکر

اَرژنگ
سه شنبه 15 دی 1388, 14:30 عصر
با سلام
کسی می دونه متغیر های global برای چی تعریف می شه و نحوه ی تعریف کردن به چه صورت هست
با تشکر
متغییرهایه سراسری در زبانهایه قبل شیگرائی وجود داشتند و دلیل استفاده‌شان تتبلی و کوتاه‌فکری برنامه نویس بود که به جایه اینکه با استفاده از معماری درست به یک مقداری که لازم داشت دستیابی داشته باشد هر جایی که خاست این مقدار حاضر باشد.

در مورد اشکالات این روش اشتباه کلی میشه نوشت و اساتید بارها نوشتند.

در مورد روش اشتباه که بارها در همین انجمن به چشم خورده استفاده از کلاس استاتیک و ریختن مقادیر درش ، این روش اشتباه را در زبان شیگرائی سی‌شارپ بازسازی میکند.

جناب مهدی موسوی پست بسیار کاملی در این مورد نوشتند که الان من نمیتوانم پیداش کنم، اگر دیگران این مقاله را پیدا کردند یک لینک بدند که من هم دوباره یادم بیاد.

mir555
سه شنبه 15 دی 1388, 18:45 عصر
متغییر global یعنی سراسری یعنی تو تمام متد های تابع قابل دسترسی است همچنین متغییر های global خارج از متد ها و در خود کلاس تعریف میشه اگه قبل از نوع متغییر public بزاری تو نمونه های ساخته شده از کلاس قابل دیدنه همچنین اگه private بزاری فقط متد های داخلی کلاس می تونن متغیر ها تو ببینن همچنین اگه کلمه statich اولش بزاری این متغییر و مقدارش بین تمام نمونه های کلاس مشترک میشه یعنی اگه تو یک نمونه تغییر کنه تو تمام نمونه ها تغییر می کنه
حالا خودت ببین نمی تونی روش دیگه ای استفاده کنی چون زیاد با شی گرایی هم خوانی نداره

اَرژنگ
چهارشنبه 16 دی 1388, 06:49 صبح
اگه کلمه statich اولش بزاری این متغییر و مقدارش بین تمام نمونه های کلاس مشترک میشه یعنی اگه تو یک نمونه تغییر کنه تو تمام نمونه ها تغییر می کنه
بین نمونه‌ها مشترک نمیشه، بین همه چی قابل دسترسی میشه به وسیله کلاسی که تعریفش کرده.
از داخل یک نمونه نمیشه بهش با استفاده از this دسترسی داشت، بنابر این خارج از نمونه‌ها قرار دارد.

mir555
پنج شنبه 17 دی 1388, 12:59 عصر
آرژنگ جان فکر کن ما یک کلاس داریم به اسم test تو این کلاس یک متغییر به شکل
static private int a = 0;
تعریف کنیم دیگه از بیرون کلاس نمی تونیم به این متغییر دسترسی داشته باشیم
یعنی اگه بگیم
test ts=new test();
ts.a=10;
به ما خطا می ده که این متغییر وجود نداره چون private تعریف شده
حالا اگه تو سازنده کلاسمون تو کلاس test اینطور بنویسیم
a=a+1;
بعدش اگه 5 تا نمونه از یک کلاس بسازیم مقدار متغییر ما تو کلاس آخر میشه 5 بعنی با این روش یک متغییر مشترک بین تمام نمونه های یک کلاس ساختیم من اینو عملا استفاده کردم
اگه دوست دارین بگین نمونه بزارم

اَرژنگ
پنج شنبه 17 دی 1388, 17:17 عصر
آرژنگ جان فکر کن ما یک کلاس داریم به اسم test تو این کلاس یک متغییر به شکل
static private int a = 0;
تعریف کنیم دیگه از بیرون کلاس نمی تونیم به این متغییر دسترسی داشته باشیم
یعنی اگه بگیم
test ts=new test();
ts.a=10;
به ما خطا می ده که این متغییر وجود نداره چون private تعریف شده
حالا اگه تو سازنده کلاسمون تو کلاس test اینطور بنویسیم
a=a+1;
بعدش اگه 5 تا نمونه از یک کلاس بسازیم مقدار متغییر ما تو کلاس آخر میشه 5 بعنی با این روش یک متغییر مشترک بین تمام نمونه های یک کلاس ساختیم من اینو عملا استفاده کردم
اگه دوست دارین بگین نمونه بزارم
میرجان فکر کنم از لحاظ تعریفی ما داریم در مورد دو چیز مختلف حرف میزنیم:
متغییر استاتیک متعلق به کلاس است و نه نمونه‌ها، نمونه‌ها میتونند بهش دستیابی هم داشته باشند ولی همین متغییر دوباره از متدهایه استاتیک کلاس قابل دسترسی است، و متدهایه استاتیک جزو نمونه‌هایه کلاس به حساب نمیاند.
اینکه از نمونه‌هایه کلاس قابل دسترسی هست درسته ولی بین نمونه‌ها مشترک نیست.
اگرچه همین مثالی را که زدید میشه هم بدانه استفاه از متغییر استاتیک پیاده کرد (با استفاده از فکتوری پترن ).

mir555
پنج شنبه 17 دی 1388, 17:38 عصر
من زمانی که جاوا کار می کردم دقیقا این مفهوم متغییر استاتیک در یک کلاس برام جا افتاده و مطمئن هستم که متغییر استاتیک در یک کلاس مثل یک متغییر مشترک بین نمونه های مختلف از یک کلاس هستش
لطف می کنین شما بیشتر توضیح بدین؟

اَرژنگ
جمعه 18 دی 1388, 07:28 صبح
من زمانی که جاوا کار می کردم دقیقا این مفهوم متغییر استاتیک در یک کلاس برام جا افتاده و مطمئن هستم که متغییر استاتیک در یک کلاس مثل یک متغییر مشترک بین نمونه های مختلف از یک کلاس هستش
لطف می کنین شما بیشتر توضیح بدین؟

متغییر استاتیک ربطی به داشتن و یا نداشتن نمونه‌ها ندارد (ماورایه نمونه‌ها ، در سطح کلاس وجود دارد):


http://msdn.microsoft.com/en-us/library/79b3xss3(VS.80).aspx
A static method, field, property, or event is callable on a class even when no instance of the class has been created.

اگر توضیح در لینک بالا کافی نبود بفرمائید در خدمتیم.