• عبارة عن C# Keywords بتساعدني اني اعمل Indicate the accessibility scope
  • أنا جوا ال Namespace بكتب أربع حاجات: Class - Interface (Reference Types) || Struct - Enum (Value Type)

وبرضو جوا الحاجات دي بيبقا فيه حاجات تانية زي فانكشنز او متغيرات وهكذامحتاج أعرف الحاجات دي هتبقا Accessible لحد فين بالظبط سواء جوا الـLibrary بس ولا لو حد استخدم الـLibrary في بروجكت تاني

Access Modifiers

All

Access ModifierInside ClassIn Same NamespaceInherited ClasssAnother Class
PublicYesYesYesYes
PrivateYesNoNoNo
ProtectedYesNoYesNo
InternalYesYesNoNo
Protected InternalYesYesYesNo
Private ProtectedYesNoYes (in same Library)No

For every

Inside itValid Access Modifiers
NamespaceClass, Struct, Interface, EnumInternal (Default), Public
ClassAttributes, Properties, Function, EventAll Access Modifiers (Default Private)
StructAttributes, Properties, Function, EventPrivate (Default), Internal, Public
InterfaceSignature for Property, Signature for Method, Default Implemented MethodPublic (Default)
EnumsLabels

شرح نظري ومثال لكل Access Modifier:

  1. Public:

    • يمكن الوصول إليها من أي مكان في البرنامج.
    • مثال:
      public class MyClass
      {
          public int myVar = 5;
      }
       
      class Program
      {
          static void Main()
          {
              MyClass obj = new MyClass();
              Console.WriteLine(obj.myVar);
          }
      }
  2. Private:

    • يمكن الوصول إليها فقط داخل نفس الكلاس.
    • الـ Member بيبقا عليه شكل قفل
    • مش بيبقا متاح برا الـ Scope اللي انا فيه سواء Class أو Struct
    • مثال:
      public class MyClass
      {
          private int myVar = 5;
       
          public void ShowVar()
          {
              Console.WriteLine(myVar); 
              // يمكن الوصول إليها داخل نفس الكلاس
          }
      }
       
      class Program
      {
          static void Main()
          {
              MyClass obj = new MyClass();
              obj.ShowVar();
              // obj.myVar = 10; // ERROR
          }
      }
  3. Protected:

    • الوصول مسموح به داخل نفس الكلاس أو Inherited Classes.
    • بيبقا عليها نجمة كدا
    • أي حاجة من الحاجات اللي فيها الـ Protected مقدرش أستخدمهم غير جوا الـClass ومقدرش أستخدمهم في الـ Struct لأنه مش بيسابورت الوراثة
    • بستخدمهم عشان الـ Cs Inheritance
    • وان الحاجات الـ Private تتشاف برا ومكررهاش
  • بالنسبة للكلاس اللي هي فيها بتبقا Private
    • مثال:
      public class MyClass
      {
          protected int myVar = 5;
      }
       
      public class DerivedClass : MyClass
      {
          public void ShowVar()
          {
              Console.WriteLine(myVar);
          }
      }
  1. Internal:

    • الوصول مسموح به فقط داخل نفس project/assembly (e.g., a compiled DLL or EXE) ، سواء كان الكلاس في نفس الـNamespace أو كلاس آخر.
    • بيبقا عليه علامة قلب
    • متقدرش تشاركه برا الـ Project بتاعك بمعنى انك لو عملت Library معينة فدي Project تقدر جواها تستخدم الـ Member لو Internal إنما لو استدعيته جوا Project تاني مش هيرضى
    • مثال:
      internal class MyClass
      {
          internal int myVar = 5;
      }
       
      class Program
      {
          static void Main()
          {
              MyClass obj = new MyClass();
              Console.WriteLine(obj.myVar); 
              // In Same Assembly (Project)
          }
      }
  2. Protected Internal:

    • الوصول مسموح به داخل Assembly أو من خلال Inherited Classes.
    • Within the same assembly (like internal), OR
    • From derived classes (like protected), even in external assemblies.
    • بالنسبة للكلاس اللي هي فيها بتبقا Private
    • مثال:
      public class MyClass
      {
          protected internal int myVar = 5;
      }
       
      public class DerivedClass : MyClass
      {
          public void ShowVar()
          {
              Console.WriteLine(myVar); 
              // Inherited
          }
      }
  3. Private Protected:

    • الوصول مسموح به داخل Assembly و من خلال Inherited Classes.
    • Within the same assemblyAND
    • From derived classes in that assembly.
    • بالنسبة للكلاس اللي هي فيها بتبقا Internal
    • مثال:
      public class MyClass
      {
          private protected int myVar = 5;
      }
       
      public class DerivedClass : MyClass
      {
          public void ShowVar()
          {
              Console.WriteLine(myVar); 
              // Inherited class + Same Assembly
          }
      }

Example

// Library: Common
// Class: TypeA
public class TypeA
{
	private protected int X; // Private
	/*protected*/ int Y; // Private
	internal protected int Z; // Internal
}
 
// Class: TypeB - in same Library
internal class TypeB : TypeA
{
    public TypeB()
    {
        /*
         * X is Private
         * Y is Private
         * Z is Internal
         */
    }
}
// Library: AnotherLib
// Class: TypeB - in another Library
internal class TypeB : TypeA
{
	public TypeB()
	{
		/*
		 * X is NOT Inherited
		 * Y is Private
		 * Z is Private
		 */
	}
}

Inside Namespace

بنقدر نكتب جوا ال Namespace أربع حاجات: 7. Cs Class 8. Cs Struct stands for structure 9. Cs Interface 10. Cs Enums


معنديش Access Modifiers غير اتنين جوا ال Namespace: 11. Internal (Default) 12. Public

قبل ما تحاول تستخدم أي class أو حاجة موجود في Library تانية لازم إني أضيف ال Library دي للـDependences للبروجكت Right click at project Build dependencies Project dependencies Add project reference وبعد كدا أعمل using للـLibrary دي

Internal

  • قولنا اننا لو مديناش الحاجة Access Modifier فهو طبيعي هيبقا Internal
  • معناها إني هي ليها Access بس جوا ال Library اللي انا فيها ولو حاولت أعملها Access جوا Library أو بروجكت تاني مش هينفع ومش هقدر أوصله
  • لو حاولت أوصل ل class مثلًا في project مختلف هيديلي error
  • الحل إنك تعملها public عشان تقدر توصلها في أي Project وأي Library مختلفة

Inside Class or Struct

بنقدر نكتب جواهم: 13. Attributes (Fields) Member Variables 14. Cs Properties (Full Property, Automatic Property, Indexer Special) 15. Cs Function (Constructor, Getter Setter, Method) 16. Cs Event


متاح 3 Access Modifiers جوا الـ Struct: (نفس بتاع الـ Name Space وهنزود الـ Private) 17. Private (Default) 18. Internal 19. Public

جوا الـ Class متاح كل الستة: 20. Private (Default) 21. Private Protected 22. Protected 23. Internal 24. Internal Protected 25. Public

Default

الـ Default فيهم الإتنين هو Private

Inside Interface

نقدر نكتب جواها: 26. Signature for Property (بحدد شكلها بس هيبقا عامل إزاي)

public int Salary {get; set;} 
// In interface called Signature for Property
// In class or Struct called Auto Property

In Class or Struct Automatic Property

  1. Signature for Method (مبنكتبش برامتر)
public void MyFun();
  1. Default Implemented Method (فانكشن كاملة) C# 8.0 Feature (.NET Core 3.1)
public void Print()
{
	Console.WriteLine("Hello Default Implemented");
}

الـ Method بتتكون من جزئين (Signature - Body): الـ Signature اللي هو اسمها والـ Parameters اللي بتستقبلها وكدا

Default

الـ Default فيها هو Public لأن بكتب فيها signatures فمحتاج أوصل للـ Implementation

Inside Enums

بنكتب جواها Labels