السبت، 3 مايو 2014

اساسيات Generic Class في سي شارب #C

احب ان اشارك مبادئ ال generic. في البداية سنتعلم ماهي المشكلة ثم سنقوم بحلها بأستخدام ال generic

وصف المشكلة
---------------
اولا نقوم بعمل ال class التالي:



class CompareClass
{
  public bool Compare(string x, string y)
    {
        if (x.Equals(y))
            return true;
        else
            return false;
    }
 public bool Compare(int x, int y)
    {
        if (x.Equals(y))
            return true;
        else
            return false;
    }
}

شرح الكود:

---------- 
١- لقد عملنا  باسم  CompareClass
٢- داخل الكلاس  عملنا دالتين مقارنة، الاولى لمقارنة السلاسل الحرفية  والاخرى لمقارنة الارقام int 
٣- هذا يعني ان الكلاس يحتوي على تحميل زائد method overloading

المشكلة

--------
الان اذا اردنا عمل مقارنة لنوع بيانات من النوع real او كائنات فأن الكود اعلاه لن يعمل وسنحتاج الى عمل دالات ذات تحميل زائد للبيانات المذكورة توا!
نستطيع حل هذه المشكلة عن طريق generic class

الحل:
--------
اعمل كلس محتويا على الكود التالي:
class CompareGenericClass<T>
{
    public bool Compare(T x, T y)
    {
        if (x.Equals(y))
            return true;
        else
            return false;
    }
}
فهم الكود
-----------
1- لقد قمنا بعمل كلاس CompareGenericClass والذي يحتوي على المدخل T اي ان الكلاس سيكون CompareGenericClass<T>
2- هنا T سيكون هو نوع البيانات
3- اذا اردنا مقارنة السلاسل الحرفية string فأننا سنعمل التالي:
CompareGenericClass<string> Ocompare = new CompareGenericClass<string>();bool stringResult=Ocompare.Compare("DEVESH""DEVESH");
4- نفس الشيء تقريبا اذا اردنا مقارنة الارقام int:
CompareGenericClass<int> oIntcompare = new CompareGenericClass<int>();         bool
integerresult=oIntcompare.Compare(5, 6);

تنفيذ البرنامج:
------------
الكود كاملاَ:
-----------
class CompareClass
{
    public bool Compare(string x, string y)
    {
        if (x.Equals(y))
        return true;
        else
        return false;
    }
    public bool Compare(int x, int y)
    {
        if (x.Equals(y))
        return true;
        else
        return false;
    }
}
class CompareGenericClass<T>
{
    public bool Compare(T x, T y)
    {
        if (x.Equals(y))
        return true;
        else
        return false;
    }
}
class Program
{
    static void Main(string[] args)
    {
        CompareClass obj = new CompareClass();
        bool intresult = obj.Compare(5, 7);
        Console.WriteLine("int comapre result:" + intresult);
        bool stringresult = obj.Compare("DEVESH""DEVESH");
        Console.WriteLine("string comapre result:" + stringresult);
        CompareGenericClass<string> Ocompare = new CompareGenericClass<string>();
        bool stringResult = Ocompare.Compare("DEVESH""DEVESH");
        Console.WriteLine("Generic string comapre result:" + stringResult);
        CompareGenericClass<int> oIntcompare = new CompareGenericClass<int>();
        bool integerresult = oIntcompare.Compare(5, 6);
        Console.WriteLine("Generic int comapre result:" + integerresult);
    }
 

الموضوع الاصلي:
-------------------

ليست هناك تعليقات:

إرسال تعليق