PDA

View Full Version : ارسال پارامتر به صورت byval و تغییر آن!



odiseh
پنج شنبه 02 آذر 1385, 15:34 عصر
سلام

چرا وقتی که یه متغیر از نوع class را به صورت byval به یه subroutine می فرستیم ، اون سابروتین می تونه مقادیر property های اون کلاس رو حتی وقتی که به صورت byval فرستاده شده تغییر بده؟

Chabok
پنج شنبه 02 آذر 1385, 18:34 عصر
تا جایی که من میدونم فقط خود شیئی که بصورت Byval فرستاده میشه نمیشه تغییرش داد .
ولی اگه Property یا متغیر داشته باشه میشه اونها رو تغییر داد .

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

امیدوارم متوجه منظورم شده باشید که خود خود شیئ بصورت ByVal غیر قابل تغییر است .
مثلا اگه یه رشته رو بصورت ByVal بفرستید نمیتونید تغییرش بدین .
ولی اگه مثلا کلاس باشه و ByVal هم تعریف کنید خواص اون قابل تغییر هستند .

odiseh
شنبه 04 آذر 1385, 07:50 صبح
دوست عزیز
با تشکر از توجه و پاسخ خوب شما، آیا راهی هست که شی به صورت byval ارسال بشه و لی نتونیم که حتی property های اون شی رو تغییر بدیم؟ یعنی توی function فقط ازش استفاده بکنیم

Chabok
شنبه 04 آذر 1385, 16:42 عصر
راستش نه .
یعنی نمیدونم برای چه کاری استفاده میشه ؟
میشه بگین میخواهید چیکار کنید ؟ شاید لازم نباشه اصلا تغییرات انجام بشه که بخواهید جلوش رو بگیرید .

ولی اگه میخواهید که اصلا نشه محتوای Property رو تغییر بدین اون رو بصورت ReadOnly تعریف کنید .
در این صورت اصلا در تعریف متغیر بخش Set ندارید و فقط Get دارید که هر چیزی که بخواهید Return می کنید .

موفق باشید .