English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
شما میتوانید عملگرهای داخلی C# را تعریف مجدد یا بارگذاری کنید. بنابراین، برنامهنویسان میتوانند عملگرهای نوع تعریف شده کاربر را نیز استفاده کنند. بارگذاری عملگر یک تابع با نام خاص است که از کلیدواژه operator با پیروی از نماد عملگر تعریف شده. مانند سایر توابع، بارگذاری عملگر دارای نوع بازگشتی و لیست پارامترهاست.
مثلاً، به این تابع نگاه کنید:
العمليات العامة الثابتة Box operator+(Box b, Box c) { Box box = new Box(); طول box = طول b + طول c; عرض box = عرض b + عرض c; ارتفاع box = ارتفاع b + ارتفاع c; يعود box; }
این تابع برای بارگذاری عملگر جمع (+) برای کلاس تعریف شده کاربر Box پیادهسازی شده است. آن دو ویژگی Box را به هم اضافه میکند و یک Box جدید با ویژگیهای اضافه شده برمیگرداند.
برنامه زیر یک نمایش کامل از پیادهسازی است:
using System; namespace OperatorOvlApplication { class Box { private double length; // طول private double breadth; // عرض خاصة double ارتفاع; // الارتفاع العمليات العامة double getVolume() { يعود الطول * العرض * الارتفاع; } العمليات العامة void setLength(double len) { الطول = len; } العمليات العامة void setBreadth(double bre) { العرض = bre; } العمليات العامة void setHeight(double hei) { الارتفاع = hei; } // إعادة تعريف عمليات + لجمع اثنين من كائنات Box العمليات العامة الثابتة Box operator+(Box b, Box c) { Box box = new Box(); طول box = طول b + طول c; عرض box = عرض b + عرض c; ارتفاع box = ارتفاع b + ارتفاع c; يعود box; } } 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 است double volume = 0.0; // حجم // تفاصيل صندوق1 صندوق1.setLength(6.0); صندوق1.setBreadth(7.0); صندوق1.setHeight(5.0); // تفاصيل صندوق2 صندوق2.setLength(12.0); صندوق2.setBreadth(13.0); صندوق2.setHeight(10.0); // Box1 的体积 volume = Box1.getVolume(); Console.WriteLine("Box1 的体积: {0}", volume); // Box2 的体积 volume = Box2.getVolume(); Console.WriteLine("Box2 的体积: {0}", volume); // 把两个对象相加 Box3 = Box1 + Box2; // Box3 的体积 volume = Box3.getVolume(); Console.WriteLine(٢ٯ٤٨٩ ٤٨٩٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); Console.ReadKey(); } } }
عندما يتم تجميع وكود التنفيذ، سيتم إنتاج النتيجة التالية:
حجم Box1: 210 حجم Box2: 1560 حجم Box3: 5400
جدول زیر تواناییهای بارگذاری عملگر در C# را توضیح میدهد:
عملگر | شرح |
---|---|
+, -, !, ~, ++, -- | این عملگرهای یکانی یک عملگر دارند و قابل بارگذاری هستند. |
+, -, *, /, % | این عملگرهای دودویی دو عملگر دارند و قابل بارگذاری هستند. |
==, !=, <, >, <=, >= | این عملگرهای مقایسهای قابل بارگذاری هستند. |
&&, || | این عملگرهای منطقی شرطی نمیتوانند مستقیماً بارگذاری شوند. |
+=, -=, *=, /=, %= | این عملگرهای تخصیصی قابل بارگذاری نیستند. |
=, ., ?:, ->, new, is, sizeof, typeof | این عملگرها قابل بارگذاری نیستند. |
باستناد به بحث فوق، بگذارید مثال بالا را گسترش دهیم و عملگرهای بیشتری را بارگذاری کنیم:
using System; namespace OperatorOvlApplication { class Box { private double length; // طول private double breadth; // عرض خاصة double ارتفاع; // الارتفاع العمليات العامة double getVolume() { يعود الطول * العرض * الارتفاع; } العمليات العامة void setLength(double len) { الطول = len; } العمليات العامة void setBreadth(double bre) { العرض = bre; } العمليات العامة void setHeight(double hei) { الارتفاع = hei; } // إعادة تعريف عمليات + لجمع اثنين من كائنات Box العمليات العامة الثابتة Box operator+(Box b, Box c) { Box box = new Box(); طول box = طول b + طول c; عرض box = عرض b + عرض c; ارتفاع box = ارتفاع b + ارتفاع c; يعود box; } العمليات العامة الثابتة bool operator==(Box lhs, Box rhs) { bool status = false; إذا كان طول اليسار متساوي مع طول اليمين وأعلى اليسار متساوي مع أعلى اليسار وعرض اليسار متساوي مع عرض اليمين) { status = true; } return status; } العمليات العامة الثابتة bool operator!=(Box lhs, Box rhs) { bool status = false; إذا كان طول اليسار غير متساوي مع طول اليمين أو أعلى اليسار غير متساوي مع أعلى اليسار أو عرض اليسار غير متساوي مع عرض اليمين) { status = true; } return status; } العمليات العامة الثابتة bool operator<(Box lhs, Box rhs) { bool status = false; إذا كان طول اليسار أقل من طول اليمين وأعلى اليسار وعرض اليسار أقل من عرض اليمين) { status = true; } return status; } العمليات العامة الثابتة bool operator>(Box lhs, Box rhs) { bool status = false; إذا كان طول اليسار أكبر من طول اليمين وأعلى اليسار أقل من أعلى اليمين > rhs.height && lhs.breadth > rhs.breadth) { status = true; } return status; } public static bool operator <=(صندوق lhs, صندوق rhs) { bool status = false; if (lhs.length <= rhs.length && lhs.height <= rhs.height && lhs.breadth <= rhs.breadth) { status = true; } return status; } public static bool operator >=(صندوق lhs, صندوق rhs) { bool status = false; if (lhs.length >= rhs.length && lhs.height >= rhs.height && lhs.breadth >= rhs.breadth) { status = true; } return status; } public override string ToString() { return String.Format("({0}, {1}, {2})", length, breadth, height); } } class Tester { static void Main(string[] args) { صندوق Box1 = new صندوق(); // إعلان Box1، نوعه صندوق صندوق Box2 = new صندوق(); // إعلان Box2، نوعه صندوق صندوق Box3 = new صندوق(); // إعلان Box3، نوعه صندوق صندوق Box4 = new صندوق(); double volume = 0.0; // الحجم // تفاصيل صندوق1 صندوق1.setLength(6.0); صندوق1.setBreadth(7.0); صندوق1.setHeight(5.0); // تفاصيل صندوق2 صندوق2.setLength(12.0); صندوق2.setBreadth(13.0); صندوق2.setHeight(10.0); // استخدم "ToString()" المعدل لعرض صندوقين Console.WriteLine("صندوق1: {0}", صندوق1.ToString()); Console.WriteLine("Box2: {0}", Box2.ToString()); // Box1 的体积 volume = Box1.getVolume(); Console.WriteLine("Box1 的体积: {0}", volume); // Box2 的体积 volume = Box2.getVolume(); Console.WriteLine("Box2 的体积: {0}", volume); // 把两个对象相加 Box3 = Box1 + Box2; Console.WriteLine("Box3: {0}", Box3.ToString()); // Box3 的体积 volume = Box3.getVolume(); Console.WriteLine(٢ٯ٤٨٩ ٤٨٩٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); //٢ٯ٤٨٩ ٤٨٩٢ٯ٤٨٩ if ٢ٯ٤٨٩ ٢ٯ ٤٨٩); Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); else Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); if ٢ٯ٤٨٩ ٢ٯ ٤٨٩); Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); else Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); if ٢ٯ٤٨٩ ٢ٯ ٤٨٩); Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); else Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); if ٢ٯ٤٨٩ ٢ٯ ٤٨٩); Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); else Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); if ٢ٯ٤٨٩ ٢ٯ ٤٨٩); Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩); else Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩); ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩ ٢ٯ ٤٨٩; if ٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩); Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩٤٨٩٤٨٩); else Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩٤٨٩٤٨٩); Console.ReadKey(); } } }
عندما يتم تجميع وكود التنفيذ، سيتم إنتاج النتيجة التالية:
Box1: (6, 7, 5) Box2: (12, 13, 10) حجم Box1: 210 حجم Box2: 1560 Box3: (18, 20, 15) حجم Box3: 5400 Box1 أقل بكثير من Box2 Box1 أقل من Box2 Box1 أقل بكثير أو يساوي Box2 Box1 أقل أو يساوي Box2 Box1 غير يساوي Box2 Box3 يساوي Box4