ارسال متغیر بصورت ByRef و ByVal

اگر موقع تعریف یک تابع قبل از نام متغیر از عبارت ByRef استفاده نماییم هنگام فراخوانی تابع با قراردادن متغیری در تابع که دارای مقدارمیباشد ، پس از محاسبات ، مقدار متغیر نیز تغییر میکند. در ضمن مقدار تابع با آخرین مقدار متغیر محاسبه میگردد:



Function Use_ByRef(ByRef intVar As Integer)
intVar = intVar 1

Return intVar

End Function



Dim intMyVar As Integer

intMyVar = 1

Response.Write(intMyVar & "-----" & Use_ByRef(intMyVar))

پاسخ : 2-----3



ولی اگر در مثال فوق ازByVal استفاده کنیم ، پس از محاسبات مقدار متغیر تغییر نمیکند و نیز مقدار تابع با مقدار اولیه متغیر محاسبه میشود:



Function Use_ByVal(ByVal intVar As Integer)
intVar = intVar 1

Return intVar

End Function

Dim intMyVar As Integer

intMyVar = 1

Response.Write(intMyVar & "-----" & Use_ByVal(intMyVar))

پاسخ : 1-----2





متغیر Static


اگر درون تابعی متغیری را بصورت Static تعریف نماییم و مقدار این متغیر طی عملیات تابع تغییر نماید در هرفراخوانی متغیر یاد شده با آخرین مقدارخود در محاسبات شرکت میکند.

این مورد بر خلاف تعریف متغییر بوسیله دستور Dim است . چون در Dim متغییر بمحض تعریف شدن دوباره ، مقدار قبلی خود را از دست میدهد.

Function Use_Static()

Static intCount As Integer

intCount = intCount 1

Return intCount

End Function



Response.Write( "
" & Use_Static)

Response.Write( "
" & Use_Static)

Response.Write( "
" & Use_Static)
1 پاسخ :

2
3



تعریف توابع بصورت OverLoads

در نظر بگیرید كه در جایی از برنامه خود احتیاج داشته باشید كه یك فانكشن را فراخوانی و پارامترهای ورودی آنرا كه استرینك است به آن پاس نمایید. حال اگر شما مجبور باشید در مواقعی خاص به این فانكشن بجای استرینگ ، عدد یا یك متغییر از نوع دیگری پاس كنید ، چكار باید كرد؟ آیا باید دو تا فانكشن با نامهای متفاوت و نوع عملكرد متفاوت تعریف نمود ؟ آیا راه حل دیگری وجود ندارد؟

در اینجا راه حل دیگری نیز وجود دارد كه اگر دو یا چند تابع را با یک نام ثابت ولی تعداد یا نوع متغیر متفاوت در یک کلاس تعریف نماییم میتوانیم از هر کدام برحسب نیاز استفاده کنیم:



Function Use_OverLoads(ByVal strVar1 As String, ByVal strVar2 As String)As String

Return strVar1 & strVar2

End Function



Function Use_OverLoads (ByVal intVar As Integer) As Integer

Return intVar intVar

End Function



Response.Write(Use_OverLoads (5))

Response.Write("
" & Use_OverLoads("Over", "Loads"))



10 پاسخ :

OverLoads