ممنون
روال : روال وسیله ای برای تقسیم کد برنامه به قطعات کوچکتر و قابل مدیریت است.در حال استاندارد هر روال یک کار خاص را انجام میدهد. بعضی از روالها برای انجام کار خود نیاز به داده های ورودی (Argument) دارند که باید به آنها پاس (Pass) شود. در vb دو نوع روال داریم : روال سابروتین (روال رویداد نوعی روال سابروتین است) , روال تابع
روالهای سابروتین :
روالهای سابروتین مقدار برگشتی ندارند اما روال تابع مقداری را برگشت میدهد. به هر دو دو نوع روال میتوان داده پاس کرد.
روال سابروتین بصورت زیر تعریف میشود (ساده ترین فرم) :
پرانتزهای بالا برای پاس کردن داده ها هستند.Sub subname()Do ……..End sub
مثلا :
با این کار ما یک متغیر رشته ای تعریف کرده ایم که میتوانیم در داخل روال از ان استفاده کنیم. حال در هر جا و به هر تعداد که خواستیم میتوانیم از روال فوق استفاده کنیم.Sub message(ByVal text As string)Msgbox(text)End sub
کلمه کلیدی ByVal به vb میگوید که این داده بصورت مقداری (By Value) پاس شده است. یعنی vb یک کپی از آن را به روال میدهد نه خود آنرا. روش دیگر پاس کردن داده روش ارجاعی (ByRef) است در این روش vb بجای مقدار داده, آدرس آنرا به روال پاس میکند. روش پاس کردن ارجاعی بیشتر جاهایی مورد استفاده قرار میگیرد که بخواهیم مستقیما با داده های اصلی کار کنیم. در روش ارسال با مقدار, تغییرات اعمالی از سوی روال بر روی مقادیر کپی شده, هیچ گونه تاثیری بر روی مقدار اصلی نخواهد داشت.اما در روش ارجاعی, روال فراخوانی شده مستقیما به مقدار اصلی دسترسی دارد و میتواند در آن تغییراتی اعمال کند.
تابع :
روالهای تابع مشابه با روالهای سابروتین هستند با این تفاوت که مقدار برگشتی دارند. در تعریف روال تابع بجای sub از function استفاده میکنیم. برای برگشت مقدار از Return استفاده میشود.
Function name() As DataTypeAs DataType نوع داده مقدار برگشتی را مشخص میکند. تعداد return های یک تابع میتوانند متغییر باشند اما با اجرای اولین Return تابع خاتمه پیدا میکند.
Return
End Function
مثال : تابعی مینویسیم که دو مقدار عددی از کاربر مینویسد و تابع کوچکتر یا بزرگتر بودن آنها را چک میکند و بصورت رشته برمیگرداند.
تابع فوق دو مقدار را میگیرد و رشته ای را بعنوان نتیجه برگشت میدهد. با نتیجه میتوانیم همانند سایر متغیرهای رشته ای عمل کنیم.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای خروج از تابع از دستور exit Function استفاده میکنیم.Compare(8,3) ===è " عدد 1 بزرگتر از عدد 2 است"
*** به روالهایی که در داخل کلاسها تعریف میشوند, متد گفته میشود
آرگومانهای اختیاری :
بعضی از روالها میتوانند دارای آرگومانهای اختیاری باشند, اگر آرگومانی بصورت اختیرای اعلان شود این امکان به روال فراخوانی شده داده میشود تا در مورد اینکه کدام آرگومانها ارسال شوند, تصمیم گیری کند. ارگومانهای اختیاری مقداری بعنوان پشی فرض دارند که برای تخصیص پارمترها در نظر گرفته میشود. برای اعلان یک آرگومان اختیاری از کلمه کلیدی Optional استفاده میکنیم و یک مقدار پیش فرض به آن نسبت میدهیم.
اگر یک آرگومان بصورت اختیاری اعلان شود, آرگومانهای بعد از آن نیز باید بصورت اختیاری اعلان شوند.Sub mypross (Byval input As integer, optional ByVal operate As integer=5)End Sub
روش Overload :
با استفاده از روش Overload میتوانیم چندین روال همنام که در پارامترها (تعداد و نوع پارامترها و یا ترتیب پارامترها) با هم متفاوت هستند ایجاد کنیم. هنگامیکه یک روال Overload فراخوانی میشود کامپایلر پس از آزمودن تعداد, نوع و ترتیب آرگومانهای روالهای هم نام اقدام به انتخاب روال صحیح میکند.
غالبا از روالهای Overload هنگامی استفاده میکنیم که چند روال مشابه وظایف مشابهی را بر روی نوع داده های متفاوت انجام میدهند.
قلمرو یک شناسه یا عنصر بخشی از برنامه است که در آن شناسه یا عنصر میتواند مورد مراجعه یا دسترسی قرار گیرد. قلمروهای ممکن برای شناسه ها عبارتند از : قلمرو کلاس, قلمرو ماژول, قلمرو بلوک و قلمرو فضای نام
اعضای یک کلاس دارای قلمرو کلاس هستند, یعنی آنها در بخشی که بعنوان فضای اعلان کلاس شناخته میشود قابل رویت هستند. در داخل قلمرو کلاس, یک متد میتواند به بصورت مستقیم تمام اعضای تعریف شده کلاس را فراخوانی و به اعضای ارث بر کلاس دسترسی پیدا کند (البته بجز اعضای Shared). در واقع اعضای یک کلاس برای متدهای کلاس حالت سراسری دارند.
قلمرو بلوک : شناسه هایی که در داخل یک روال یا ساختارهای انتخاب و تصمیم گیری (شرط و حلقه) اعلان میشوند قلمرو بلوک دارند. (با استفاده از Dim یا Static).
*** اگر یک متغیر محلی در روال فراخوانی شده همنام با با یک متغیر در قلمرو کلاس یا ماژول باشد, متغیر با قلمرو کلاس و ماژول تا زمانیکه روال فراخوانی شده به اجرای خود خاتمه دهد, بصورت پنهان باقی میماند.
قلمرو ماژول مشابه قلمرو کلاس است. متغیرهایی که در داخل یک ماژول اعلان میشوند برای تمام متدهای تعریف شده در ماژول قابل دسترسی هستند. اگر عنصری در داخل هیچ روالی قرار نداشته باشد, بطور خودکار به عنصر سطح ماژول تبدیل میشود.
در سطح ماژول (ماژول, کلاس و ساختار) میتوان برای تنظیم حوزه دید از کلمات زیر استفاده کنیم :
Public : دسترسی عمومی و نامحدود به عنصر (از همان پروژه یا پروژه های ارجاع داده شده)
Protected : دسترسی حفاظت شده به عنصر , از این کلمه کلیدی فقط برای تعریف اعضای یک کلاس اتفاده میشود
Friend : دسترسی عمومی و نامحدود به عنصر فقط در داخل همان پروژه
Protected Friend : عنصری که خصلتهای Protected و Friend را با هم دارد(فقط در سطح کلاس)
Private : دسترسی عنصر را به همان ماژول, کلاس یا ساختار محدود میکند.
قلمرو فضای نام : فضای نام یکی از ویژگیهای برنامه نویسی شء گرا است که برای جدا کردن, عناصر همنام و جلوگیری از تداخل آنها بکار میرود. عناصری که با کلمات کلیدی Friend و Public اعلان میشوند در تمام فضای نام دیده میشوند
مرسی خوب بود
میشه در مورد overload کردن مثال بزنی ؟
بعنوان مثال : دو تابع تعریف میکنیم که عددی را به عنوان آرگومان میگیرند و توان 2 آنرا برگشت میدهند. تابع اول عدد صحیح میگیرد و تابع دوم عدد اعشاری
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به همین ترتیب میتوانیم متدهای (روالهای داخل کلاسها) Overload داشته باشیم.
Last edited by anvar.net; 11-07-2007 at 01:59.
ممنون مثال خوبی بود فقط یک سوال استفاده از کلمه overloads قبل از function چه فایده ای داره ؟ آخه چند جا دیدم اینطور نوشتن . صرفا بخاطر وضوح بیشتره ؟
سلامنوشته شده توسط bad_boy_2007 [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
می توانید برای وضوح بیشتر هم از آن استفاده کنید ولی اگر بخواهید متدی هم نام با کلاسس پایه را Overload بکنید، (در یک کلاسس وراثتی) آنگاه نوشتن کلمه فوق اجباری است!
anvar.net موفق باشی براتون آرزوی موفقیت می کنم ایشاالله یکی از پربیننده ترین تاپیک ها میشود ./
ممنون.
سلام
آقا یه سوال داشتم گفتم چون به بحث تعریف متغییرها مربوط میشه و شما هم تو آموزشهاتون بهش اشاره کردین بهتره اینجا مطرح کنم
داشتم کتاب ado.net رو میخوندم به این عبارت بر خوردم :
حالا سوالم اینه که منظور از عبارت Friend WithEvents که پیش از اعلان متغییر آمده چیه ؟کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Overload :
کلمه Overload چه قبل از روال سابروتین باشد یا تابع , هدف آن اضافه بارکردن یک یا چند سابروتین یا تابع همنام در کلاس پایه است.
کلمه کلیدی WithEvents :
Dim | Private | Public WithEvents objvarname As ObjectType
کلمه کلیدی فوق به vb میگوید که شیئ که به آن ارجاع داده شده رویدادی از خود به نمایش میگذارد.
هنگامیکه یک متغیر object با استفاده از کلمه فوق اعلان میشود, ورودی متغیر فوق در لیست اشیاء قرار داده میشود. همچنین یک لیست از رویدادهایی که برای متغیر فوق در دسترس هستند نیز در لیست رویه ها قرار میگیرند. پس از آن میتوان برای Handle کردن رویدادهای متغیر کد نوشت.
*** : متغیر شئ که با کلمه کلیدی فوق اعلان میشود باید در داخل یک شئ یا یک کلاس و یا ماژول باشد.
*** : در صورتی که در یک شئ ActiveX و یا کلاس از کلمه کلیدی فوق استفاده میکنیم. فقط با متغیرهای Object مجاز به استفاده هستیم.
*** : در آرایه ها مجار به استفاده از کلمه فوق نیستیم.
*** : در اعلان متغیرهای محلی مجاز به استفاده ار کلمه کلیدی فوق نیستیم.
*** : استفاده از کلمه New به همراه کلمه کلیدی فوق مجاز نیست
مثال :
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)