PDA

View Full Version : مقاله: جنریک ها در وی بی دات نت



DotNet_King
دوشنبه 21 مرداد 1387, 15:57 عصر
جنریک ها در وی بی دات نت




توجه:

کلیه ی حقوق این مقاله متعلق به سایت www.barnamenevis.org (http://www.barnamenevis.org/) می باشد.

استفاده از مطالب این مقاله منوط به ذکر نام منبع است.






مقدمه :

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

معرفی :
c++ اولین زبانی بود که از این نوع جنریک استفاده کرد هر چند که در آن زبان templates نامیده شدند! c# از ترکیبی شبیه به templates سی پلاس پلاس استفاده نمود با این تفاوت که کار با آنها در C# بسیار راحت تر است. جنریک ها در ابتدا در whidbey قرار داشت. در اولین ورژن از clr (common language runTime) پشتیبانی نمی شدند. علامت <> برای تعریف جنریک ها در سی شارپ استفاده می شود. در حالی که در وی بی دات نت ما از کلمه OF استفاده می کنیم.

جنریک چیست؟
واژه جنریک به این معناست که محدود به هیچ نوع خاصی از داده نیست صرف نظر از اینکه ما آنرا از هزنوع زبان برنامه نویسی خاصی ارجاع داده باشیم یا نه. یک لیوان را در نظر بگیرید! این لیوان می تواند با این انواع پر شود : آب ، آب میوه، سودا و غیره؛ همانگونه که مشاهده کردید نمی توان آن را به یک نوع خاص محدود کرد. مشابه این مثال را در VB.Net ارجاع خواهیم داد. ما یک کلاس به اسم لیوان Glass خواهیم ساخت که می تواند با هر نوعی بسته به انتخاب کاربر پر شود.

جنریک ها یک نوع نیستند؛ در جنریک ها می توان یک مجموعه داده را که هیچ نوع خاصی ندارند، ذخیره کرد .



چرا باید از جنریک ها استفاده کنیم؟

یک لحظه تصور کنید که بر روی یک کلاس کار می کنید که در قصد دارید یک مجموعه با نوع های متفاوت را ذخیره کنید. البته می توانید از Array استفاده کنید ولی فراموش نکنید که باید انواع متفاوتی از آرایه ها برای هر یک از انواع مختلفی که در کدتان نیاز است داشته باشید. علاوه بر این کدتان طولانی تر از حد مورد نیاز می شود. در این مواقع از جنریک ها استفاده می کنیم. ما از یک کلاس جنریک استفاده می کنیم که می تواند با هر نوعی از داده ها بکار برده شود، بدون اینکه نیاز باشد کد دوباره و دوباره نوشته شود. با این کار ما علاوه بر صرفه جویی در زمان و منابع، کارایی را نیز افزایش می دهیم. زیرا دیگر نیازی نیست که انواع مختلف داده را کاربر ایجاد کند. دلایل استفاده از جنریک ها به طور خلاصه و مختصر عبارتند از :



کارایی - Performance
Type Safe
استفاده مجدد - Code Reuse
Performance
چگونه جنریک ها به بالارفتن کارایی کمک می کنند؟ خیلی ساده است! نوع داده ها در زمان کامپایل شدنcompiler - Timer علاوه بر زمان اجرا بررسی می شود. این عمل به سادگی کارایی را بالا می برد. دیگر نیازی به بوجود آوردن انواع در زمان اجرا نیست.
با این وجود شما باید بدانید که سرعت و کارایی بالا مهمترین عامل استفاده از جنریک ها نیست، اما تمیزی کد و نگاهداشت مناسب را نیز سبب می شود

Type Safe

این به این معنی است که هر گاه که شما یک شیی به مجموعه اضافه نمایید، در زمان کامپایل بررسی میشود. این یعنی اینکه داده ها مطمئن هستند و هر گاه نوع نادرستی را وارد مجموعه نمایید یک خطا در زمان کامپایل به شما خواهد داد و نه در زمان اجرا. بدین دلیل شما مطمئن می شوید که میتوانید تمامی خطا ها را مدیریت کنید و دیگر در زمان اجرا و هنگامی که کاربر برنامه را اجرا می نماید ، مشکلی پیش نمی آید.

Code Reuse

هر گاه شما از نوع داده غیر جنریک ( غیر عام ) برای ذخیره داده ای استفاده نمایید دیگر شما نمی خواهید سایر انواع را برای آن استفاده نمایید. برای مثال شما نیاز دارید که یک مجموعه را به صورت integer تعریف نمایید، نوع دیگری را رشته ای string و نوع دیگر را دوبل double تعریف می کنید. این عمل غیر ضروری کد شما را حجیم می کند ولی هنگامی که از جنریک ها استفاده می نمایید شما باید نوع داده ها را به عنوان پارامتر بچینید و از آن با هر نوعی که مایلید استفاده کنید.

یک مثال ساده

تا به حال زیاد در این باره خوندیم! حالا وقت اون رسیده که یک کد رو ببنیم! با یه مثال ساده شروع می کنیم






Our Gen Class:

Public Class Gen(Of T)
Dim dataType As T
Public Property Val() As T
Get
Return dataType
End Get
Set(ByVal value As T)
dataType = value
End Set
End Property
End Class

Our Main:

Sub Main()
' This one accepts strings
Dim mystring As New Gen(Of String)
mystring.Val = "hello world"
System.Console.WriteLine(mystring.Val)

' Change the declaration so that it accepts now an integer
Dim myInt As New Gen(Of Integer)
myInt.Val = 5
System.Console.WriteLine(myInt.Val)

Console.WriteLine("Press Enter to finish ... ")
Console.Read()
End Sub

Our Output:

hello world
5


این کد چگونه کار می کند؟
همانگونه که در بالا مشاهده می کنید این کد از دو قسمت اصلی تشکیل شده است. اولی کلاس Gen قسمت دوم تابع Main است.Gen یک کلاس جنریک است. همانطوری که در قسمت معرفی وصف شد به کلمه کلیدی Of برای تعریف کردن آن به عنوان جنریک نیازمندیم. در c# , c++ ما از علامت <> برای توصیف این کلاس ،به عنوان جنریک استفاده می کنیم .
حرف T در سمت راست Of به نوع داده ای data-Type که ما ارجاع خواهیم داد شاره دارد و در یک کلاس آنی جدید ساخته می شود. بقیه کد براس شما آشناست.

قسمت جالب در تابع Main است جایی که ما دو کلاس آنی جدید از کلاس Gen ایجاد می کنیم. این به شما این امکان را می دهد که مقادیر رشته ای را در متغییر قرار دهید.





Dim mystring As New Gen(Of String)
mystring.Val = "hello world"
System.Console.WriteLine(mystring.Val)




در دومین فراخونی، ما از integer استفاده کرده ایم در اینجا مشاهده می شود که ما یک مقدار integer را به متغیر فرستاده ایم


Dim myInt As New Gen(Of Integer)
myInt.Val = 5
System.Console.WriteLine(myInt.Val)





منبع :
http://weblogs.asp.net/sonukapoor/articles/237898.aspx
مترجم : محمد رضا خلوتی

merlin_vista
دوشنبه 21 مرداد 1387, 17:08 عصر
چه خوب ميشود همزمان C# را هم پوشش ميدادي ..

ممنون از مقاله خوبت !

DotNet_King
دوشنبه 21 مرداد 1387, 17:21 عصر
چه خوب ميشود همزمان C# را هم پوشش ميدادي ..

ممنون از مقاله خوبت !

خواهش می کنم قابلی نداشت.
قصد دارم رو این مطلب رو بیشتر کار کنم . سعی میکنم سی شارپ را هم در آینده نزدیک پوشش بدم.

peymannaji
دوشنبه 21 مرداد 1387, 21:53 عصر
دستت درد نکنه الان 4-5 روز هست که دنبال یک مقاله در این مورد میگشتم پدرم درومد تو سایت های ENG ... لطفا ادامه بدین تا سطح درک بنده که با این موضوع آشنایی کمی دارم نسبت به کاربرد اون بیشتر بشه ... مطالبتون کاملا شیوا و روان بود و کاملا فهمیدم ... اما هنوز نمیدونم کاربرد اون دقیقا چی هست ...
موفق باشید ...