مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

آموزش متد method در سی شارپ - بخش سوم


قسمت پانزدهم

متد (method)

در این مقاله قصد داریم تا از میان اعضای نوع داده کلاس در سی شارپ با ادامه مطلب در رابطه با متد (method)  بحث را ادامه بدهیم.

در مقاله قبلی متد (method) را مجموعه ای از دستورات در قالب یک بلاک که به منظور انجام عمل خاصی در کنار یکدیگر قرار می گیرند، تعریف کردیم. همچنین اشاره کردیم که از ملزومات در تعریف یک متد (method) ، سطح دسترسی ، نوع داده برگشتی  (return type) و پارامتر ها (parameters)  هستند. همچنین با چگونگی تعریف یک متد در نوع داده کلاس در سی شارپ و نحو فراخوانی یک متد نیز  آشنا شدیم. در مورد تفاوت پارامتر  با ارگومان نیز صحبت کردیم و گفته شد که در ارسال پارامتر به متد ، در ارسال نوع داده مقدار (value type) ، می تواند هم به صورت ارسال با مقدار (passing by value) و هم به صورت  ارسال با مرجع (passing by reference) صورت بگیرد. در این مقاله بحث را در رابطه با ارسال مقادیر از نوع مرجع ادامه خواهیم داد.

ارسال نوع داده با مرجع در متد

  • ارسال نوع داده با مرجع در متد ، با مقدار (passing reference type by value)

همانطور که در مقاله مربوط به نوع داده در سی شارپ صحبت کردیم ، متغیر ها از نوع داده با مرجع (reference type) حاوی ادرس مکانی از حافظه که داده در ان قرار دارد هستند و نه خود داده . پس در زمان ارسال یک متغیر از نوع داده با مرجع (reference type) به متد، بدون استفاده از کلمات کلیدی ref .و out یا به عبارتی به صورت ارسال با مقدار ،  باز هم این آدرس داده است که از آرگومان در پارامتر کپی می شود. در نتیجه هر تغییری در داده ای که پارامتر (parameter) به ان اشاره می کند باعث تغییر در داده ای خواهد شد که آرگومان (argument) به آن اشاره می کند. مثال زیر این مساله را روشن تر خواهد کرد.

public class parameters

    {
        public void  passByvalue( int[] n)

        {
            n[2] = 10;

            Console.WriteLine(" inside the body of  method ,the value of third element is =" + n[2]);
        }

    }

    class Program

    {
        static void Main(string[] args)

        {

            int[] x = { 1, 2, 3, 4, 5 };

            Console.WriteLine(" the value of third element before passing  the array to the method=" + x[2]);

            parameters oparameters = new parameters();

            oparameters.passByvalue(x);

            Console.WriteLine(" the value of third element after passing  the array to the method=" + x[2]);

        }      

    }

در  مثال بالا آرایه x ، به عنوان آرگومان (argument) به متد passByvalue ارسال می گردد. همچنان که گفته شد نوع داده آرایه از نوع داده با مرجع است (reference type) در نتیجه در آرگومان x ، آدرس داده ذخیره شده در قالب آرایه وجود دارد. بعد از ارسال پارامتر با مقدار به متد passByvalue ، مقدار این آدرس از آرگومان x در پارامتر n کپی می شود و در نتیجه هر دو متغیر  x و  n حاوی یک ادرس داده خواهند شد. , و در نتیجه در داخل متد ، تغییر در دادۀ مکانی که پارامتر n به ان اشاره می کند ، در حقیقت باعث تغییر در داده ای خواهد شد که آرگومان x به ان اشاره می کند.  مقادیر خروجی گویای این مطلب خواهد بود .

the value of third element before passing the array to the method= 3

inside the body of  method ,the value of third element is =10

the value of third element after passing  the array to the method=10

 

سوالی که در این جا مطرح می شود این است که اگر در مثال بالا به جای تغییر  در داده در داخل متد ، به پارامتر n ، آرایه جدیدی را انتساب می دادیم ایا این انتساب جدید باز هم تغییری در مقدار ارگومان n می کرد ؟ جواب این سوال منفی خواهد بود چون با انتساب آرایه جدید در پارامتر n ما مقدار ادرس در پارامتر n را تغییر داده ایم و نه داده ای را که به ان اشاره می کند. در نتیجه از این پس پارامتر n  و آرگومان x به دو مکان متفاوت در حافظه اشاره می کنند و در نتیجه تغییر در یکی باعث ایجاد تغییر رد دیگری نمی شود. مثال زیر گویای این مطلب خواهد بود :

مثال :

 

public  class parameters

    {

        public void  passByvalue( int[] n)

        {
            n = new int[] { 10, 20, 30, 40, 50, 60 };

            Console.WriteLine(" inside the body of  methode ,the value of third elemnt is =" + n[2]);
        }

    }

    class Program

    {
        static void Main(string[] args)

        {
            int[] x = { 1, 2, 3, 4, 5 };

            Console.WriteLine(" the value of third elemnt before passing  the array to the method=" + x[2]);

            parameters oparameters = new parameters();

            oparameters.passByvalue(x);

            Console.WriteLine(" the value of third elemnt after passing  the array to the method=" + x[2]);

        }      

    }

در  مثال بالا بعد از ارسال آرگومان x  به متد passByvalue و کپی شدن آدرس آرایه x ، در پارامتر n هر دو ارگومان x و پارامتر n حاوی یک آدرس حافظه هستند. اما در داخل متد passByvalue  ، بعد از اجرا شدن دستور  ایجاد آرایه جدید با  استفاده از کلمه کلیدی new ، یک آدرس داده جدید در پارامتر n  قرار می گیرد که با آرگومان x متفاوت است در نتیجه آرگومان x و پارامتر n دیگر به یک مکان از حافظه اشاره نمی کنند و تغییر در داده یکی باعث تغییر در دیگری  نمی شود. مقادیر خروجی گویای این مطلب خواهد بود .

the value of third element before passing the array to the method= 3

inside the body of  method ,the value of third element is =30

the value of third element after passing  the array to the method=3

 

گرد اوری سمانه وزیریان

فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

آموزش ارسال پیامک، آموزش ارسال پیامک تکی و گروهی ، ارسال پیامک به صورت اختصاصی برای هر مشترک، دریافت پیامک، مشاهده وضعیت…

توضیحات کلی مجموعه:   آیا می دونید قیمت نرم افزارهای مدیریت پیامک در حدود 150 هزار تومان است؟ اما توسط این دوره شما میتونید با مبلغ بسیار کمتر یک نرم افزار مدیریت پیامک رو به صورت کاملا حر…
فصلِ: 9 , تعداد قسمت ها: 59 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

در این فصل که فصل پایانی این دوره می باشد در مورد نحوه ساختن فایل نصبی سریع یا همان quick installer که روش پیشنهاد شده م…

توضیحات کلی مجموعه: پس از بازخوردهای بسیار خوبی که از دوره های آموزش برنامه نویسی سیستم اتوماسیون اداری و آموزش برنامه نویسی سیستم فروش و انبارداری مشاهده کردیم، تصمیم گرفتیم با توجه به درخ…
فصلِ: 13 , تعداد قسمت ها: 120 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

در این فصل که فصل آخر از مجموعه بزرگ آموزش سیستم اتوماسیون اداری می باشد در ابتدا در مورد اسناد و نامه های خارج از سازما…

دوره صفر تا صد  آموزش برنامه نویسی و پیاده سازی سیستم اتوماسیون اداری تحت شبکه. (توصیه می شود دومی مجموعه را حتما ببینید) امروزه اطلاعات یکی از مهمترین و با ارزشترین منابع هر اداره و یا ساز…
فصلِ: 4 , تعداد قسمت ها: 14 , سطح: مقدماتی

این فصل در یک نگاه:

توضیح تنظیمات گرافیک و صدا در یونیتی پیاده سازی منو ها …

به نام خدا   بازی‌سازی یک حرفه بسیار جذاب است و تبدیل شدن به یک بازی‌ساز حرفه‌ای آرزوی همه ماست. اینکه بتوانیم دنیای خاصی خلق کنیم و در این دنیا قوانین خود را پیاده کنیم، همیشه ما را به وج…
فصلِ: 11 , تعداد قسمت ها: 92 , سطح: صفر تا صد

این فصل در یک نگاه:

اجرای سیستم روی سیستم، قرار دادن سیستم روی سرور، تعریف Connetion String، آشنایی با فایل App.config، ساخت رشته اتصال به ص…

مهمترین تکنولوژیهای استفاده شده در این دوره پروژه محور (سیستم فروش کالا و انبارداری) طراحی گرافیکی به روش WPF (Windows Presentaion Foundation) آموزش کامل برنامه نویسی xaml (برای طراحی های …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید