• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

البحث في المنتدى

Showing results for tags 'methods'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 2 نتيجة

  1. هذا الكود مقتبس من كتاب مايكروسوفت Programming in C#. في هذا الكود فقط أود أن أتطرق إلى نقطة وهي أيّ (بتشديد الياء) التابعين أفضل من حيث البيانات (البرامترات) الممررة إليه؟ سأترك لك أولا وقت للتفكير،، //LISTING 1 Passing a complete customer to a method public Distance CalculateDistanceTo(Customer customer) {        Distance result = … // Some difficult calculation that uses customer.Address        return result; }   //LISTING 2 Passing only an address to a method public Distance CalculateDistanceTo(Address address) {        Distance result = … // Some difficult calculation that uses address        return result; } لكن إن أردت إشارات لتساعدك على الإختيار بنفسك فلك ذلك، سأطرح عليك بعض النقاط 1. أيّ الكودين يعتبر أوضح و أسهل للفهم من حيث البيانات المطلوبة لإجراء عملية حساب المسافة؟ 2. أيّ الكودين فيه سهولة في الصيانة مقارنة بالآخر؟ أو بمعنى آخر أي الكودين يمكننا استخدامه أكثر من الآخر دون إجراء تعديلات؟ مرة أخرى ركز على البيانات (البرامتر) الممرر لكلا التابعين. طبعا الإجابة على كلا السؤالين هو الكود الثاني. بالنسبة للسؤال الأول،، طبعا الكود الثاني أوضح وأسهل للفهم وذلك لأنه واضح من حيث متطلبات عمله فهو يطلب عنوان حتى يقوم بعملية حساب المسافة، في حين أن التابع الأول مبهم، فأنت ببساطة لا يمكنك استنباط أي البيانات التي يحتاجها التابع من الكائن من صنف Customer للعمل. بمعنى آخر لا تعلم أي البيانات المجودة داخل هذا الكائن من صنف Customer التي سوف يعتمد عليها في تقرير المسافة ربما يكون العنوان وقد يكون رمز المنطقة Postcode أو رمز الهاتف لتحديد المدينة أو… قد يتبادر إلى ذهنك وما المشكلة في ذلك؟ لنفترض أنك تريد حساب المسافة لكل الزبائن المعروضين في جدول للزبائن الذين أجروا عملية شراء خلال الشهر الماضي في أحد واجهات لتطبيقك الجميل. طبعا الجدول لن يحتوي جميع معلومات الزبائن وإنما يعرض فقط بعض المعلومات عنهم. عندما تريد أن تحسب المسافة لزبون معين ستضطر عندما تستخدم التابع الأول لتأمين معلومات الزبون كاملة من قاعدة البيانات قبل تمريرها للتابع الأول لتتم عملية الحساب، بينما التابع الثاني لا يتطلب منك سوى العنوان والذي في أغلب الظن قد يكون متوفر ولا تحتاج إلى الاستعلام عنه من قاعدة البيانات. على كل إن لم تقتنع فلا مشكلة فالسبب الثاني سيكون كفيل بتبيهك إلى أمر أكثر أهمية والذي ستخلص من خلاله إلى أن تصميم الكود الثاني هو الأفضل بلا منازع. بالنسبة للسؤال الثاني،، لنفترض بعد مدة من الزمن تم التعديل على الصنف Customer ليحتوي حقل جديد WorkAddress مالذي سوف يحدث؟! لن تكون قادرا على استخدام التابع الأول لحساب المسافة باستخدام الحقل الجديد WorkAddress. أليس كذلك؟! ومع ذلك إن ألححت بمقدرتك على استخدام التابع الأول سيتطلب منك تعديل التابع الأول حتى يتثنى لك حساب المسافة لكل من Address و WorkAddress. لن أتطرق إلى كيفية التعديل، إذا أنه ومع الشروع بالتعديل ستكتشف العديد من المشاكل الأخرى. في حين وبكل سهولة يمكنك حساب المسافة للحقل الجديد WorkAddress بتمريره كبرامتر إلىه. حالة أخرى توضح مدى المشاكل التي يمكن أن تحصل فقط جراء سوء تصميم التابع الأول. لنقل أننا أردنا استخدام التابع مع مشروع آخر أو مع صنف آخر مثل Student، مرة أخرى لا يمكنك استخدام التابع الأول حيث أن Customer غير Student وبالتالي سيتطلب إجراء تعديلات ليتلائم التابع الأول مع الصنف الجديد Student. بينما لو استخدمنا التابع الثاني لن نواجه أي من المشاكل السابقة وعلى العكس ستشعر بمتعة حسن تصميم التابع. الخلاصة: ان التابع الثاني أفضل من التابع الأول فهو سهل الفهم وأيضا لا يتطلب عملية تعديل على أقل تقدير للحالات آنفة الذكر.
  2. إنها أحد المزايا الرائعة التي تتمير بها لغة C# عن غيرها. ظهرت هذه الميزة أول مرة في الإصدار ( Dot Net 3.0 ) فما هي و ما الفائدة منها؟   نعلم كلنا كمبرمجين دوت نت اننا نستخدم أنماط بيانات و و مكتبات الـ .Net Framework و هناك الكثير من الكلاسات الأساسية التي نحب أن يكون فيها دوال تسهل علينا و توفر في حجم الكود المتكرر. طبعاً الكلام نفسه ينطبق على أي كلاس نستخدمه و يمكننا أن نوسعه و نضيف إليه دوال لاحقاً بنفس الطريقة, سأذكر هنا مثال بسيط للفهم:   جميعنا يعرف الكلاس String في C# الذي يملك بعض الدوال البسيطة, سنقوم بتوسعة هذا الكلاس بإضافة دالة جديدة غير موجودة فيه في الأصل و هي WordCount لحساب عدد الكلمات في السلسلة النصية    namespace ExtensionMethods{    public static class MyExtensions    {        public static int WordCount(this String str)        {            return str.Split(new char[] { ' ', '.', '?' },                             StringSplitOptions.RemoveEmptyEntries).Length;        }    }  }MyExtensions: اسم الكلاس الذي يحوي دالة التوسع أو دوال التوسع و هذا الاسم اختياري اختر أي اسم يعجبك ولن يؤثر ذلك على دمج الدالة في الكلاس الهدف.     WordCount: دالة التوسع المراد إضافتها إلى الكلاس في وقت التنفيذ. يجب أن تكون static.      this String: هذا البارامتر يشير إلى الكلاس الهدف و الكلمة المحجوزة this هنا ضرورية جدا.   Str: يمثل المتغير الذي من خلاله سيتم استدعاء دالة التوسع يعني لاحقاً ستكتب التالي لاستخدام ادالة التوسع:   String text = "We are in arab team website";Console.Write(text.WordCount());أتمنى أن أكون قد أفدتكم بمعلومة جديدة.   تحياتي