PDA

View Full Version : Static



benyamin_pc
پنج شنبه 12 مرداد 1385, 10:39 صبح
سلام
این متد استاتیک در اصل به چه کار میاد؟میشه یه مثال که واقعا استاتیک لازمش باشه یه نفر بیاره؟

omid_Ahmadi
پنج شنبه 12 مرداد 1385, 12:00 عصر
توی FCL پره از کلاسهایی که چندین متد Static دارن، یکیش که اغلب هم ازش استفاده کردن، کلاس MessageBox متد Show. فکر می کنی منطقی بود که این متد رو به صورت Instance Method بنویسن؟
یا متدهای موجود در کلاس Application و یا ...

علیرضا مداح
پنج شنبه 12 مرداد 1385, 13:25 عصر
سلام دوست عزیز
هنگامیکه یک متد/تابع/کلاس و یا هر شی ء دیگری بصورت Static تعریف میشود برای بکارگیری آن نیازی به ایجاد نمونه(Instance) نمیباشد .

benyamin_pc
پنج شنبه 12 مرداد 1385, 14:39 عصر
میشه دقیقا یه مثال با سی شارپ رو بنویسین بعد روی اون توضیح بدین؟؟ببخشیدا آخه درست این متد را متوجه نشدم.:لبخندساده

ghafoori
جمعه 13 مرداد 1385, 07:39 صبح
ببین دوست عزیز متد/تابع/کلاس static یکبار در اول برنامه ایجاد میشود و در حافه قرار می گیرد
بنابراین نکاتی که باید در نظر اینه که داخل کلاس static نمی تونی متغغیر معمولی تعریف کنی باید تمامی اعظا ان static باشند
در متد و خصوصیت static نمی تونی از اعظا غیر static و مرجع this استفاده کنی
شما این کلاس را در نظر بگیر



public class test : Object
{
static int c;
public static int count()
{
get{
return c;
}
}

static void testmethod()
{
staticmethod();
}

private static void staticmethod()
{

}

}
این یک کلاس معمولی با چند متد و خاصیت static حالا شما هر چندتا نمونه از این کلاس ایجاد کنی فقط یک متغییر c در حافظه قرار میگیرد شما در هرجا از کلاسهای دیگر فقط با نوشتن test.c
می تونی به متغییر c دسترسی داشته باشی

benyamin_pc
جمعه 13 مرداد 1385, 10:25 صبح
حالا اگه همینو بدون استاتیک می نوشتیم مگه چه فرقی داشت؟؟

Mrs.Net
جمعه 13 مرداد 1385, 15:00 عصر
شاید با این مثال بهتر بفهمی.
دوتا فرم درست کن و داخل فرم اول یک button درست کن و برای کلیکش اینو بنویس:

string test = "i am form1"; و خط بعدی فرم دوم رو صدا بزن.
حالا تو فرم دوم مقدار test رو نمایش بده. چجوری انجام میدی؟

کاری نداریم چه راههای هست ولی یکی از این راهها همین static هست.
به اینصورت که تو فرم اول متغیر test رو اینجوری تعریف کنی که تو کلاس فرم یک اینو بنویسی:

static string test = "i am form1"; حالا تو فرم دوم با نوشتن کد زیر به مقدار test دسترسی پیدا میکنی.

Form2.label1.Text= Form1.test;

benyamin_pc
جمعه 13 مرداد 1385, 16:23 عصر
از خواص دیگه استاتیک میشه بازم بگین؟؟
این کار رو با پابلیک تعریف کردن استرینگ هم می شد انجام داد نه؟؟

Mrs.Net
جمعه 13 مرداد 1385, 17:07 عصر
نه!!
شما انجام بدید ببین میشه انجام داد یا نه

benyamin_pc
جمعه 13 مرداد 1385, 17:27 عصر
سی دی 1 استادیوم از دور خارج شده و فعلا استادیو ندارم
از خواص دیگه استاتیک میشه اگر کسی میتونه بازم بگه ؟؟ ممنون میشم

SabaSabouhi
سه شنبه 17 مرداد 1385, 19:14 عصر
با سلام
متدهاى تعریف شده در یک کلاس بر روى نمونه‌ى ایجاد شده از آن کلاس کار مىکند.



Form myForm = new Form();
myForm.Show();


اما گاهى نیاز به توابعى داریم که مستقل از شىء خاصى اجرا بشن مثل پیغام‌هایى که برنامه بر روى صفحه ایجاد مى‌کنه.



MessageBox.Show("Press any key.");


اگر متد Show به صورت Static تعریف نشده بود مى‌بایست این کار را مى‌کردید:



MessageBox myMsgBox = new MessageBox();
myMsgBox.Show("Press any key");


با این مثال امیدوارم که مطلب روشن شده باشد.
صبا صبوحى