PDA

View Full Version : فهم دقیق استفاده از متد های Static



ali_mnkt
پنج شنبه 15 تیر 1391, 22:07 عصر
سلام

دلیل استفاده از متد های static چیه ؟ دوستان من تعریف متد های static رو کاملا می دونم ولی فقط می خوام و می دونم که در سطح کلاس تعریف می شن و نه در سطح شی . بذارین با یک مثال مشکلم رو بگم :

کلاس Arry رو در نظر بگیرید . این کلاس یک متد static به نام Copy داره که اجازه می ده که محتویات یک آرایه رو در آرایه دیگه کپی کنیم . به صورت زیر


Array.Copy(arrytest1, arrytest2, 3);

خوب حالا اگه یک شی آرایه بسازیم . اون شی هم یک متد به نام copyTo داره که دقیقا همین کار رو انجام می ده. به صورت زیر :


arrytest1.CopyTo(arrytest2, 1);

خوب حالا سئوال من اینه که وقتی می تونیم از طریق متدهای معمولی چنین عملیاتی رو پیاده سازی کنم ، چه دلیلی داره که از متد های Static استفاده بشه ؟

maktoom
پنج شنبه 15 تیر 1391, 22:59 عصر
سلام
یادمه اولین باری که مفهوم درست static رو یاد گرفتم وقتی بود که کار با پایگاه داده در برنامه نویسی رو یاد گرفتم. یادم اومد که وقتی استاد می خواست قبل از آموزش دادن پایگاه داده یک کتابخونه برامون پیاده سازی کنه، ورداشت لیست امانات و لیست کتابها و لیست افراد رو با static تعریف کرد. می دونی چرا؟ چون اولا برای هر شیئ که از این کلاس تولید کنی باید مقادیر ثابت باشن. مشخصه که لیست امانتها و اینکه چه کتابی به امانت رفته یا چه شخصی کتاب امانت گرفته یا نه باید همیشه در هربار استفاده از کتابخونه ثابت بمونه دیگه. بنابراین اونجا از static استفاده کرد.
static یعنی هرجا بخوای به متغیر اون کلاست بدون اینکه ازش شیئ بوجود بیاری دسترسی داری. این می دونی کجا ها ارزش خودشو بیشتر نشون می ده(از نظر بنده). اونجایی که بخوای یه جایی تویه فرم مشخصات یک شیئ رو بگیری تویه فرم دیگه جای دیگه از برنامه ازش استفاده کنی. اما باید مواظب باشی که همین کار موجب اشتباهات دیگه نشه. چون هر شیئ دیگه ای بوجود بیاری از اون کلاس اگه مقدار دهی اولیه به اون متغیر static نکنی مقدارش همونیه که دفعه قبلش دادی.

موفق باشی

ali_mnkt
پنج شنبه 15 تیر 1391, 23:16 عصر
سلام
یادمه اولین باری که مفهوم درست static رو یاد گرفتم وقتی بود که کار با پایگاه داده در برنامه نویسی رو یاد گرفتم. یادم اومد که وقتی استاد می خواست قبل از آموزش دادن پایگاه داده یک کتابخونه برامون پیاده سازی کنه، ورداشت لیست امانات و لیست کتابها و لیست افراد رو با static تعریف کرد. می دونی چرا؟ چون اولا برای هر شیئ که از این کلاس تولید کنی باید مقادیر ثابت باشن. مشخصه که لیست امانتها و اینکه چه کتابی به امانت رفته یا چه شخصی کتاب امانت گرفته یا نه باید همیشه در هربار استفاده از کتابخونه ثابت بمونه دیگه. بنابراین اونجا از static استفاده کرد.
static یعنی هرجا بخوای به متغیر اون کلاست بدون اینکه ازش شیئ بوجود بیاری دسترسی داری. این می دونی کجا ها ارزش خودشو بیشتر نشون می ده(از نظر بنده). اونجایی که بخوای یه جایی تویه فرم مشخصات یک شیئ رو بگیری تویه فرم دیگه جای دیگه از برنامه ازش استفاده کنی. اما باید مواظب باشی که همین کار موجب اشتباهات دیگه نشه. چون هر شیئ دیگه ای بوجود بیاری از اون کلاس اگه مقدار دهی اولیه به اون متغیر static نکنی مقدارش همونیه که دفعه قبلش دادی.

موفق باشی

مرسی دوست عزیز از راهنماییت
موردی که شما توضیح دادین مربوط می شه به یکی از مشخص ترین دلایل استفاده از متد های static و من هم حرف شما رو قبول دارم . خوب در پست اول من یک مثال زدم از متد copy و copyTo که مربوط به آرایه ها هستن و یکیش Ststic هست و دیگری معمولی . خوب جفت این ها یک کاری انجام می دن یعنی کپی کردن مقادیر یک آرایه در دیگری ( اما در نحوه استفاده متفاوت هستن ) خوب چه دلیلی داره که متد copy از نوع ststic در نظر گرفته بشه ؟

maktoom
پنج شنبه 15 تیر 1391, 23:28 عصر
خب شما می تونی هربار هر شیئ دیگه رو هم ساختی از این متد بریزی توش. با همون مقادیر.
اصلا یه چیز مهمتر. چرا باید وقتی می تونیم یک شیئ نسازیم تا بتونیم یک متد مربوط به اون کلاس رو اجرا کنیم حتما یک شیئ بسازیم؟
یه مثال : فرض کنید یه کلاس داریم برای مفهومی مثل مستطیل. که دارای متغرهای طول و عرض هستش. سازنده و مساحت و... . همچنین یک متد براش میذاریم که نوعی که برامون بر می گردونه از نوع خود کلاس مستطیل باشه و کارش این باشه که بررسی کنه هر شیئ از این کلاس که مساحت بیشتری داشت برامون برگردونه. خوب اگه از static استفاده نکنیم مجبور 3 تا شیئ داشته باشیم اگه از static استفاده کنیم با دو تا شیئ می تونیم مستقیما اونها رو به این متد بفرستیم و مشخص کنیم کدوم بزرگتر(و یا هرچیزه دیگه) است.

majidrezaei2007
پنج شنبه 15 تیر 1391, 23:52 عصر
برای این سوال باید برگردی به تعریف static . توابع و صفات static بین تمامی نمونه های یک کلاس مشترک هستند . این یعنی اینکه شما برای استفاده از آنها نیازی به ساخت نمونه از کلاس مورد نظر ندارید . ضمن اینکه متدهای معمولی روی صفاتی کار می کنند که در نمونه های مختلف دارای مقادیر مختلف هستند . اما static ها برای صفاتی هستند که مشترکند و بین نمونه ها تفاوتی ندارند