معلمات النوع العام (دليل البرمجة لـ #C)
في النوع العام أو تعريف أسلوب تكون معلمات النوع عنصراً نائباً لنوع محدد يعيّنه العميل عندما يقوم بإنشاء مثيل لمتغير من النوع العام. لا يمكن استخدام أي فئة عامة مثل GenericList<T> المسرودة في مقدمة للأشياء العامة (دليل البرمجة لـ #C) كما هي لأنها ليست بنوع; ولكنها اقرب إلى مخطط لنوع. لاستخدام GenericList<T> يجب على التعليمات البرمجية للعميل أن تقوم بتعريف ثم إنشاء مثيل لنوع مُنشأ بواسطة تحديد وسيطة النوع داخل أقواس معقوفة. يمكن أن تكون وسيطة النوع لهذه الفئة من أي نوع يتم التعرف عليه من قبل المحول البرمجي. يمكن إنشاء أي عدد من مثيلات النوع المُنشأ، وكل واحد يستخدم وسيطة نوع مختلفة كالتالي:
GenericList<float> list1 = new GenericList<float>();
GenericList<ExampleClass> list2 = new GenericList<ExampleClass>();
GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();
في كل مثيل من مثيلات GenericList<T> كل حدث من حوادث T في الفئة سيتم استبداله بوسيطة النوع في وقت التشغيل. لقد أنشأنا ثلاثة كائنات منفصلة آمنة النوع وأكثر كفاءة باستخدام تعريف فئة واحدة. للحصول على معلومات أكثر حول كيفية تنفيذ هذا الاستبدال بواسطة CLR، راجع العام في وقت التشغيل (ارشادات برمجة C#).
إرشادات تسمية معلمة النوع
قم بتسمية معلمات النوع العام بأسماء وصفية, إلا إذا كان الاسم من حرف واحد يفسر نفسه بشكل كامل والاسم الوصفي لا يضيف أي قيمة.
public interface ISessionChannel<TSession> { /*...*/ } public delegate TOutput Converter<TInput, TOutput>(TInput from); public class List<T> { /*...*/ }
ضع في الاعتبار استخدام T كاسم لمعلمة النوع للأنواع التي تحتوي على معلمة نوع من حرف واحد.
public int IComparer<T>() { return 0; } public delegate bool Predicate<T>(T item); public struct Nullable<T> where T : struct { /*...*/ }
قم بإسباق أسماء معلمة النوع الوصفية بـ “T”.
public interface ISessionChannel<TSession> { TSession Session { get; } }
ضع في الاعتبار الإشارة إلى القيود الموضوعة على نوع المعلمة في اسم المعلمة. على سبيل المثال، معلمة مقيدة بـ ISession يتم تسميتها TSession.
راجع أيضًا:
المرجع
الفروق بين قوالب C++ و عام C# ( ارشادات البرمجة C# )