PDA

View Full Version : سوال: ByVal و ByRef چین و چه فرقی دارن؟



maminb
جمعه 11 دی 1388, 09:20 صبح
سلام. میخواستم بدونم وقتی توی Sub های برنامه، داخل پرانتز از ByVal یا ByRef استفاده میکنیم چه اتفاقی میفته و فرقشون چیه؟

یعنی مثلا فرق دو کد زیر چیه؟


Sub amin(ByVal s As String)
MsgBox(s)
End Sub
و

Sub amin(ByRef s As String)
MsgBox(s)
End Sub

Computer.Programmer
جمعه 11 دی 1388, 11:31 صبح
شما وقتی از عبارت byval استفاده کنید مقداری که برای این آرگومان ارسال می کنید پس از پایان روال تغییری نمی کند به این معن که روالی که برایش مقداری را فرستادید که آن مقدار با عبارت byval تعریف شده است در مقدار پاس شده نمی تواند تغییر ایجاد کند ولی استفاده از عبارت byref دقیقاً عکس این موضوع است. به مثال زیر نگاه کن:




Private Sub CallSubs()
Dim y As Integer = 0
a(y)
b(y)
End Sub
Private Sub a(ByVal x)
x = x + 1
End Sub
Private Sub b(ByRef x)
x = x + 1
End Sub



در اینجا زمانی که ساب a صدا زده میشه و مقدار y که برابر صفر است برای اون ارسال میشه این مقدار در داخل روال CallSubs تغییری نمی کنه ولی در داخل روال a برابر x میشه و یک واحد به اون اضافه میشه که با اتمام این روال این مقدار از بین میره ولی در کد بعدی که تابع b رو صدا میزنه مقدار y که هنوز برابر صفر هست رو میفرسته ولی چون آرگومان اون از نوع byref هست این مقدار (y) برابر با مقدار محاسبه شده در تابع b می شود یعنی بعد از صدا زدن تابع b مقدار y در تابع CallSubs برابر با یک خواهد شد.

امیدوارم متوجه شده باشی.

موفق باشی

maminb
جمعه 11 دی 1388, 12:42 عصر
واقعا عالی توضیح دادی!!!!!

ممنون.