نمایش نتایج 1 تا 5 از 5

نام تاپیک: کاربرد out در ورودی یک تابع

  1. #1

    کاربرد out در ورودی یک تابع

    در دو کد زیر یک اتفاق میافته:
    public void FillData(DataTable table){
    ...
    }

    public void FillData(out DataTable table){
    ...
    }

    در هردو table پر میشه و بعد از اون table قابل استفاده هست.
    دلیل اینکه پرسیدم اینه که چندتا کلاس مختلف داشتم و از حالت اول استفاده کردم اما دیگه table پر نبود. ولی با حالت دوم کار کرد

  2. #2
    نقل قول نوشته شده توسط once4ever مشاهده تاپیک
    در دو کد زیر یک اتفاق میافته:
    public void FillData(DataTable table){
    ...
    }

    public void FillData(out DataTable table){
    ...
    }

    در هردو table پر میشه و بعد از اون table قابل استفاده هست.
    دلیل اینکه پرسیدم اینه که چندتا کلاس مختلف داشتم و از حالت اول استفاده کردم اما دیگه table پر نبود. ولی با حالت دوم کار کرد
    out کاربرد های زیادی داره
    مثلا اگه قرار باشه یک متد بیش از یه مقدار برگردونه (مثلا 2 مقدار) آنگاه یکی از پرارمترها با دستور return و دیگری با out مقدار دهی میشوند

    برای تعداد پارامتر باز گشتی دیگه هم همینطوره

    همچنین یکی دیگه از کاربرد هاش اینه که وقتی متغیری را درون یه متد تعریف کردین و اونو به هر دلیلی نمیخواین مقدار اولیه بهش بدین و همینطور نیاز دارین که متغیر مذکور را به متد دیگری پاس دهید از out باید استفاده کنی وگرنه خطای معروف با اینکه متغیر مقدار دهی نشده را دریافت خواهید کرد

    توی msdn هم که ......

  3. #3
    ممنون شما به درست بعضی کاربردهای out گفتید اما منظور من موردی بود که تو سوالم مطرح کرده بودم. یعنی تفاوت اون دو شکل دستور و اینکه واقعا باهم فرق دارند اما چرا؟
    توی msdn هم که ......

  4. #4
    با سلام
    همانطور که می دانید کلاسها در #C به روش ارجاع به متد ارسال می شوند و اگر تغییری در شیی که به عنوان پارامتر ارسال شده ایجاد شود، شیی که به عنوان آرگمان ارسال شده نیز تغییر می کند چون به یک جا اشاره می کنند. و ساختارها (structure ها) عکس کلاس ها به روش مقدار ارسال می شوند. حال اگر بخواهیم ساختاری را به روش ارجا ارسال نماییم از کلمه کلیدی ref استفاده می کنیم حال ممکنه آرگمانی را که می خواهیم ارسال کنیم مقدار اولیه به آن نداده باشیم کامپایلر خطا میگیره حال اگر بخواهیم پارامتری که ارسال می کنیم به روش ارجاع باشه و مقدار اولیه نداشته باشه بعد توی تابع به آن مقدار بدهیم از کلمه کلیدی out استفاده می کنیم.
    این مورد در کلاسها نیز صادق است.
    امیدوارم جوابتان را گرفته باشید
    (تا پست را گزاشتم دیدم یک کاربر دیگر جواب گزاشته و شما هم پست دیگری گزاشتید. بعد دیگه پست را پاک نکردم تا شاید برای دیگران مفید باشد)
    موفق باشید.

  5. #5
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    یادمه که در جایی خوندم:
    out سرعت بیشتر به نسبت ref و حالت معمولی (by val) داره، چون شرط وجود مقدار اولیه برای پارامتر، مورد بررسی قرار نمیگیره.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •