ما هي الكلمة internal keyword؟
-
في #C، يمكن استخدام الكلمة internal keyword في class أو members. ويسمى أيضا access modifiers.
هذه الكلمة تعني انه لا يمكن الوصول إلى الأنواع types أو الأعضاء members الداخليين إلا من خلال الملفات الموجودة في نفس التجميع assembly. (وثائق الكلمات الرئيسية الداخلية C#).
تمام شو يعني هذا الحكي.
بنحكي بالتفصيل عن هذا الموضوع في المقال التالي.
لماذا نحتاج إلى الكلمة internal keyword؟
الاستخدام الشائع لهذه الكلمة في التطوير القائم على المكونات(component-based development) لأنه يمكّن مجموعة من المكونات (components) من التعاون بطريقة خاصة دون التأثير على بقية الأكواد في التطبيق.
مثال ذلك نوخذ framework الخاصة ب بإنشاء واجهات المستخدم الرسومية (graphical user interfaces) وهذه المكتبة اكيد بتوفر مجموعة كبيرة من فئات التحكم Control والنماذج Form التي تتعاون مع بعض باستخدام أعضاء members يتمتعون بإمكانية الوصول الداخلي internal access. ولان هؤلاء الأعضاء داخليون فبالتأكيد لن يتعرضوا للأكواد البرمجية التي تستخدم إطار العمل framework.
تمام ان شاء الله تكون الفكرة واضحه.
نشوف امثلة على هذا الحكي.
المثال التالي هو عبارة عن function موجود داخل class يحاول الوصول الى Private function في class آخر.
class A{
public void func1(){
func2();
}
private void func2(){}
}
class B{
public void func(A a){
a.func2(); //Compilation error 'A.func2()' is inaccessible due to its protection level
}
}
المثال السابق يحتوي على class باسم A ويحتوي على 2 function
الأول func1 عام public
والثاني func2 خاص private
ويحتوي أيضا على class ثاني باسم B . داخل هذا class يوجد func عام public
تمام الان من داخل function في class B تم استدعاء function من class A .
public void func(A a){
a.func2();
}
لاحظ ان a هي من نوع Class A تم ارسالها عن طريق arrangements وتم تعريفها بالشكل التالي:
A a
طريقة استدعاء الكود السابق اكيد بتكون النتيجة خطأ والسبب لان func2 الذي تم استدعاءه معرف على انه private
private void func2(){}
الكلمة private تعني ان الوصول الى هذا function محدود ( يمكن الوصول له فقط من داخل class)
حتى نحل المشكلة السابقة فقط المطلوب تغيير func2 من private الى public وبالتالي شكل الكود:
class A{
public void func1(){
func2();
}
public void func2(){}
}
class B{
public void func(A a){
a.func2();
}
}
طيب تمام لحد الان ما استخدمنا الكلمة Internal
نعدل على الكود السابق بالشكل التالي:
public class A{
public void func1(){}
private void func2(B b){}
}
internal class B{
public void func3(A a){
a.func2(this); //Compilation error 'A.func2(B)' is inaccessible due to its protection level
}
}
اترك تعليقك