صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

صفحه شخصی سید علا سبزپوش

برنامه نویس دات نت و sql_server --ریاضیات

generic

شاید برای شما این سوال مطرح شده باشد ، که چگونه می توان کلاس یا متی و .. بنویسیم که مثلا با انواع داده ها کار کند .مثلا متدی بنویسیم که پارامترهای ورودی آن هم از نوع int  و هم از نوع float  باشد و یا کلاسی بنویسید که هم پارامتر های  int  را بپذیرد و هم string  ، خوب حتما می خواهید چندین متد یا چندین کلاس بنویسید و یا فکر می کنید باید override  کنید . نه اینگونه نیست .از زمان اریه شده .net2    چند سالی می گذرد ، اما یکی از قابلیتهایی که در آن زمان اضافه شد generic    ها بود .که تا به امروز هم استفاده فراوانی دارد .generic  ها ساختار گرامری جدیدی به دات نت اضافه کرده اند .مثلا می توانید یک کلاس کلی بنویسید بدون اینکه مشخص کنید که چه نوع داده ای رامی پذیرد .البته این کل ماجرا نیست بلکه به نظر بنده generic ها پاسخی هستند به برخی از نیازها و سواالات زیر :

1-آیا می توان interfaces, classes, methods, events and delegates. داشته باشیم که بتواند انواع مختلف داده را بپذیرد؟

2-آیا می توان آرایه یا لیستی از عناصر گوناگون داشته باشیم که بتواند انواع مختلف داده ها را در خود ذخیره کند ؟

3-آیا می توان بدون پیاده سازی مجدد یک الگوریتم آن را با ساختار داده ای متفاوت دیگری بکار ببریم؟

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

تعریف generic

یک  کلاس یا متد و یا اینترفیس و غیره شبیه یک  کلاس) یا متد و یا اینترفیس و غیره( عادی تعریف می شود ، با این تفاوت که بعد از نام کلاس ، نوع generic  مشخص می گردد. نوع داده ای  generic  بوسیله کلاس می توانند به عنوان نوع داده یک عضو از کلاس یا به عنوان نوع داده پارامتری متدها استفاده شوند.


فایل کامل مقاله بصورت


partial class چیست ؟

مفهموم partial class چیست ؟

این مفهموم از زمان وارد شدن .net 2  به بعد مطرح شد به این ترتیب که شما در یک فضای نام یکسان  namespace   می توانید اطلاعات کلاستتون را در دو یا بیشتر از دو فایل جداگانه قرار دهید . مشروط بر اینکه فضای نام  namespaceهمه فایلها  یکسان باشد . به مثال زیر دقت کنید . کلاسی داریم به نام myclass  که می خواهیم آن را در 2 فایل تقسیم کنیم فایل اول به نام someclass و فایل دوم به نام moreclass   است .

خوب همانطور که گفتم باید حتما فضای نام namespace  هر دو فایل یکسان باشد حالا محتویات هر دو فایل را در زیر می آوریم

فایل someclass                                                                                                                                                                                   

Namespace  space1{

public partial class myClass
{
   public int P1 { get; set; }
}

}

فایل  moreclass

Namespace  space1{

public partial class myClass
{
   public int P2 { get; set; }

public void ala()

{

//دستورات متد

}


}

}

همانطور که مشاهده می کنید بخشی از کد های کلاس myClass در یک جا و ادامه کدها در قسمت دیگری آمده است. از این ویژگی می توان برای گسترش کلاس ها استفاده کرد اما هر دو در یک فضای نام namespace  قرار گرفته اند .

اما حالا که با این مفهوم آشنا شدیم سوال اساسی این است که فایده این روش در کجاست و چرا استفاده می کنیم ؟

1-      افزایش خوانایی در کلاس های بسیار زیادی است

2-      اگر شما بر روی کلاس پیچیده ای کار می کنید براحتی می توانید آن را بین چند نفر تقسیم کنید و هر کدام از افراد در فایلی جداگانه ، کدهای کلاس خود را می نویسد .

3-      شما براحتی می توانید در جاهایی که برخی کدهای بصورت اتوماتیک تولید می شوند ،مثل کد فرمهای تحت ویندوز (Windows Forms, Web Service) ، را از کدهایی که شما بصورت دستی می نویسید را تفکیک کنید . در نتیجه  اعمال تغییرات بسیار راحتتر می شود

4-      در تعریف کلاسها می توانیم بخش از کلاس ما که دارای خصوصیات private   را از بخش که دارای خصوصیات public  باشه را تفکیک می کنیم این کار به خوانایی و روان فهمیدن کلاس کمک فراوانی می کند.

5-      در تعریف interface ها شما می توانید تعریف  interface  را در یک فایل و رابطه ها و اعمال و پیاده سازیهای آن را در فایلی دیگر قرار دهید .