الخميس، 2 يناير 2014

برمجة متقدمة سي شارب - الفهرسة C# - Indexers

برمجة متقدمة سي شارب - الفهرسة C# - Indexers

برمجة متقدمة سي شارب - الفهرسة C# - Indexers


ماهي الفهرسة Indexers؟

 الفهارس Indexers تسمح للكائنات لتفهرس مثل المصفوفات. عندما يتم تعريف الفئة (الكلاس) ك  الفهرسة Indexers فانها تسلك سلوك المصفوفات الافتراضية virtual. وعندها يمكن الوصول للفهرس باستخدام مشغل المصفوفة([]).

الصيغة العامة ل الفهرسة Indexers


element-type this[int index] 
{
   // موصل القراءة.
   get 
   {
      // يعود بالقيمة حسب الفهرس المعطى
   }

   // موصل الكتابة.
   set 
   {
      // يتم اسناد القيم حسب الفهرس المعطى
   }
}


استخدام  الفهرسة Indexers

التصريح عن الفهرسة أو المفهرسات يشبه التصريح عن الخصائص بخاصتين القراءة والكتابة get,set.ولكن الخصائص تعيد وتكتب للمتغيرات بينما المفهرسات فأنها تعيد مجموعة قيم من مثيلات الكائن . بمعنى انها يجزء الكائن لعدة مجموعات بيانات صغير ويفهرس كل مجموعة.
يتم تعريف الخصائص عن طريق تسميتها. بينما المفهرسات يتم عن طريق الكلمة المحجوزة this.

مثال المفهرسات أو  الفهرسة Indexers

using System;
namespace IndexerApplication
{
   class IndexedNames
   {
      private string[] namelist = new string[size];
      static public int size = 10;
      public IndexedNames()
      {
         for (int i = 0; i < size; i++)
         namelist[i] = "N. A.";
      }
      public string this[int index]
      {
         get
         {
            string tmp;

            if( index >= 0 && index <= size-1 )
            {
               tmp = namelist[index];
            }
            else
            {
               tmp = "";
            }

            return ( tmp );
         }
         set
         {
            if( index >= 0 && index <= size-1 )
            {
               namelist[index] = value;
            }
         }
      }

      static void Main(string[] args)
      {
         IndexedNames names = new IndexedNames();
         names[0] = "Zara";
         names[1] = "Riz";
         names[2] = "Nuha";
         names[3] = "Asif";
         names[4] = "Davinder";
         names[5] = "Sunil";
         names[6] = "Rubic";
         for ( int i = 0; i < IndexedNames.size; i++ )
         {
            Console.WriteLine(names[i]);
         }
         Console.ReadKey();
      }
   }
}

ناتج المثال المفهرسات أو  الفهرسة Indexers

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.


الحمل الزائد OverLoad المفهرسات أو  الفهرسة Indexers

يمكن  ان يمرر للمفهرسات العديد من الباراميترات بحيث يتم استدعاء المفهرسة حسب الباراميترات الممررة لها.

مثال الحمل الزائد overload  المفهرسات أو  الفهرسة Indexers


using System;
namespace IndexerApplication
{
   class IndexedNames
   {
      private string[] namelist = new string[size];
      static public int size = 10;
      public IndexedNames()
      {
         for (int i = 0; i < size; i++)
         {
          namelist[i] = "N. A.";
         }
      }
      public string this[int index]
      {
         get
         {
            string tmp;

            if( index >= 0 && index <= size-1 )
            {
               tmp = namelist[index];
            }
            else
            {
               tmp = "";
            }

            return ( tmp );
         }
         set
         {
            if( index >= 0 && index <= size-1 )
            {
               namelist[index] = value;
            }
         }
      }
      public int this[string name]
      {
         get
         {
            int index = 0;
            while(index < size)
            {
               if (namelist[index] == name)
               {
                return index;
               }
               index++;
            }
            return index;
         }

      }

      static void Main(string[] args)
      {
         IndexedNames names = new IndexedNames();
         names[0] = "Zara";
         names[1] = "Riz";
         names[2] = "Nuha";
         names[3] = "Asif";
         names[4] = "Davinder";
         names[5] = "Sunil";
         names[6] = "Rubic";
         //using the first indexer with int parameter
         for (int i = 0; i < IndexedNames.size; i++)
         {
            Console.WriteLine(names[i]);
         }
         //using the second indexer with the string parameter
         Console.WriteLine(names["Nuha"]);
         Console.ReadKey();
      }
   }
}

ناتج الحمل الزائد overload  المفهرسات أو  الفهرسة Indexers


Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.
2






Ahmed Ata Almahallawi
 Freelancer
IT Help Desk,
SEO experience,PHP,C#,ASPX,SQL
Al alami st
gaza -jabaliaGaza Strip
Palestine
DOB: 05/10/1984
by +Ahmed Almahallawi 
2/1/2014

التسميات: