operator ها خودشون تابع به حساب میان که البته محدود به یک سری عملیات ریاضی میشن(جمع تفریق و غیره)
به طول مثال در سی شارپ زمانی که شما دو رشته رو جمع میکنید :
"my name is" + "sajad"
در واقعا این اوپراتور در دل خودش متد استاتیک concat رو فراخوانی میکنه به این شکل :
string.concat(string st1,string str2);
شما از اوپراتور ها صرفا برای تعریف عملیات ریاضی در تایپ های خودتون استفاده میکنید مثلا کد زیر رو در نظر بگیرید(سی شارپ) :
public class Point {
public int x {get;set;}
public int y {get;set;}
}
حالا شما دو نقطه(آبجکت از کلاس پوینت دارید)
برای جمع دو نقطه میاید یه اوپراتور تعریف میکنید به شکل زیر :
public static Point Operator+(Point p1 , Point p2)
{
return new Point {x = p1.x + p2.x , y = p1.y + p2.y } ;
}
حالا همین کد رو بجای اینکه مستقیا در بدنه تعریف اوپراتور بنویسید میتونید در یک متد مجزا به این شکل بنویسید :
public static Point Add(Point p1 , Point p2)
{
return new Point {x = p1.x + p2.x , y = p1.y + p2.y } ;
}
و در اپراتور صرفا این متد رو صدا بزنید :
public static Point Operator+(Point p1 , Point p2){
return Add(p1,p2)
}
حالا چرا میایم توی دل اوپراتور از متد استفاده میکنیم ؟؟خب مگه مریضیم ؟؟ مستقیم بریم همون متد رو صدا بزنیم دیگه ؟؟
خوانایی بیشتر,درک راحت تر
کدوم یک از اینا خوندن و درکش راحت تره ؟ :
2*3 + 4
Math.sum(4,Math.Multiply(2,3))