PDA

View Full Version : سوال: generic type ها



mehdi_csharp
دوشنبه 12 مهر 1389, 03:27 صبح
يكي از انواع constrain هاي generic type ها new() است من msdn هم ديدم چيزي متوجه نشدم؟

Mohandes2009
دوشنبه 12 مهر 1389, 13:13 عصر
با سلام
بریم سراغ new آخر و حکایت new رو تمام کنیم.
و امید دارم که شی تحرک بخشیدن به بخش C# توسط دوستان با عملگر newایجاد بشه و حکایت 3 newها تمام!
new یی که به عنوان Constraint شناخته می شه برای Generic Type ها استفاده میشه، برای مطالعه Generic Type ها می توانید به لینک زیر مراجعه نمایید :
http://www.developercenter.ir/Forum/...ead.php?t=7415 (http://www.developercenter.ir/Forum/showthread.php?t=7415)


فرض کنید کلاسی با نام MyParameterLessClass داریم به شکل زیر :



public class MyParameterLessClass
{
public MyParameterLessClass()
{
}
}




حال به کلاس زیر که به شکل Generic Type هست توجه کنید :



public class Lst<T> where T : new()
{
public void add(T ParameterLessClasses)
{
}
}




چون کلاس MyParameterLessClass متد سازنده آن بدون پارامتر هست می توانیم تعریف زیر را انجام دهیم :




Lst<MyParameterLessClass> b = new Lst<MyParameterLessClass>();


b.add(new MyParameterLessClass());



در واقع کار where T : new() اینه که چک کنه کلاسی که در Place Holder قرار می گیره حتمی یا تابع سازنده نداشته باشه یا حد اقل یک متد سازنده بدون پارامتر داشته باشه.
یعنی اگر ما کلاس MyParameterLessClass را به شکل زیر تعریف کنیم (با پارامتر تعریف کنیم) از کامپایلر روی دو خط بالا که تعریف کردیم میگه "خطا داره حسن" :




public class MyParameterLessClass
{
public MyParameterLessClass(Form MyParameter)
{
}
}



توجه داشته باشید که اگر چند شرط داشته باشیم new باید آخرین باشه و با کاما از هم جدا بشه.


امیدوارم کد زیر خطا نده حسن :




تحرک_بخشیدن_CSharp Posts= newتحرک_بخشیدن_CSharp();
Posts.FriendsWritePosts();



:لبخند: