سلام
توی این سایت مباخثی بنام generic وجود داشت که اغلب با C#.net بود
آیا امکانش هست که تو اینجا در موردش بحث و بررسی بشه تا اصلا بفهمیم چی هست تا ازش تو برنامه نویسی استفاده کنیم
با تشکر مرزبان
سلام
توی این سایت مباخثی بنام generic وجود داشت که اغلب با C#.net بود
آیا امکانش هست که تو اینجا در موردش بحث و بررسی بشه تا اصلا بفهمیم چی هست تا ازش تو برنامه نویسی استفاده کنیم
با تشکر مرزبان
راستش Generic خیلی بزرگتر از اونه که بشه تو همین جا کامل بررسیش کرد. من سعی میکنم تا حد امکان توضیحش بدم.
همونطور که میشه مقادیر متغیرها را به متدها، کلاسها، ... پاس داد، در حالت ساده میشه نوع متغیر رو هم پاس داد. و مسلما اسلوب خاص خودشو داره. به مثال زیر توجه کنید:
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
}
}
خوب این تا اینجا بد نیست. ولی با همین اطلاعات محدود میشه با اولین معجزه 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
}
}
Generic Type ها باعث حذف boxing و unboxing های ناخواسته میشوند و همانطور که میدانید عملیات boxing و unboxing زمانبر است.
boxing And Unboxing چیه ؟ میشه توضیح بدین؟
به زبان ساده تبدیل یک کلاس یا یک نوع داده به Object و برعکس!
ما میتونیم تو سطح کلاس یا متد، یک نوع داده Generic داشتهباشیم.
class A<T1>
{
private T1 t1;
public T1 method<T2>(T2 t2)
{
...
}
}
همینطور میتونیم به دو صورت برای نوع دادة 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();
}
}