PDA

View Full Version : آشنایی با generic



marzban
سه شنبه 09 مرداد 1386, 21:36 عصر
سلام
توی این سایت مباخثی بنام generic وجود داشت که اغلب با C#.net بود
آیا امکانش هست که تو اینجا در موردش بحث و بررسی بشه تا اصلا بفهمیم چی هست تا ازش تو برنامه نویسی استفاده کنیم
با تشکر مرزبان

mohammad272005
جمعه 12 مرداد 1386, 01:51 صبح
راستش Generic خیلی بزرگتر از اونه که بشه تو همین جا کامل بررسیش کرد. من سعی می‏کنم تا حد امکان توضیحش بدم.

mohammad272005
جمعه 12 مرداد 1386, 02:03 صبح
همونطور که میشه مقادیر متغیرها را به متدها، کلاسها، ... پاس داد، در حالت ساده می‏شه نوع متغیر رو هم پاس داد. و مسلما اسلوب خاص خودشو داره. به مثال زیر توجه کنید:

class A<T>
{
public T a;
}

class B
{
public void Test()
{
A<int> f1 = new A<int>();
f1.a = 5; // << OK
f1.a = "A"; // << Error

A<string> f2 = new A<string>();
f2.a = 5; // << Error
f2.a = "A"; // << Ok

A<string> f3 = new A<int>(); // << Error
}
}

mohammad272005
جمعه 12 مرداد 1386, 02:07 صبح
خوب این تا اینجا بد نیست. ولی با همین اطلاعات محدود میشه با اولین معجزه generic در collectioها آشنا شد.
ببینید:



class A
{
public Test()
{
Collection<int> f1 = new Collection<int>();
f1.Add(5); // << OK
f1.Add("A") // << Error

Collection<string> f2 = new Collection<string>();
f2.Add(5); // << Error
f2.Add("A") // << OK
}
}

PC2st
جمعه 12 مرداد 1386, 10:05 صبح
Generic Type ها باعث حذف boxing و unboxing های ناخواسته میشوند و همانطور که میدانید عملیات boxing و unboxing زمانبر است.

am_abbas65
شنبه 13 مرداد 1386, 00:02 صبح
boxing And Unboxing چیه ؟ میشه توضیح بدین؟

Alireza_Salehi
شنبه 13 مرداد 1386, 06:02 صبح
boxing And Unboxing چیه ؟ میشه توضیح بدین؟

به زبان ساده تبدیل یک کلاس یا یک نوع داده به Object و برعکس!


Boxing and Unboxing (http://msdn2.microsoft.com/en-us/library/yz2be5wk(vs.80).aspx)

mohammad272005
شنبه 13 مرداد 1386, 23:23 عصر
ما می‏تونیم تو سطح کلاس یا متد، یک نوع داده Generic داشته‏باشیم.


class A<T1>
{
private T1 t1;
public T1 method<T2>(T2 t2)
{
...
}
}

mohammad272005
شنبه 13 مرداد 1386, 23:37 عصر
همینطور می‏تونیم به دو صورت برای نوع دادة Generic، محدودیت قائل بشیم.
1- وراثت:

interface ITest1{}
class Test2{}
class Test3<T1>
where T1:ITest1, Test2{}
2- parameterless constructor:

class Test<T1>
where T1:new(){}

در این صورت (فقط در این صورت) می‏تونیم از روی DataTypeمون یک instance بسازیم:

class Test<T1>
where T1:new(){
public void method()
{
T1 t1 = new T1();
}
}