مساحات الاسم (F#)

مساحة الاسم ما يسمح لك بتنظيم تعليمات برمجية إلى مناطق وظائف ذات الصلة بواسطة تمكينك من يرفق اسم تجميع عناصر البرنامج.

namespace [parent-namespaces.]identifier

ملاحظات

If you want إلى put تعليمات برمجية في a مساحة الاسم, the أول إعلان في the ملف must declare the مساحة الاسم. The المحتويات of the entire ملف then become part of the مساحة الاسم.

مساحات الاسم cannot directly contain قيم و دالات. Instead, قيم و دالات must be مُضمن في الوحدات النمطية, و الوحدات النمطية are مُضمن في مساحات الاسم. مساحات الاسم can contain أنواع, الوحدات النمطية.

مساحات الاسم can be declared بوضوح مع the مساحة الاسم كلمة أساسية, أو ضمنيا when declaring a وحدة نمطية?. إلى إعلان مساحة اسم بشكل صريح، استخدم الكلمة الأساسية لمساحة الاسم متبوعاً باسم مساحة الاسم. يظهر المثال التالي رمز ملف الذي تعريف مساحة اسم مكونات نوعا ووحدة نمطية في مساحة الاسم هذه.

namespace Widgets

type MyWidget1 =
    member this.WidgetName = "Widget1"

module WidgetModule1 =
    let widgetName = "Widget2"

إذا كانت المحتويات الكاملة ملف كانا في وحدة نمطية واحدة، إمكانية أيضا تعريف مساحات الاسم ضمنياً باستخدام moduleالكلمة الأساسية وتوفير اسم مساحة الاسم الجديد في اسم وحدة نمطية? مؤهل بشكل كامل. يظهر المثال التالي رمز ملف التي تم التصريح مساحة الاسم Widgetsووحدة نمطية WidgetsModule، الذي يحتوي على دالة.

module Widgets.WidgetModule

let widgetFunction x y =
   printfn "%A %A" x y

التعليمة البرمجية التالية هو مساوية للتعليمة البرمجية السابقة، ولكن وحدة نمطية? هو إعلان الوحدة نمطية محلية. في ذلك حالة، يجب أن تظهر مساحة الاسم تشغيل السطر الخاص به.

namespace Widgets

module WidgetModule =

    let widgetFunction x y =
        printfn "%A %A" x y

إذا تم طلب المزيد وحدة نمطية في نفس ملف في مساحات الاسم أو أكثر، يجب استخدام التعريفات في وحدة نمطية? المحلية. عندما كنت استخدم تصريحات وحدة نمطية? المحلية، لا يمكنك استخدم مساحة الاسم المؤهل في تصريحات وحدة نمطية?. إظهار التعليمة البرمجية التالية ملف يحتوي على إعلان مساحة الاسم وبين تصريحات وحدة نمطية? المحلية. في هذه الحالة، يتم تضمين الوحدات النمطية في مساحة الاسم مباشرة؛ لا لا الوحدة النمطية التي تم إنشاؤها ضمنياً له نفس اسم ملف. أية تعليمات برمجية غير ذلك في الملف، مثل doربط، هو في مساحة الاسم ولكن ليس في الوحدات النمطية الداخلي، لذا تحتاج إلى تأهيل العضو وحدة نمطية? widgetFunctionباستخدام اسم وحدة نمطية?.

namespace Widgets

module WidgetModule1 =
   let widgetFunction x y =
      printfn "Module1 %A %A" x y
module WidgetModule2 =
   let widgetFunction x y =
      printfn "Module2 %A %A" x y

module useWidgets =

  do
     WidgetModule1.widgetFunction 10 20
     WidgetModule2.widgetFunction 5 6

The إخراج of this مثال هو كـ follows.

Module1 10 20
Module2 5 6

لمزيد من المعلومات، راجع الوحدات النمطية (F#).

مساحات الاسم متداخلة

عند إنشاء مساحة الاسم متداخلة، يجب أن كامل تأهيل عليه. وإلا، يمكنك إنشاء مساحة الاسم المستوى أعلى جديد. المسافة البادئة هو تجاهل في مساحة الاسم تصريحات.

يوضح المثال التالي كيفية إلى إعلان مساحة الاسم متداخلة.

namespace Outer

    // Full name: Outer.MyClass
    type MyClass() =
       member this.X(x) = x + 1

// Fully qualify any nested namespaces.
namespace Outer.Inner

    // Full name: Outer.Inner.MyClass
    type MyClass() =
       member this.Prop1 = "X"

مساحات الاسم في ملفات و التجميعات

أن مساحات الاسم تجاوز ملفات متعددة في مشروع مفرد أو التجميع. وصف الجزء مساحة اسم مصطلح الجزء من مساحة الاسم المضمنة في ملف واحد. مساحات الاسم أيضا أن تمتد عبر عدة تجميعات. ل مثال، Systemيتضمن مساحة الاسم الكل .NET Framework، الذي يمتد إلى العديد من تجميعات ويحتوي على العديد من مساحات الاسم المتداخلة.

مساحة الاسم العامة

استخدم مساحة الاسم المعرفة مسبقاً globalلوضع الأسماء في.NET المستوى الأعلى مساحة الاسم.

namespace global

type SomeType() =
    member this.SomeMember = 0
namespace global

type SomeType() =
    member this.SomeMember = 0

يمكنك أيضا استخدام عمومي للإشارة إلى مساحة الاسم.NET المستوى الأعلى، على سبيل المثال، لحل تعارضات في الاسم مع مساحات أسماء غير ذلك.

global.System.Console.WriteLine("Hello World!")
global.System.Console.WriteLine("Hello World!")

راجع أيضًا:

المرجع

الوحدات النمطية (F#)

موارد أخرى

مرجع لغة ب #