C # المشغل إثقال
يمكنك إعادة تعريف أو تجاوز المدمج في C # المشغل. لذلك، يمكن للمبرمجين استخدام مشغلي نوع المعرفة من قبل المستخدم. شركات مثقلة هي وجود اسم وظيفة خاصة، يتبعه تحديد رمز المشغلالمشغل الكلمة.وغيرها من المهام، ومشغلي زائد لديها نوع عودة والقائمة المعلمة.
على سبيل المثال، والنظر في وظيفة التالية:
العام المشغل صندوق ثابت + (صندوق ب، ص ج) { مربع مربع = مربع جديد ()؛ box.length = b.length + c.length. box.breadth = b.breadth + c.breadth. box.height = b.height + c.height. مربع العودة؛ }
وظيفة أعلاه هو صندوق فئة المعرفة من قبل المستخدم ينفذ عامل الجمع (+). فمن يتم إضافة خاصية كائنين مربع، والكائنات صندوق عودة المضافة.
المشغل الحمولة الزائدة لتحقيق
يوضح البرنامج التالي التنفيذ الكامل:
باستخدام نظام. مساحة OperatorOvlApplication { الطبقة صندوق { طول الخاص مزدوج؛ // طول اتساع المزدوج الخاص؛ // الإرتفاع المزدوج الخاص؛ // الارتفاع العامة مزدوجة getVolume () { طول عودة * اتساع * الارتفاع. } setLength الفراغ الجمهور (ليون مزدوج) { طول = ليون. } setBreadth الفراغ الجمهور (الف مزدوج) { اتساع = الف. } setHeight الفراغ الجمهور (التعليم العالي مزدوج) { ارتفاع = مؤسسات التعليم العالي. } // مثقله + مشغل لمجموع مربع كائنين العام المشغل صندوق ثابت + (صندوق ب، ص ج) { مربع مربع = مربع جديد ()؛ box.length = b.length + c.length. box.breadth = b.breadth + c.breadth. box.height = b.height + c.height. مربع العودة؛ } } اختبار الطبقة { ساكنة باطلة الرئيسية (سلسلة [] وسائط) { مربع Box1 = جديد مربع ()؛ // إعلان Box1، نوع مربع مربع Box2 = جديد مربع ()؛ // إعلان Box2، نوع مربع مربع Box3 = جديد مربع ()؛ // إعلان Box3، نوع مربع حجم مزدوج = 0.0؛ // // Box1 حجم بالتفصيل Box1.setLength (6.0)؛ Box1.setBreadth (7.0)؛ Box1.setHeight (5.0)؛ // Box2 تفاصيل Box2.setLength (12.0)؛ Box2.setBreadth (13.0)؛ Box2.setHeight (10.0)؛ // حجم Box1 من حجم = Box1.getVolume ()؛ Console.WriteLine ( "حجم Box1: {0}"، وحدة التخزين). // حجم Box2 من حجم = Box2.getVolume ()؛ Console.WriteLine ( "حجم Box2: {0}"، وحدة التخزين). وأضاف // إن الكائنين Box3 = Box1 + Box2. // حجم Box3 من حجم = Box3.getVolume ()؛ Console.WriteLine ( "حجم Box3: {0}"، وحدة التخزين). Console.ReadKey ()؛ } } }
عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:
حجم Box1: 210 حجم Box2: 1560 حجم Box3: 5400
مشغلي يمكن إعادة تحميل وغير مثقلة
يصف الجدول التالي قدرة الحمولة الزائدة C # المشغل:
运算符 | 描述 |
---|---|
+, -, !, ~, ++, -- | 这些一元运算符只有一个操作数,且可以被重载。 |
+, -, *, /, % | 这些二元运算符带有两个操作数,且可以被重载。 |
==, !=, <, >, <=, >= | 这些比较运算符可以被重载。 |
&&, || | 这些条件逻辑运算符不能被直接重载。 |
+=, -=, *=, /=, %= | 这些赋值运算符不能被重载。 |
=, ., ?:, ->, new, is, sizeof, typeof | 这些运算符不能被重载。 |
أمثلة
للاطلاع على المناقشة المذكورة أعلاه، دعونا تمديد المثال أعلاه، ومشغلي أكثر مثقلة:
باستخدام نظام. مساحة OperatorOvlApplication { الطبقة صندوق { طول الخاص مزدوج؛ // طول اتساع المزدوج الخاص؛ // الإرتفاع المزدوج الخاص؛ // الارتفاع العامة مزدوجة getVolume () { طول عودة * اتساع * الارتفاع. } setLength الفراغ الجمهور (ليون مزدوج) { طول = ليون. } setBreadth الفراغ الجمهور (الف مزدوج) { اتساع = الف. } setHeight الفراغ الجمهور (التعليم العالي مزدوج) { ارتفاع = مؤسسات التعليم العالي. } // مثقله + مشغل لمجموع مربع كائنين العام المشغل صندوق ثابت + (صندوق ب، ص ج) { مربع مربع = مربع جديد ()؛ box.length = b.length + c.length. box.breadth = b.breadth + c.breadth. box.height = b.height + c.height. مربع العودة؛ } العام ثابت عامل منطقي == (LHS بالغرف، يمين مربع) { وضع منطقي = كاذبة؛ إذا (lhs.length == rhs.length && lhs.height == rhs.height && Lhs.breadth == rhs.breadth) { الحالة = صحيح. } عودة الوضع؛ } العام ثابت عامل منطقي! = (LHS بالغرف، يمين مربع) { وضع منطقي = كاذبة؛ إذا (lhs.length! = rhs.length || lhs.height! = rhs.height || Lhs.breadth! = Rhs.breadth) { الحالة = صحيح. } عودة الوضع؛ } العام مشغل منطقي ثابت <(LHS بالغرف، يمين مربع) { وضع منطقي = كاذبة؛ إذا (lhs.length <rhs.length && lhs.height <Rhs.height && lhs.breadth <rhs.breadth) { الحالة = صحيح. } عودة الوضع؛ } العام مشغل منطقي ثابت> (LHS بالغرف، يمين مربع) { وضع منطقي = كاذبة؛ إذا (lhs.length> rhs.length && lhs.height > Rhs.height && lhs.breadth> rhs.breadth) { الحالة = صحيح. } عودة الوضع؛ } العام مشغل منطقي ثابت <= (LHS بالغرف، يمين مربع) { وضع منطقي = كاذبة؛ إذا (lhs.length <= rhs.length && lhs.height <= Rhs.height && lhs.breadth <= rhs.breadth) { الحالة = صحيح. } عودة الوضع؛ } العام مشغل منطقي ثابت> = (LHS بالغرف، يمين مربع) { وضع منطقي = كاذبة؛ إذا (lhs.length> = rhs.length && lhs.height > = Rhs.height && lhs.breadth> = rhs.breadth) { الحالة = صحيح. } عودة الوضع؛ } ToString سلسلة تجاوز العام () { العودة String.Format ( "({0}، {1}، {2})"، طول، عرض، ارتفاع)؛ } } اختبار الطبقة { ساكنة باطلة الرئيسية (سلسلة [] وسائط) { مربع Box1 = جديد مربع ()؛ // إعلان Box1، نوع مربع مربع Box2 = جديد مربع ()؛ // إعلان Box2، نوع مربع مربع Box3 = جديد مربع ()؛ // إعلان Box3، نوع مربع مربع Box4 = جديد مربع ()؛ حجم مزدوج = 0.0؛ // // Box1 حجم بالتفصيل Box1.setLength (6.0)؛ Box1.setBreadth (7.0)؛ Box1.setHeight (5.0)؛ // Box2 تفاصيل Box2.setLength (12.0)؛ Box2.setBreadth (13.0)؛ Box2.setHeight (10.0)؛ // استخدم ToString زائد () يعرض صندوقين Console.WriteLine ( "Box1: {0}"، Box1.ToString ())؛ Console.WriteLine ( "Box2: {0}"، Box2.ToString ())؛ // حجم Box1 من حجم = Box1.getVolume ()؛ Console.WriteLine ( "حجم Box1: {0}"، وحدة التخزين). // حجم Box2 من حجم = Box2.getVolume ()؛ Console.WriteLine ( "حجم Box2: {0}"، وحدة التخزين). وأضاف // إن الكائنين Box3 = Box1 + Box2. Console.WriteLine ( "Box3: {0}"، Box3.ToString ())؛ // حجم Box3 من حجم = Box3.getVolume ()؛ Console.WriteLine ( "حجم Box3: {0}"، وحدة التخزين). // مقارنة مربعات إذا (Box1> Box2) Console.WriteLine ( "Box1 أكبر من Box2")؛ آخر Console.WriteLine ( "Box1 ليس أكثر من Box2")؛ إذا (Box1 <Box2) Console.WriteLine ( "Box1 أقل من Box2")؛ آخر Console.WriteLine ( "Box1 لا يقل Box2")؛ إذا (Box1> = Box2) Console.WriteLine ( "Box1 أكبر من أو يساوي Box2")؛ آخر Console.WriteLine ( "Box1 ليس أكبر من أو يساوي Box2")؛ إذا (Box1 <= Box2) Console.WriteLine ( "Box1 أقل Box2")؛ آخر Console.WriteLine ( "Box1 لا يقل Box2")؛ إذا (Box1! = Box2) Console.WriteLine ( "Box1 لا يساوي Box2")؛ آخر Console.WriteLine ( "Box1 يساوي Box2")؛ Box4 = Box3. إذا (Box3 == Box4) Console.WriteLine ( "Box3 يساوي Box4")؛ آخر Console.WriteLine ( "Box3 لا يساوي Box4")؛ 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