extern (مرجع #C)

يستخدم المعدّل extern لتعريف أسلوب يتم تطبيقه خارجياً. أحد الاستخدامات الشائعة للمعدّل extern يكون مع السمة DllImport عندما تستخدم خدمات إمكانية التشغيل المتداخل للاتصال بالتعليمات البرمجية الغير مُدارة. في هذه الحالة، يجب تعريف الأسلوب كـ static، كما هو موضح في المثال التالي:

[DllImport("avifil32.dll")]
private static extern void AVIFileInit();

ملاحظة

يمكن للكلمة الأساسية extern أيضاً أن تعرف اسم مستعار لتجميع خارجي وذلك يجعلك قادراً على الإشارة إلى إصدارات مختلفة من نفس المكوّن من داخل تجميع واحد. لمزيد من المعلومات، راجع الاسم المستعار extern (مرجع #C).

من الخطأ استخدام المعدّلات abstract (مرجع #C) و extern معاً لتعديل نفس العضو. استخدام المعدّل extern يعني أن تم تطبيق الأسلوب خارج التعليمات البرمجية للـ #C بينما استخدام المعدّل abstract يعني أنه لم يتم توفير تطبيق الأسلوب في الفئة.

ملاحظة

للكلمة الأساسية extern استخدامات محدودة أكثر من الـ ++C. للمقارنة مع الكلمة الأساسية في ++C، راجع Using extern to Specify Linkage بمرجع لغة ++C.

مثال

في هذا المثال، يتلقى البرنامج سلسلة نصية من المستخدم ويعرضها داخل مربع رسالة. يستخدم البرنامج أسلوب MessageBox الذي تم استيراده من مكتبة User32.dll.

    //using System.Runtime.InteropServices;
    class ExternTest
    {
        [DllImport("User32.dll", CharSet=CharSet.Unicode)] 
        public static extern int MessageBox(int h, string m, string c, int type);

        static int Main()
        {
            string myString;
            Console.Write("Enter your message: ");
            myString = Console.ReadLine();
            return MessageBox(0, myString, "My Message Box", 0);
        }

    }

ينشئ هذا المثال DLL من برنامج C ويتم استدعاؤه من داخل برنامج #C في المثال التالي.

// cmdll.c
// Compile with: /LD
int __declspec(dllexport) SampleMethod(int i)
{
   return i*10;
}

يستخدم هذا المثال ملفين CM.cs و Cmdll.c، لشرح extern. ملف الـ C هو DLL خارجي تم إنشاؤه في المثال 2 والذي تم استدعاؤه من داخل برنامج الـ #C.

// cm.cs
using System;
using System.Runtime.InteropServices;
public class MainClass 
{
   [DllImport("Cmdll.dll")]
   public static extern int SampleMethod(int x);

   static void Main() 
   {
      Console.WriteLine("SampleMethod() returns {0}.", SampleMethod(5));
   }
}

SampleMethod() returns 50. 

ملاحظات

لبناء المشروع.

  • قم بالتحويل البرمجي لـ Cmdll.c لتحويله إلى DLL باستخدام سطر الأوامر لـ ++Visual C:

    cl /LD Cmdll.c

  • قم بالتحويل البرمجي لـ CM.cs باستخدام سطر الأوامر:

    csc CM.cs

سيعمل ذلك على إنشاء الملف التنفيذي CM.exe. عند تشغيل هذا البرنامج ستقوم SampleMethod بتمرير القيمة 5 إلى ملف DLL والذي يقوم بإرجاع القيمة مضروبة بـ 10.

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

لمزيد من المعلومات، راجع مواصفات لغة #C. مواصفات اللغة هي المصدر النهائي لبناء جملة C# واستخدامها.

راجع أيضًا:

المرجع

الكلمات الأساسية لـ #C

المعدّلات (مرجع #C)

System.Runtime.InteropServices.DllImportAttribute

المبادئ

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

موارد أخرى

مرجع C#‎