ورود

View Full Version : مشکل در فهم تابع ها و byref و byval



white fox
یک شنبه 16 فروردین 1383, 15:42 عصر
من متوجه نمیشم چرا وقتی متقییری یا یه داده رو میخوایم از بک تابع دیگر فراخوانی کنیم...اسم اون داده یا متغیر تغییر میکنه...
کلا چطوری باید یه متغییری رو از یه تابع در یک ساب روتین فراخوانی کرد...اگه مکی توضیح بدید ممنون میشم.
مثلا من با کد زیر مشکل دارم میشه اونو توضیح بدید؟
اگر ممکنه کمی هم در مورد byval و byref توضیح بدید.



Private Sub Form_Load()
Dim Anumber As Integer
Anumber = 1
IncAnumber
Debug.Print "Value after function is :" & Anumber
End Sub

Private Sub Inc(ByVal IncSubsNumber As Integer)
Debug.Print "IncWasPassed:" & IncSubsNumber
IncSubsNumber = IncSubsNumber + 1
Debug.Print "New Value is : " & Anumber
End Sub

مهدی کرامتی
یک شنبه 16 فروردین 1383, 21:21 عصر
توضیح درباره پاس کردن پارامترهای تابع بصورت Value و Reference (معروف به ByVal و ByRef):

بطور کلی هنگامی که متغیری بصورت پارامتر به یک تابع پاس میشود تابع با خود آن متغیر کار نمیکند، بلکه یک کپی Local از آن بوجود آورده و عملیات خود را با آن انجام میدهد. بنابراین در این روش (معروف به ByVal) هرگونه سعی در تغییر در محتوای آن متغییر بی‌نتیجه خواهد بود، چراکه عملیات با کپی آن متغیر در حال انجام است نه با خود آن. در این روش پارامترها فقط ورودی هستند.

بصورت پیش فرض پارامترهای توابع ByVal هستند مگر اینکه با مشخص کردن کلمه ByRef این وضع را تغییر دهید.

هنگامیکه یک پارامتر بصورت Reference کار میکند دیگر کپی آن را ایجاد نمیکند، بلکه مستقیما با متغیر پاس شده کار میکند. در این روش هر تغییری که در بدنه تابع در مقدار پارامتر داده شود بر روی متغیر اصلی تاثیر خواهد گذاشت.
در این روش پارامترها ورودی/خروجی هستند.