آبجی
14th February 2010, 12:57 AM
Generic ها در #C این امکان رو میدن تا تعیین نوع نامشخص پارامتر به کمک کلمه ی کلیدی where به عامل دیگه ای محدود بشه.
به عنوان مثال: class GenericClass<T> where T : myClass {}
یعنی T باید از نوع کلاس myClass باشه.
کلا ۶ نوع قید برای Generic ها وجود داره.
به عنوان مثالی از ذکر قید برای Genreric:
static T Max<T> (T a, T b)
{
return a > b ? a : b;
}
تکه کد فوق در صورت اجرا با خطا مواجه میشه چون نوع T مشخص نیست. در #C، تشخیص نوع Generic در زمان اجرای برنامه مشخص میشه و چون نوع T مشخص نیست و باید برای همه ی مقادیر ممکن T کد فوق کامپایل بشه، خطا رخ میده.
برای رفع این مشکل، از where برای تعیین اینکه نوع T از اینترفیس IComparable مشتق میشه استفاده می کنیم تا انواعی که برای عملیات جبری قابلیت مقایسه دارند و اینترفیس IComparable رو پیاده سازی می کنند مشخص بشن:
static T Max<T> (T a, T b) where T : IComparable<T>
{
return a.CompareTo (b) > 0 ? a : b;
}
موفق باشید.
به عنوان مثال: class GenericClass<T> where T : myClass {}
یعنی T باید از نوع کلاس myClass باشه.
کلا ۶ نوع قید برای Generic ها وجود داره.
به عنوان مثالی از ذکر قید برای Genreric:
static T Max<T> (T a, T b)
{
return a > b ? a : b;
}
تکه کد فوق در صورت اجرا با خطا مواجه میشه چون نوع T مشخص نیست. در #C، تشخیص نوع Generic در زمان اجرای برنامه مشخص میشه و چون نوع T مشخص نیست و باید برای همه ی مقادیر ممکن T کد فوق کامپایل بشه، خطا رخ میده.
برای رفع این مشکل، از where برای تعیین اینکه نوع T از اینترفیس IComparable مشتق میشه استفاده می کنیم تا انواعی که برای عملیات جبری قابلیت مقایسه دارند و اینترفیس IComparable رو پیاده سازی می کنند مشخص بشن:
static T Max<T> (T a, T b) where T : IComparable<T>
{
return a.CompareTo (b) > 0 ? a : b;
}
موفق باشید.