C# – اضافه بار اپراتور (Operator Overloading)
در C#، میتوانید اکثر اپراتورهای پیشفرض را دوباره تعریف کنید یا “overload” کنید. این به شما اجازه میدهد تا اپراتورها را با انواع تعریف شده توسط کاربر نیز استفاده کنید. اپراتورهای overload شده توابعی با نامهای خاص هستند که با کلمه کلیدی operator
به دنبال نماد اپراتور مورد نظر تعریف میشوند. مشابه هر تابع دیگر، یک اپراتور overload شده نیز دارای نوع بازگشتی و لیست پارامترها است.
مثال Overloading اپراتور + برای کلاس Box
در زیر نحوه پیادهسازی اپراتور +
برای یک کلاس تعریف شده توسط کاربر Box (کلاس جعبه) آورده شده است:
public static Box operator+ (Box b, Box c) {
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
این تابع اپراتور +
را برای کلاس Box پیادهسازی میکند. این تابع ویژگیهای دو شیء Box را با هم جمع کرده و یک شیء Box جدید را برمیگرداند.
پیادهسازی Overloading اپراتورها
در برنامه زیر، پیادهسازی کامل اپراتور +
و مقایسه برای کلاس Box (کلاس جعبه) را مشاهده میکنید:
using System;
namespace OperatorOvlApplication {
class Box { // کلاس جعبه
private double length; // طول جعبه
private double breadth; // عرض جعبه
private double height; // ارتفاع جعبه
public double getVolume() {
return length * breadth * height;
}
public void setLength(double len) {
length = len;
}
public void setBreadth(double bre) {
breadth = bre;
}
public void setHeight(double hei) {
height = hei;
}
// Overload اپراتور + برای جمع دو شیء Box
public static Box operator+ (Box b, Box c) {
Box box = new Box();
box.length = b.length + c.length;
box.breadth = b.breadth + c.breadth;
box.height = b.height + c.height;
return box;
}
// Overload اپراتور == برای مقایسه دو شیء Box
public static bool operator == (Box lhs, Box rhs) {
bool status = false;
if (lhs.length == rhs.length && lhs.height == rhs.height
&& lhs.breadth == rhs.breadth) {
status = true;
}
return status;
}
// Overload اپراتور != برای مقایسه نابرابری دو شیء Box
public static bool operator !=(Box lhs, Box rhs) {
bool status = false;
if (lhs.length != rhs.length || lhs.height != rhs.height ||
lhs.breadth != rhs.breadth) {
status = true;
}
return status;
}
// Overload اپراتور < برای مقایسه کمتر بودن دو شیء Box
public static bool operator <(Box lhs, Box rhs) {
bool status = false;
if (lhs.length < rhs.length && lhs.height < rhs.height
&& lhs.breadth < rhs.breadth) {
status = true;
}
return status;
}
// Overload اپراتور > برای مقایسه بزرگتر بودن دو شیء Box
public static bool operator >(Box lhs, Box rhs) {
bool status = false;
if (lhs.length > rhs.length && lhs.height >
rhs.height && lhs.breadth > rhs.breadth) {
status = true;
}
return status;
}
// Overload اپراتور <= برای مقایسه کمتر یا مساوی بودن دو شیء Box
public static bool operator <=(Box lhs, Box rhs) {
bool status = false;
if (lhs.length <= rhs.length && lhs.height
<= rhs.height && lhs.breadth <= rhs.breadth) {
status = true;
}
return status;
}
// Overload اپراتور >= برای مقایسه بزرگتر یا مساوی بودن دو شیء Box
public static bool operator >=(Box lhs, Box rhs) {
bool status = false;
if (lhs.length >= rhs.length && lhs.height
>= rhs.height && lhs.breadth >= rhs.breadth) {
status = true;
}
return status;
}
// Overload متد ToString برای نمایش اطلاعات جعبه
public override string ToString() {
return String.Format("({0}, {1}, {2})", length, breadth, height);
}
}
class Tester {
static void Main(string[] args) {
Box Box1 = new Box(); // اعلام Box1 از نوع Box
Box Box2 = new Box(); // اعلام Box2 از نوع Box
Box Box3 = new Box(); // اعلام Box3 از نوع Box
Box Box4 = new Box();
double volume = 0.0; // ذخیره حجم جعبه
// مشخصات جعبه 1
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// مشخصات جعبه 2
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// نمایش جعبهها با استفاده از متد ToString:
Console.WriteLine("Box 1: {0}", Box1.ToString());
Console.WriteLine("Box 2: {0}", Box2.ToString());
// حجم جعبه 1
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}", volume);
// حجم جعبه 2
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);
// افزودن دو شیء به شرح زیر:
Box3 = Box1 + Box2;
Console.WriteLine("Box 3: {0}", Box3.ToString());
// حجم جعبه 3
volume = Box3.getVolume();
Console.WriteLine("Volume of Box3 : {0}", volume);
// مقایسه جعبهها
if (Box1 > Box2)
Console.WriteLine("Box1 is greater than Box2");
else
Console.WriteLine("Box1 is not greater than Box2");
if (Box1 < Box2)
Console.WriteLine("Box1 is less than Box2");
else
Console.WriteLine("Box1 is not less than Box2");
if (Box1 >= Box2)
Console.WriteLine("Box1 is greater or equal to Box2");
else
Console.WriteLine("Box1 is not greater or equal to Box2");
if (Box1 <= Box2)
Console.WriteLine("Box1 is less or equal to Box2");
else
Console.WriteLine("Box1 is not less or equal to Box2");
if (Box1 != Box2)
Console.WriteLine("Box1 is not equal to Box2");
else
Console.WriteLine("Box1 is equal to Box2");
Box4 = Box3;
if (Box3 == Box4)
Console.WriteLine("Box3 is equal to Box4");
else
Console.WriteLine("Box3 is not equal to Box4");
Console.ReadKey();
}
}
}
این کد نحوه پیادهسازی اپراتورهای مختلف و استفاده از آنها را در کلاس Box (کلاس جعبه) نشان میدهد.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام