وظائف عامة (البرمجة C# إرشادات)

أسلوب عام هو أسلوب الذي تم التصريح ب نوع المعلمات، كما يلي:

static void Swap<T>(ref T lhs, ref T rhs)
{
    T temp;
    temp = lhs;
    lhs = rhs;
    rhs = temp;
}

يظهر المثال تعليمات برمجية التالي طريقة واحدة إلى استدعاء الأسلوب باستخدام intوسيطة "نوع":

public static void TestSwap()
{
    int a = 1;
    int b = 2;

    Swap<int>(ref a, ref b);
    System.Console.WriteLine(a + " " + b);
}

يمكنك أيضا حذف وسيطة "نوع" و المحول البرمجي إلى الاستدلال به. الاستدعاء التالي إلى Swapيماثل المكالمة السابقة:

Swap(ref a, ref b);

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

داخل فئة عامة، يمكن الوصول إلى وظائف عامة غير المستوى الفئة نوع المعلمات، كما يلي:

class SampleClass<T>
{
    void Swap(ref T lhs, ref T rhs) { }
}

إذا قمت بتعريف أسلوب عام الذي يأخذ نفس نوع كالفئة التي تحتوي على معلمات المحول البرمجي ينشئ التحذير CS0693 لأنه ضمن نطاق أسلوب، وسيطة الذي تم توفيره ل Tإخفاء وسيطة تزويد الخارجية الداخلية T. إذا كنت تطلب مرونة استدعاء أسلوب فئة عامة باستخدام نوع الوسيطات غير تلك التي تم توفيرها عندما تم إنشاء مثيل للفئة، يمكنك توفير معرّف آخر لمعلمة نوع الأسلوب، كما هو موضح في GenericList2<T>في ما يلي مثال.

class GenericList<T>
{
    // CS0693
    void SampleMethod<T>() { }
}

class GenericList2<T>
{
    //No warning
    void SampleMethod<U>() { }
}

استخدام القيود لتمكين العمليات أكثر تخصصية تشغيل معلمات نوع في وظائف. هذا الإصدار من Swap<T>، الآن باسم SwapIfGreater<T>، يمكن أن يستخدم فقط مع نوع الوسائط التي تقوم بتنفيذ IComparable<T>.

void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
{
    T temp;
    if (lhs.CompareTo(rhs) > 0)
    {
        temp = lhs;
        lhs = rhs;
        rhs = temp;
    }
}

عام وظائف محمل بشكل يمكن أن يكون زائد تشغيل معلمات متعددة لنوع. على سبيل المثال، الأساليب التالية يمكن أن الجميع تقع في نفس الفئة:

void DoWork() { }
void DoWork<T>() { }
void DoWork<T, U>() { }

مواصفات لغة #C

لمزيد من المعلومات، راجع مواصفات لغة #C.

راجع أيضًا:

المرجع

مقدمة للأشياء العامة (دليل البرمجة لـ #C)

System.Collections.Generic

الأساليب (دليل البرمجة لـ #C)

المبادئ

دليل البرمجة لـ #C