آشنایی با Delegate ، Interface ، متد و کلاسهای عمومی (Generics Classes) در سی شارپ

سه شنبه 12 خرداد 1394

در این مقاله به بررسی کلیات کلاس، متدها، delegates و رابط ها در برنامه نویسی #C بپردازیم. کلیات به شما این امکان را می دهند که در تشخیص نوع داده عناصر برنامه نویسی در یک کلاس یا متد تا زمانی که در برنامه مورد استفاده قرار گیرند تاخیر ایجاد کنید. به عبارت دیگر، کلیات به شما اجازه نوشتن یک کلاس یا متد را می دهد تا بتواند با انواع داده اجرا شود.

آشنایی با Delegate ، Interface ، متد و کلاسهای عمومی  (Generics Classes) در سی شارپ

در این مقاله به بررسی کلیات کلاس، متدها، delegatesو رابط ها در برنامه نویسی C# بپردازیم.

کلیات(Generics) به شما این امکان را می دهند که در تشخیص نوع داده عناصر برنامه نویسی در یک کلاس یا متد تا زمانی که در برنامه مورد استفاده قرار گیرند تاخیر ایجاد کنید. به عبارت دیگر، کلیات به شما اجازه نوشتن یک کلاس یا متد را می دهد تا بتواند با انواع داده اجرا شود.

شما برای انواع داده با پارامترهای جایگزین، خصوصیاتی برای کلاس یا متد می نویسید. وقتی که Compiler با یک سازنده(constructor) مواجه می شود، برای کلاس ها و متدها یک تابع فراخوانی می کند که آن تابع یک کد برای مدیریت نوع داده های خاص ایجاد می کند.

کلاس ها و متدهای عمومی به صورتی که قابل استفاده مجدد باشد باهم ترکیب می شوند که امن و کارا هستند، درصورتی که در متدها و کلاس های خصوصی، نمونه کپی شده امن و کارا نیست.

کلیات (Generics) اغلب با مجموعه ها و متدهایی که بر روی آنها کار می کنند مورد استفاده قرار میگیرند. کتابخانه نسخه .NET Framework 2.0 یک فضای نام System.Collections.Generic فراهم می کند  که شامل تعداد زیادی کلاس generic-based collection است. پیشنهاد می شود که در تمام برنامه های کاربردی که مربوط به .NET Framework 2.0 و حتی نسخه های قبل می شود، از مجموعه کلاس های عمومی جدید به جای نسخه های کپی شده خصوصی استفاده کنید.

ویژگی های کلیات (Generics):

کلیات تکنیکی است که برنامه شما را با توجه به نکات زیر کاراآمد می کند:

1- کمک می کند تا کد شما برای استفاده مجدد، از لحاظ امنیتی و نحوه اجرا کارآمد شود.

2- می توانید مجموعه کلاس های عمومی ایجاد کنید. کلاس های کتابخانه .NET Framework شامل تعداد زیادی کلاس مجموعه عمومی در System.Collections.Generic می شود. شما می توانید به جای استفاده از مجموعه کلاس های عمومی از مجموعه کلاس هایی در فضای نام System.Collections استفاده کنید.

3- می توانید برای خود ، کلاس ها، متد، رویدادها و delegates شخصی بسازید.

4- شما قادر خواهید بود برای فعال کردن سطح دسترسی به متدهای نوع داده خاص، کلاس های عمومی طبیعی ایجاد کنید.

5- ممکن است اطلاعاتی در رابطه با types استفاده شده در انواع داده عمومی در زمان اجرا با استفاده از بازخورد دریافت کنید.

// بیان یک کلاس عمومی.   
public class GenericList<T>  
{  
    void Add(T input) { }  
}  
class TestGenericList  
{  
    private class ExampleClass { }  
    static void Main()  
    {  
        // بیان لیستی از انواع INT.  
        GenericList<int> list1 = new GenericList<int>();  
  
        // بیان لیستی از رشته ها.  
        GenericList<string> list2 = new GenericList<string>();  
  
        // بیان لیستی از مثال های کلاس.  
        GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();  
    }  
}  

متدهای عمومی:

در مثال قبلی، از کلاس عمومی استفاده کردیم، می توانیم با یک نوع پارامتر، یک متد عمومی نشان دهیم. برنامه زیر مفهوم کلی را توضیح می دهد.

using System;    
using System.Collections.Generic;    
   
public 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';    
                 
         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);    
                 
         Swap<int>(ref a, ref b);    
         Swap<char>(ref c, ref d);    
             
      :    
         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();    
      }    
}     

وقتی کد بالا اجرا شد، خروجی زیر را می بینیم.

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 

Delegates عمومی:

شما قادر خواهید بود با پارامترهای زیر یک delegateعمومی را مشخص کنید.

delegate T NumberChanger<T>(T n); 

مثال زیر نحوه استفاده از delegate را نشان میدهد.

using System;    
using System.Collections.Generic;    
    
delegate T NumberChanger<T>(T n);     
public  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)    
      {    
          
         NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);    
         NumberChanger<int> nc2 = new NumberChanger<int>(MultNum);    
             
          
         nc1(25);    
         Console.WriteLine("Value of Num: {0}", getNum());    
         nc2(5);    
         Console.WriteLine("Value of Num: {0}", getNum());    
         Console.ReadKey();    
      }    
}    

در زیر نتیجه اجرای کد بالا را می بینید:

Value of Num: 35
Value of Num: 175

Interface های عمومی:

بهتر است برای مجموعه کلاسهای عمومی یک Interface تعریف کنیم، و یا حتی برای کلاس های عمومی که حاوی آیتم هستند. بهتر است برای کلاس های عمومی Interface عمومی هم تعریف شود. کتابخانه های  NET Framework . شامل تعداد زیادی Interface عمومی برای استفاده با مجموعه کلاسها در فضای نام System.Collections.Generic است.

مثالی برای Interface های عمومی:



    interface IBaseInterface<T> { }  
      
    class SampleClass : IBaseInterface<string> { }   

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 4k بازدید
  • 5 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید