PDA

نسخه کامل مشاهده نسخه کامل : نحوه ارسال آرایه به متد



Life24
26-08-2013, 14:58
سلام

دوستان محترم مگر ما هنگامی که یک آرایه را به متد ارسال میکنم در اصل آدرس خانه اول رو ارسال کردیم؟
در c++ که یادمه این طور بود که اسم رو میفرستادیم که میشد همان خانه اول آرایه(اشاره به خانه اول آرایه) و طول ارایه
در سی شارپ وقتی اسم ارایه را می نویسیم چطور است؟ چطور طولش پس تشخیص مدهد؟

و سوال اصلی که مربوط به سوال بالا هم میشه .اینجا آدرس رو فرستاده و در متد به صورت محلی 5 تا خونه تغیر داده شده با عناصر آن
اما تغیرات اعمال نشده! اما 1 دانه رو تغیر داده و تغیر روش اعمال شده.
منظور از ارسال با مقدار را میدانم اما این ارایه هست. و اسم ان که ادرس خانه اول هست ارسال شده است
منظور از ارسال ارجاع با مقدار چیست؟ اگر ارجاع هست پس مقدارش چیست؟ :n03:
class PassingRefByVal
{
static void Change(int[] pArray)
{
pArray[0] = 888; // This change affects the original element.
pArray = new int[5] {-3, -1, -2, -3, -4}; // This change is local.
System.Console.WriteLine("Inside the method, the first element is: {0}", pArray[0]);
}

static void Main()
{
int[] arr = {1, 4, 5};
System.Console.WriteLine("Inside Main, before calling the method, the first element is: {0}", arr [0]);

Change(arr);
System.Console.WriteLine("Inside Main, after calling the method, the first element is: {0}", arr [0]);
}
}

عــــلی
26-08-2013, 16:33
بسم الله الرحمن الرحیم
سلام.
ارسال یک آرایه به یک متد مثل ارسال یک کلاس به متد میمونه.شما میتونی از توی متد جدید، یک اشاره گر جدید بسازی بدون اینکه مقدار اشاره گر ارسال شده به متد رو تغییر بدی.یعنی شما نمیتونی کلاسی به یک متد ارسال کنی و اونو جدید کنی و در حافظه جای بدی(Replace اشاره گر قبلی بشه).برای اینکار باید اشاره گرت رو رفرنس بدی با سینتکس ref و یا میتونی با out خروجی بگیری.فرقشم اینه که out حتماً باید مقدار دهی کنید و مقدارش هم حتماً باید از نوع داده ای باشه که مقدارش رو میفرستید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
راستی کدهاتونو همیشه توی تگ کد بذارید تا خوانا تر و چپ به راست بشه.
موفق و سربلند باشید در پناه حق.

Life24
26-08-2013, 22:15
سلام
ممنون علی آقا
ببنید بیشتر منظور من این هست که وقتی ما از ref و out استفاده نمیکنیم.و آرایه رو می نویسم.دقیقا چی ارسال میشه؟
آدرس اولین خانه آرایه ارسال میشه؟
وقتی از کلمه ref استفاده کنیم.چی ارسال میشه؟
ببنید در کد زیر با کلمه new یک اشاره گر تولید کرده و انتصاب داده به آرایه و اعمال شده داخلش.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما اینجا ref رو که نمی نویسیم مگر چی ارسال میشه که اشاره گر جدید رو قبول نمی کنه اما اعمال تغیر به خانه ها رو میده.اینجا الان خانه اول آرایه تغیر کرده برای همیشه با اینکه خبری از ref نیست
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

عــــلی
27-08-2013, 08:15
بسم الله الرحمن الرحیم
سلام.
ببینید شما وقتی یک آبجکت حالا هرچیزی که باشه رو به متد ارسال میکنید خود کامپایلر تشخیص میده که نیاز به ساخت اشاره گر جدید هست یا نه.مثلاً برای کلاس ها نیاز به ساخت نیست.شما وقتی یک آرایه رو میفرستی خود آرایه یک اشاره گر هست و آیتم های داخلش اشاره گر های دیگری هستن.مثل این میمونه که یک کلاس رو با محتویاتش به متد ارسال کنید.
حال اگر کلاس رو به صورت رفرنس بفرستی در صورت تازه سازی کردن توی اشارگر قبلی Replace میشه.یعنی آدرسش تغییر نمیکنه ولی محتویاتش تغییر میکنه.اما وقتی بدون رفرنس بفرستی و new کنی یک اشاره گر جدید ازش در حافظه ساخته میشه.