سؤال

لقد قرأت مؤخرا مصطلح "قيود نوع عارية" في سياق الجنراء. ماذا يعني ذلك؟ أين نستخدمها؟

هل كانت مفيدة؟

المحلول

من عند MSDN.:

وصف القيد حيث t: u يجب أن تكون وسيطة النوع الموردة ل T أو مشتقة من الوسيطة المقدمة لأجلك. وهذا ما يسمى قيود نوع عارية.

عندما يتم استخدام معلمة نوع عام كعائق، يطلق عليه قيود نوع عارية. تعتبر قيود أنواع عارية مفيدة عندما تضطر وظيفة العضو في معلمة النوع الخاصة به إلى تقييد تلك المعلمة إلى معلمة النوع من النوع الذي يحتوي على نوع يحتوي عليه، كما هو موضح في المثال التالي:

class List<T>
{
    void Add<U>(List<U> items) where U : T {/*...*/}
}

نصائح أخرى

جانبا، إنه غريب بالنسبة لي أن هذا المصطلح الشديد إلى حد ما تمكنت من تحقيقه في وثائق MSDN. نحن بالتأكيد لا نسمي هذه القيود "قيود نوع عارية" على فريق C # مترجم وتم صدمة، صدمت! لاكتشاف بضع سنوات من أن هذا ما قاله الوثائق. نسميها عادة "قيود المعلمات النوع". ليس لدي أي فكرة عن كيفية الوصول إلى هذا الفصل في الوثائق في المقام الأول؛ ربما هناك قصة مثيرة للاهتمام هناك.

"عندما يتم استخدام معلمة نوع عام كقيد، فإنه يسمى قيود نوع عارية. قيود نوع عارية مفيدة عند وظيفة العضو مع معلمة النوع الخاصة بها يجب أن تقيد تلك المعلمة إلى المعلمة نوع النوع المحتوي على النوع"

http://msdn.microsoft.com/en-us/library/d5x73970.aspx.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top