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

نام تاپیک: مقدمه ای بر سی شارپ : قسمت- 20

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    2,342

    مقدمه ای بر سی شارپ : قسمت- 20

    سربارگذاری عملگر ها (Operator OverLoading)

    به تعریف مجدد راه و روش اجرای عملگر ها توسط ما ، سربارگذاری عملگرها گفته می شود. فرض کنید می خواهید عدد 2 را به یک مقدار datetime اضافه کنید. خطای زیر حاصل خواهد شد:

    CS0019: Operator '+' cannot be applied to operands of type 'System.DateTime' and 'int'


    جالب بود اگر می توانستیم عدد 2 را به datetime اضافه کنیم و نتیجه ی آن تعداد روزهای مشخص بعلاوه ی دو می بود. اینگونه توانایی ها را می توان بوسیله ی operator overloading ایجاد کرد.

    تنها عملگر های زیر را می توان overload کرد:

    Unary Operators
    + - ! ~ ++ -- true false

    Binary Operators
    + - * / % & | ^ << >> == != > < >= <=


    نحوه ی انجام اینکار نیز در حالت کلی به صورت زیر است:

    return_datatype operator operator_to_be_overloaded (agruments)
    {
    }


    به مثال زیر توجه کنید:

    using System;
    class MyDate
    {
    public DateTime tempDate;
    public MyDate(int year,int month,int day)
    {
    tempDate=new DateTime(year,month,day);
    }
    public static DateTime operator + (MyDate D,int noOfDays)
    {
    return D.tempDate.AddDays(noOfDays);
    }
    public static DateTime operator + (int noOfDays,MyDate D)
    {
    return D.tempDate.AddDays(noOfDays);
    }
    }

    class Test
    {
    static void Main()
    {
    MyDate MD=new MyDate(2001,7,16);
    Console.WriteLine(MD + 10 );
    }
    }

    output:
    2001-07-26


    در مثال فوق عملگر + دوبار overload شده است. یکبار توسط آن می توان یک عدد صحیح را به یک تاریخ اضافه کرد و بار دیگر یک یک تاریخ را می توان به عدد صحیح افزود.


    موارد زیر را هنگام سربارگذاری عملگرها به خاطر داشته باشید:

    1- تنها اپراتورهای ذکر شده را می توان overload کرد. اپراتورهایی مانند new,typeof, sizeof و غیره را نمی توان سربارگذاری نمود.
    2- خروجی متدهای بکار گرفته شده در سربارگذاری عملگر ها نمی تواند void باشد.
    3- حداقل یکی از آرگومانهای بکار گرفته شده در متدی که برای overloading عملگرها بکار می رود باید از نوع کلاس حاوی متد باشد.
    4- متدهای مربوطه باید به صورت public و static تعریف شوند.
    5- هنگامی که اپراتور < را سربارگذاری می کنید باید جفت متناظر آن یعنی > را هم سربارگذاری نمایید.
    6- هنگامیکه برای مثال + را overload می کنید خودبخود =+ نیز overload شده است و نیازی به کدنویسی برای آن نیست.


    یکی از موارد جالب بکار گیری سربارگذاری عملگرها در برنامه نویسی سه بعدی و ساختن کلاسی برای انجام عملیات ماتریسی و برداری می باشد.

  2. #2
    کاربر دائمی آواتار kablayi
    تاریخ عضویت
    بهمن 1383
    محل زندگی
    شیراز
    پست
    773
    :موفق:

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

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