![]() |
|
Tips and tricks - رقم 2 - المعامل Equals والمعامل Clone - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم مقالات C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=177) +--- الموضوع : Tips and tricks - رقم 2 - المعامل Equals والمعامل Clone (/showthread.php?tid=4742) |
Tips and tricks - رقم 2 - المعامل Equals والمعامل Clone - RaggiTech - 01-10-12 كاتب الموضوع : أحمد جمال
بسم الله الرحمن الرحيم . السلام عليكم ورحمة الله وبركاته . يستخدم اغلب المبرمجين المعامل = أو المعامل == في C# للمقارنة ، ابسط امثلة ذلك : كود : [FONT=Tahoma]if (x==y)[/FONT]أو VB.net : كود : [FONT=Tahoma]if x=y Then[/FONT]تكون القيمة المحصلة True في حالة التساوي فيما تكون False في حالة عدم التساوي ، ونقصد بالتساوي هنا التساوي الكامل مثلاً : 5=5 او 7=7 أو "Ahmed"="Ahmed" ، ولكن هذا ينطبق فقط على الانواع البسيطة . ** الأنواع البسيطة هي الانوع مثل Int , Long , String وغيرها ... سنواصل شرحنا مع المثال التالي ايضاً - سأشرح من خلال C# وينطبق نفس الامر على VB.net : كود : [FONT=Tahoma][color=#0000ff]string[/color] a = [color=#0000ff]new[/color] [color=#0000ff]string[/color]([color=#0000ff]new[/color] [color=#0000ff]char[/color][] { [color=#a31515]'h'[/color], [color=#a31515]'e'[/color], [color=#a31515]'l'[/color], [color=#a31515]'l'[/color], [color=#a31515]'o'[/color] });[/FONT]في هذه الحالة ستظل النتيجة True ايضاً ، ولكن ماذا لو اكملنا الكود بالأسطر التالية : كود : [FONT=Tahoma][color=#0000ff]object[/color] c = a;[/FONT]السطر السابق سيخيب ظنك للاسف ، لإن الناتج سيكون False ، الحل في هذه الحالة باستخدام المعامل Equals : كود : [FONT=Tahoma]Console.WriteLine (c.Equals(d));[/FONT]استخدام آخر للمعامل Equals للمقارنة بين ال Structs مثلاً ، لنفترض المثال التالي : كود : [FONT=Tahoma]struct car[/FONT]والآن ، لو قمنا بتعريف المتغيرات التالية : كود : [FONT=Tahoma]Car x = new Car();[/FONT]ما هو الناتج الذي تتوقعه ، المفترض ان تكون الرسالة المطبوعة هي True ؟؟؟ للاسف هي حتى ليست False لإن هذا سيعطيك خطأ . الحل الصحيح هو باستخدام المعامل Equals بالطريقة التالية : كود : [FONT=Tahoma][color=#2b91af]Console[/color].WriteLine (x.Equals(y));[/FONT]في حالة تعريف Classes ، يمكن استخدام == ايضاً بالشكل التالي : كود : [COLOR=#2b91af]أو Equals كما في المثال السابق ، هل تعرف لماذا يكون الناتج دائماً True ؟ الاجابة المنطقية لهذا الموضوع هي أنك ستخبرني ان الكائنان يشيران لنفس المكان في الذاكرة لذا كان الناتج True بالشكل التالي : وهذا صحيح ، لنفترض المثال التالي : كود : [FONT=Tahoma][color=#2b91af]Car[/color] x = [color=#0000ff]new[/color] [color=#2b91af]Car[/color]();[/FONT]ستكون النتيجة هي False ... برغم ان الخصائص الداخلية لهما واحدة ، الحل بكتابة دالة بالشكل التالي : كود : [FONT=Tahoma][color=#0000ff]bool[/color] isthesame([color=#2b91af]Car[/color] c1,[color=#2b91af]Car[/color] c2)[/FONT]سنواصل ... Tips and tricks - رقم 2 - المعامل Equals والمعامل Clone - RaggiTech - 01-10-12 في الجزء الاول من درسنا السابق قمنا بكتابة الكود التالي : كود : [FONT=Tahoma]Car x = new Car();[/FONT]كود : [color=#2b91af][COLOR=#2b91af][FONT=Tahoma]Car[/FONT][/color][FONT=Tahoma][color=#000000] x = [/color][color=#0000ff]new[/color][color=#2b91af]Car[/color][color=#000000]();[/color][/FONT]لكن ماذا لو كنا نرغب في عمل نسخة جديدة من المتغير ؟ في هذه الحالة نستخدم مبدأ Clone بالشكل التالي : كود : [color=#2b91af][FONT=Tahoma]Car[/FONT][/color][FONT=Tahoma] doCopy([color=#2b91af]Car[/color] c1)[/FONT]والله الموفق ... والسلام عليكم ورحمة الله وبركاته ... |