PDA

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



Vahid_Nasiri
شنبه 15 شهریور 1382, 17:12 عصر
سربارگذاری عملگر ها (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 شده است و نیازی به کدنویسی برای آن نیست.


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

kablayi
جمعه 23 بهمن 1383, 06:36 صبح
:تشویق: :موفق: