التحكم بالوصول (F#)

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

أساسيات Access عنصر تحكم

في F#, الوصول عنصر تحكم محددات public، internal، و privateيمكن تطبيقها على الوحدات النمطية، أنواع، وظائف، القيمة ملفات تعريف، الدالات،، وخصائص حقول واضحة.

  • publicيشير إلى أن وحدة يمكن الوصول إلى الجميع المتصلين.

  • internalيشير إلى أن وحدة يمكن الوصول إليها فقط من نفس تجميع.

  • privateيشير إلى أن الوحدة يمكن الوصول إليها فقط من إرفاق النوع أو وحدة نمطية?.

ملاحظة

المحدد للوصول protectedهو غير مستخدمة في F#, على الرغم من أنها هو مقبول إذا كنت تستخدم أنواع كتابة بلغات يدعم الإصداران protectedالوصول. لذلك، إذا يمنع أسلوب محمية، أسلوب تبقى قابلة للوصول فقط داخل فئة و descendents الخاصة به.

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

إذا تم استخدام المحدد لا الوصول، الافتراضي هو public، باستثناء letالروابط في نوع دوماً privateإلى نوع.

توفر التواقيع في F# تقنية أخرى للتحكم في الوصول إلى عناصر البرنامج ب #. التواقيع غير مطلوبة للوصول إلى عنصر تحكم. لمزيد من المعلومات، راجع التواقيع (F#).

قواعد للوصول إلى عنصر تحكم

التحكم بالوصول خاضع إلى القواعد التالية:

  • تصريحات توريث (هذا يعني، استخدم inheritلتحديد clكـs bكـe clكـs) واجهة تصريحات (هو، يحدد clكـs بتنفيذ واجهة) ومجردة الأعضاء دائماً يكون لديك إمكانية الوصول نفس كـ نوع إرفاق. ولذلك، لا يمكن استخدام المحدد عنصر تحكم وصول تشغيل بنيات هذه.

  • Individual cases في a discriminated توحيد cannot have their own الوصول عنصر تحكم modifiers separate من the توحيد نوع.

  • Individual حقول of a سجل نوع cannot have their own الوصول عنصر تحكم modifiers separate من the سجل نوع.

المثال

The following تعليمات برمجية illustrates the استخدم of الوصول عنصر تحكم specifiers. There are الثاني ملفات في the مشروع, Module1.fs و Module2.fs. Each ملف هو ضمنيا a وحدة نمطية?. Therefore, there are الثاني الوحدات النمطية, Module1 و Module2. A private نوع و an internal نوع are defined في Module1. The private نوع cannot be accessed من Module2, but the internal نوع can.

// Module1.fs

module Module1

// This type is not usable outside of this file
type private MyPrivateType() =
   // x is private since this is an internal let binding
   let x = 5
   // X is private and does not appear in the QuickInfo window
   // when viewing this type in the Visual Studio editor
   member private this.X() = 10
   member this.Z() = x * 100

type internal MyInternalType() =
   let x = 5
   member private this.X() = 10
   member this.Z() = x * 100

// Top-level let bindings are public by default,
// so "private" and "internal" are needed here since a
// value cannot be more accessible than its type.
let private myPrivateObj = new MyPrivateType()
let internal myInternalObj = new MyInternalType()

// let bindings at the top level are public by default,
// so result1 and result2 are public.
let result1 = myPrivateObj.Z
let result2 = myInternalObj.Z

The following تعليمات برمجية tests the إمكانية وصول ذوي الاحتياجات الخاصة of the أنواع تاريخ الإنشاء في Module1.fs.

// Module2.fs
module Module2

open Module1

// The following line is an error because private means
// that it cannot be accessed from another file or module
// let private myPrivateObj = new MyPrivateType()
let internal myInternalObj = new MyInternalType()

let result = myInternalObj.Z

راجع أيضًا:

موارد أخرى

مرجع لغة ب #

التواقيع (F#)