Access specifiers, also known as access modifiers, are keywords used in programming languages like C# to specify the visibility and accessibility of types (classes, structs, enums) and members (fields, properties, methods, etc.) within a program. They control which parts of a program can access or modify the declared elements.
- Access specifiers are keywords to specify the accessibility of a class, method, property, field.
- The keywords are – Public, Private, Protected, Internal, Protected Internal.
In C#, there are five access specifiers:
- public: The most permissive access specifier. Public members are accessible from any part of the program, both within the same assembly (project) and from other assemblies that reference it. For example, a public method in a class can be called from any other part of the program.
- private: The least permissive access specifier. Private members are accessible only from within the same type or class where they are declared. They are not visible or accessible from any other part of the program, including derived classes or other types in the same assembly. For example, a private field can only be accessed from within the class that declares it.
- protected: Protected members are accessible from within the same type, as well as from derived classes. They are not accessible from unrelated types or from outside the class hierarchy. For example, a protected method can be called from a derived class that inherits from the base class.
- internal: Internal members are accessible within the same assembly (project) but not from outside the assembly. They are not accessible from derived classes in other assemblies. This access specifier is useful for encapsulating implementation details within an assembly. For example, an internal class can only be instantiated and accessed from within the same assembly.
- protected internal: This access specifier combines the behavior of protected and internal. It allows access from within the same assembly as well as from derived classes, even if they are in different assemblies. For example, a protected internal member can be accessed from a derived class in a different assembly.
By using access specifiers appropriately, you can control the visibility and accessibility of your types and members, promoting encapsulation, information hiding, and appropriate levels of abstraction in your code.