PDA

View Full Version : ArgumentException



systole
سه شنبه 29 اسفند 1391, 21:44 عصر
سلام دوستان
همون طور که می دونید اگه در تابع Instr آرگومان اول که یه مقدار عددی هست ذکر نشه و فقط دو رشته بهش داده بشه کارشو می کنه...
چطور میشه یه همچین توابعی پیاده سازی کرد؟

توی جستجوهایی که کردم یه چیزهایی راجع به کلاس ArgumentException گفته شده بود که من زیاد سر در نیاوردم...اگه ممکنه راهنمایی بفرمایید.

vbhamed
چهارشنبه 30 اسفند 1391, 04:15 صبح
سلام

اين يك نمونه
Sub MyInstr(Optional a, Optional b, Optional c)
End Sub

Optional براي تعريف پارامتر اختياري هست، البته از هر پارامتري Optional تعريف كردين، پارامترهاي بعديش هم حتما بايد Optional باشن
ضمنا براي پارامترهامون نوع داده تعريف نكرديم تا كاربر بتونه هر چيزي وارد كنه
مثلا در مورد Instr اگر پارامتر اول عدد باشه پارامتر دوم و سوم رو رشته ميديم و اگر اول و دوم رو رشته بديم سوم ديگه استفاده نميشه پس چون پارامتر اول ممكنه عدد يا رشته باشه بنابراين نوع براش نمي‌زاريم

البته در زبانهايي مثل CPP ميشه دو يا چند تابع با نام يكسان ولي تعداد و نوع پارامترهاي مختلف تعريف كرد و كامپايلر خودش با توجه به نوع فراخواني، تابع مورد نظر رو انتخاب مي‌كنه

systole
چهارشنبه 30 اسفند 1391, 16:54 عصر
سال نو بر همه برنامه نویسان عزیز مبارک

سلام دوست من ، ممنون بابت توجهتون

اما فکر کنم من منظورم رو درست نرسوندم...

من با Optional argument آشنا هستم و طرز کارش رو میدونم اما تابع Instr یه حالت خاص داره در حالت عادی وقتی ما یه تابع تعریف می کنیم که برخی پارامترهاش به صورت optional هست و قراره که مقداری به اون پارامتر ارسال نشه حتما باید جای اون آرگومان با کاما مشخص شده باشه...
اما در تابع Instr وقتی start ذکر نشه و تنها دو رشته به تابع تحویل داده بشه تابع به صورت اتوماتیک رشته اول رو آرگومان دوم حساب میکنه و رشته دوم رو آرگومان سوم در حالی که خبری از start نیست...

امیدوارم منظورم رو خوب رسونده باشم...

vbhamed
چهارشنبه 30 اسفند 1391, 18:20 عصر
سلام

اين به كد نويسي تابع شما بستگي داره، قطعه كد زير رو بررسي كنيد
Function MyInstr(Optional a, Optional b, Optional c = "") As Long

If c = "" Then
MyInstr = InStr(a, b)

Else
MyInstr = InStr(a, b, c)

End If

End Function

Private Sub Form_Load()

MsgBox MyInstr("this is a test", "t")
MsgBox MyInstr(5, "this is a test", "t")

End Sub