PDA

View Full Version : سوال: شرط Where جلوی اسم کلاس



ahmad002
چهارشنبه 19 اسفند 1394, 02:04 صبح
سلام
یک سوال داشتم، شرط Where که جلوی اسم کلاس مینویسن به چه معناست؟
مثلاً به ش کل زیر :

Class Test<T> where T : Book, IService
{
}
interface IService
{
}
Class Book
{
}

و یک سوال دیگه هم من چطور می تونم از Test یک شی بسازم؟

0verlord
جمعه 21 اسفند 1394, 09:15 صبح
بهش میگن Generic Constraint در حالت عادی پارامتر جنریک میتونه با هر نوع ابجکت دیگه جایگزین بشه ولی با استفاده از کانسترینت ها (قید ها) میشه مشخص کرد که چه نوع پارامترهایی قابل قبول هستند. در اینجا کلاس Test فقط آرگومان هایی رو بجای پارامتر T قبول میکنه که دو شرط داشته باشند اول اینکه از کلاس Book و یا ساب کلاس هاش باشند و دوم شامل اینترفیس Iservice باشن اینجوری میتونید اعضای Book و IService رو روی T فراخوانی کنید...مثلا اگر کلاس Book متودی به اسم Foo داشته باشه میتونید اینکارو بکنید: ... ()T.Foo ... ولی در حالت عادی کامپایلر به شما اجازه چنین کاری رو نمیده