C# Access Modifiers

csharp dotnet access-modifiers

This is a short hierarchy summary of the access modifiers in C#.NET, from most restricted to least restricted.


private

  • Only Accessible within a Class/Struct
  • Not inherited by any deriving classes
  • Boundaries:
    • Same Assembly: Declared Class

private protected

  • Since C# 7.2
  • Accessible from within a Class/Struct
  • Inherited by any deriving classes
  • But only within the current assembly (Project/Namespace)
  • Boundaries:
    • Same Assembly: Declared Class
    • Same Assembly: Derived Classes

internal

  • (Assembly-Project Priority)
  • Accessible from anywhere within the current assembly (Project/Namespace)
  • Boundaries:
    • Same Assembly: Declared Class
    • Same Assembly: Derived Classes
    • Same Assembly: Other Classes

protected

  • (Class-Inheritance Priority)
  • Accessible from within a Class/Struct
  • Inherited by any deriving classes
  • Boundaries:
    • Same Assembly: Declared Class
    • Same Assembly: Derived Classes
    • Other Assemblies: Derived Classes

protected internal

  • (Class-Inheritance + Assembly-Project)
  • Accessible from anywhere within the current assembly (Project/Namespace)
  • Inherited from any deriving classes
  • Boundaries:
    • Same Assembly: Declared Class/Struct
    • Same Assembly: Derived Classes
    • Same Assembly: Other Classes
    • Other Assemblies: Derived Classes

public

  • Accessible from everywhere
  • Access is not restricted at all
  • Boundaries:
    • Same Assembly: Declared Class/Struct
    • Same Assembly: Derived Classes
    • Same Assembly: Other Classes
    • Other Assemblies: Derived Classes
    • Other Assemblies: Other Classes
Written on April 16, 2019