سربارگذاری عملگر ها (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 شده است و نیازی به کدنویسی برای آن نیست.
یکی از موارد جالب بکار گیری سربارگذاری عملگرها در برنامه نویسی سه بعدی و ساختن کلاسی برای انجام عملیات ماتریسی و برداری می باشد.