اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
استفاده از Tupleها جهت مقدار برگشتی یک متد
اکثر مواقع برنامه نویسان برای بازگشت چند مقدار توسط یک متد، به روشهایی مثل تعریف کلاسهای POCO یا پارامترهایی از نوع out متوسل میشوند. به وسیلهی Tupleها میتوان چند مقدار مختلف را به عنوان خروجی متد بازگشت داد:
همچنین از Tupleها میتوان برای پاس دادن یکباره پارامترها به متد استفاده کرد و در مواقعی مانند ارسال پارامتر به Threadها که در حالت عادی یک پارامتر را به عنوان ورودی قبول میکنند، کاربردی خواهند بود.
عدم نیاز به استفاده از کالکشنهای موقتی در متدها جهت نگهداری مقدار بازگشتی متد
اکثر برنامه نویسان، در متدهایی که لیستی از مقادیر را بازگشت میدهند، از یک متغییر موقتی استفاده میکنند:
اما باید دانست که الزاما نیازی به انجام این کار نیست و به وسیلهی کلیدواژهی yield میتوان مقادیر را همزمان با تولید آنها در بدنه متد به عنوان خروجی متد بازگشت داد و به این ترتیب به مصرف حافظهی کمتری رسید:
ملزم کردن نوع پایه یک کلاس Generic به رعایت قوانین پیاده سازی خاص
Genericها میتوانند عملکرد یکسانی را برای نوعهای دادهای متفاوت، پیاده سازی کنند. با توجه به ماهیت Genericها ممکن است در سناریوهایی لازم باشد تا نوع دادهی اولیهای که قرار است Generic پیاده سازی شود، از قوانین پیاده سازی خاصی پیروی کند. به صورت زیر میتوان نوع پایهی یک Generic را ملزم به رعایت قوانین خاص پیاده سازی به واسطه یک Interface کرد:
نمونهی استفاده:
اکثر مواقع برنامه نویسان برای بازگشت چند مقدار توسط یک متد، به روشهایی مثل تعریف کلاسهای POCO یا پارامترهایی از نوع out متوسل میشوند. به وسیلهی Tupleها میتوان چند مقدار مختلف را به عنوان خروجی متد بازگشت داد:
private Tuple<string, string, int> GetPersonInfo() { return new Tuple<string, string, int>("Steve", "Jobs", 56); }
عدم نیاز به استفاده از کالکشنهای موقتی در متدها جهت نگهداری مقدار بازگشتی متد
اکثر برنامه نویسان، در متدهایی که لیستی از مقادیر را بازگشت میدهند، از یک متغییر موقتی استفاده میکنند:
private IEnumerable<int> GetNumbers() { var result = new List<int>(); for (int i = 0; i <= 100; i++) result.Add(i); return result; }
private IEnumerable<int> GetNumbers() { for (int i = 0; i <= 100; i++) { yield return i; } }
ملزم کردن نوع پایه یک کلاس Generic به رعایت قوانین پیاده سازی خاص
Genericها میتوانند عملکرد یکسانی را برای نوعهای دادهای متفاوت، پیاده سازی کنند. با توجه به ماهیت Genericها ممکن است در سناریوهایی لازم باشد تا نوع دادهی اولیهای که قرار است Generic پیاده سازی شود، از قوانین پیاده سازی خاصی پیروی کند. به صورت زیر میتوان نوع پایهی یک Generic را ملزم به رعایت قوانین خاص پیاده سازی به واسطه یک Interface کرد:
public interface ICar { string GetName(); string GetManufacturerCompany(); } private class GenricClass<T> where T : ICar { }
public class Audi : ICar { public string GetName() { throw new NotImplementedException(); } public string GetManufacturerCompany() { throw new NotImplementedException(); } } private static void Main(string[] args) { var invalidTest = new GenricClass<int>(); var validTest = new GenricClass<Audi>(); }