برمجة متقدمة سي شارب ماهو العام C# - Generics

 ماهو العام C# - Generics

C# - Generics


 ماهو العام Generics ؟

تسمح لك بتأخير تخصيص نوع البيانات لعناصر البرنامج في الفئة أو الدالة .حتي يتم استخدامها في البرنامج. بمعنى أخر ان الفئة العام تسمح لك بإنشاء أي نوع من أنواع البيانات.
يمكنك كتابة مواصفات للفئة  والدالة مع استبدال الباراميترات  لنوع البيانات .عندما يصادف المترجم مشيد للفئة أو استدعاء دالة ، فإنه يولد كود لمعالجة نوع البيانات المحددة. وهذا مثال بسيط يساعد في فهم  العام :

مثال على العام Generics

using System;
using System.Collections.Generic;

namespace GenericApplication
{
    public class MyGenericArray<T>
    {
        private T[] array;
        public MyGenericArray(int size)
        {
            array = new T[size + 1];
        }
        public T getItem(int index)
        {
            return array[index];
        }
        public void setItem(int index, T value)
        {
            array[index] = value;
        }
    }
           
    class Tester
    {
        static void Main(string[] args)
        {
            //declaring an int array
            MyGenericArray intArray = new MyGenericArray(5);
            //setting values
            for (int c = 0; c < 5; c++)
            {
                intArray.setItem(c, c*5);
            }
            //retrieving the values
            for (int c = 0; c < 5; c++)
            {
                Console.Write(intArray.getItem(c) + " ");
            }
            Console.WriteLine();
            //declaring a character array
            MyGenericArray charArray = new MyGenericArray(5);
            //setting values
            for (int c = 0; c < 5; c++)
            {
                charArray.setItem(c, (char)(c+97));
            }
            //retrieving the values
            for (int c = 0; c< 5; c++)
            {
                Console.Write(charArray.getItem(c) + " ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

ناتج مثال العام Generics

0 5 10 15 20
a b c d e


مميزات العام Generics

  • فإنه يساعدك على تحقيق أقصى قدر من إعادة استخدام التعليمات البرمجية،وسلامة نوع البيانات ، والأداء.
  • مكنك إنشاء فئات مجموعة عامة  Generics. تحتوي على مكتبة NET فئة الإطار. وعدة فئات مجموعة عامة  Generics جديدة في فضاء الأسماء System.Collections.Generic. يمكنك استخدام هذه فئات المجموعة العام بدلا من الفئات في فضاء الأسماء System.Collections.
  • يمكنك إنشاء  واجهات عامة Generics الخاصة بك،  والفئات ، والدوال، والأحداث والتفويض.
  • يمكنك إنشاء فئات عامة Generics مقيدة لتمكين الوصول إلى الدوال على أنواع بيانات معينة.
  • يمكنك الحصول على معلومات حول أنواع تستخدم في نوع بيانات عامة Generics  في وقت التشغيل عن طريق الانعكاس Reflection.

الدوال العامة Generic Methods

مثال على الدوال العامة


using System;
using System.Collections.Generic;

namespace GenericMethodAppl
{
    class Program
    {
        static void Swap<T>(ref T lhs, ref T rhs)
        {
            T temp;
            temp = lhs;
            lhs = rhs;
            rhs = temp;
        }
        static void Main(string[] args)
        {
            int a, b;
            char c, d;
            a = 10;
            b = 20;
            c = 'I';
            d = 'V';

            //display values before swap:
            Console.WriteLine("Int values before calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values before calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);

            //call swap
            Swap(ref a, ref b);
            Swap(ref c, ref d);

            //display values after swap:
            Console.WriteLine("Int values after calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values after calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);
            Console.ReadKey();
        }
    }
}

ناتج الدوال العامة Generic Methods

Int values before calling swap:
a = 10, b = 20
Char values before calling swap:
c = I, d = V
Int values after calling swap:
a = 20, b = 10
Char values after calling swap:
c = V, d = I

مثال على التفويض العام Generic Delegates

delegate T NumberChanger<T>(T n);

Generics مثال على التفويض العام 

using System;
using System.Collections.Generic;

delegate T NumberChanger<T>(T n);
namespace GenericDelegateAppl
{
    class TestDelegate
    {
        static int num = 10;
        public static int AddNum(int p)
        {
            num += p;
            return num;
        }

        public static int MultNum(int q)
        {
            num *= q;
            return num;
        }
        public static int getNum()
        {
            return num;
        }

        static void Main(string[] args)
        {
            //create delegate instances
            NumberChanger nc1 = new NumberChanger(AddNum);
            NumberChanger nc2 = new NumberChanger(MultNum);
            //calling the methods using the delegate objects
            nc1(25);
            Console.WriteLine("Value of Num: {0}", getNum());
            nc2(5);
            Console.WriteLine("Value of Num: {0}", getNum());
            Console.ReadKey();
        }
    }
}

ناتج مثال التفويض Generics

Value of Num: 35
Value of Num: 175


Ahmed Ata Almahallawi
Freelancer
IT Help Desk,
SEO experience,PHP,C#,ASPX,SQL
Al alami st
Gaza -jabaliaGaza Strip
Palestine
Marital Status: Single 
DOB: 05/10/1984

1/2/2014