Overview of Access Modifiers in C#

C# programming examples

An access modifier in C# is a keyword used to indicate whether a member of a class can be accessed from outside the class. By using access specifiers, developers can control how one part of the application’s code can interact with another part of the code, which helps in building more robust, modular and maintainable applications.

This programming tutorial will discuss access modifiers in C#, their benefits, and how they can be used in C#.

Before reading further, you may wish to check out a few of our other tutorials on object-oriented programming (OOP) concepts if you are new to the subject or need a refresher:

What is an Access Modifier in C#?

An access modifier is a keyword in C# that specifies the level of access to a class or its members. It is used to control visibility and accessibility of class elements in C#, allowing you to control who can and cannot access different parts of your code. It is important to choose the appropriate access modifier for each member based on its intended usage and the level of encapsulation desired.

These access specifiers are used to control the visibility and accessibility of members of a class or struct, which helps in maintaining encapsulation and ensuring the correct use of the program. By using access specifiers, developers can control how other parts of the program can interact with their code, which helps in building more robust and maintainable applications.

You can learn more about C# encapsulation in our tutorial: Overview of Encapsulation in C#.

What is the public Keyword in C#?

In C#, the public keyword is an access specifier used to declare a type, method, or member as accessible to all code in the program. Members marked as public can be accessed from any code that has access to an instance of the class or struct they belong to.

Here are some key points about the public keyword in C#:

  • A class or struct that is marked as public can be accessed from any other code in the program, even if the code is in a different namespace or assembly.
  • A method, field, property, or event marked as public can be accessed from any code that has access to an instance of the containing class or struct.
  • The public keyword can be used in combination with other access specifiers, such as static or readonly, to create more specific access rules.

What is the private Keyword in C#?

In C#, the private keyword is an access specifier used to declare a type, method, or member as accessible only within the same class or struct. The private keyword helps to ensure the integrity of a class or struct by hiding implementation details and preventing unintended access and modification of private members from outside the containing class or struct. Members marked as private cannot be accessed from any other code outside the containing class or struct thus enforcing encapsulation and maintaining the security and integrity of your code.

Here are some key points about the private keyword in C#:

  • Programmers can access a private method, field, property, or event from within the same class or struct only.
  • A class or struct marked as private cannot be accessed from any other code in the program.
  • The private keyword is the default access level if no access specifier is explicitly defined for a type, method, or member.

What is the protected Keyword in C#?

In C#, the protected keyword is an access specifier used to declare a member as accessible within the same class or struct, and any derived class. Members marked as protected cannot be accessed from any other code outside the containing class or struct or its derived classes.

Here are some key points about the protected keyword in C#:

  • A protected method, field, property, or event can only be accessed from within the same class or struct, or from any derived class.
  • A class or struct marked as protected cannot be accessed from any other code in the program.
  • The protected keyword is often used to provide a mechanism for derived classes to access the internal workings of a base class, while still maintaining encapsulation.
  • The protected keyword helps to ensure the integrity of a class or struct by allowing derived classes to inherit and extend the behavior of the base class, while preventing unintended access and modification of protected members from outside the containing class or struct or its derived classes.

Read: Top Tools for Remote Developers

What is the internal Keyword in C#?

In C#, the internal keyword is an access specifier used to declare a type, method, or member that can only be accessed inside the same assembly.

Here are some key points developers should know about the internal keyword in C#:

  • A method, field, property, or event marked as internal can be accessed from any code within the same assembly.
  • The internal keyword is often used to hide implementation details of a class or struct from other assemblies, while still allowing other types within the same assembly to access the members.
  • The internal keyword is different from the private keyword in that private members cannot be accessed from any other code, whereas internal members can be accessed from any code within the same assembly only.
  • The internal keyword is useful for creating reusable code components, as it allows you to define implementation details within a single assembly while still providing a public interface that can be accessed from other assemblies.

The protected internal Access Modifier in C#

The visibility and accessibility of a protected internal member is both protected and internal to the same assembly. It allows a member to be accessible within the same assembly and also by derived classes, whether they are in the same assembly or in a different assembly.

Here are some key points programmers should understand about the protected internal access modifier in C#:

  • A method, field, property, or event marked as protected internal can be accessed from any code within the same assembly and by any derived class, whether they are in the same assembly or in a different assembly.
  • The protected internal access modifier is useful for creating a flexible and extensible class hierarchy that can be used across different assemblies while still maintaining encapsulation and access control.
  • The protected internal access modifier is often used in class libraries or APIs that are intended for use by multiple applications or services.

The private protected Access Modifier in C#

A private protected member combines the features of both private and protected access specifiers. It allows a member to be accessible within the same class or struct or any derived class within the same assembly, but not by any code outside the containing class or struct or its derived classes in other assemblies.

Here are some key points about the private protected access modifier in C#:

  • A method, field, property, or event marked as private protected can be accessed from within the same class or struct, and any derived class within the same assembly.
  • A class or struct marked as private protected can only be accessed from within the same assembly by the containing class or struct or any derived class.
  • The private protected access modifier is useful for creating a class hierarchy with strict access control, where the implementation details of a class can be accessed by derived classes within the same assembly only.

Use Cases of Access Modifiers in C#

Here are some use cases of access modifiers in C#, which include encapsulation, access control, inheritance, modularity, and maintenance:

  • Encapsulation: You can take advantage of access modifiers to hide implementation details and expose only the essential information to the outside world. This is important for creating classes that maintain the integrity of data and provide a clear interface for interacting with them.
  • Access Control: Access modifiers allow developers to control which code can access certain types and their members. As a result, only code that is authorized can have access to the sensitive data in your application.
  • Inheritance: Access modifiers play a key role in inheritance, allowing derived classes to access the protected and public members of their base class. This is essential for creating class hierarchies and facilitating code reuse.
  • Modularity: Access modifiers enable developers to create modular code that can be reused in different contexts. By controlling the visibility and accessibility of types and members, developers can create components that can be used in different parts of an application or even in different applications.
  • Maintenance: Access modifiers help make code more maintainable by making it clear which members are intended for internal use and which are part of the public interface. This helps developers avoid unintended changes to the implementation of a class or the behavior of an application.

Syntax for Access Modifiers in C#

Now that we know about the different types of access modifiers C# has to offer, let’s take a look at a quick code example that demonstrates the syntax for using C# modifiers:

public class Car
{
	public void Tire() { }
}

Here is example code showing how you would create a private access modifier in C#:

class Car
{
	private string model = “El Camino”;
	static void Main(string[] argos)
	{
	Car testObj = new Car();
	Console.WriteLine(testObj.model);
	}
}

In the above code example, we use a private access modifier to make our access level private and then create a new instance of Car, assigning it the model of El Camino, which we then print to the screen.

Final Thoughts on C# AccessModifiers

Access specifiers in C# are keywords used to determine the accessibility or visibility of a type, member or method in a class or struct. They play an important role in creating well-encapsulated, modular, and maintainable code that can be easily extended and reused in different contexts. By controlling the visibility and accessibility of types and their members, developers can ensure that their code is secure, efficient, and easy to maintain over time.

Read: Introduction to Abstraction in C#

Joydip Kanjilal
Joydip Kanjilal
A Microsoft Most Valuable Professional in ASP.NET, Speaker, and Author of several books and articles. More than 25 years of experience in IT with more than 18 years in Microsoft .NET and its related technologies. He was selected as a Community Credit Winner at http://www.community-credit.com several times. He has authored 8 books and more than 500 articles in some of the most reputed sites worldwide including MSDN, Info World, CodeMag, Tech Beacon, Tech Target, Developer, CodeGuru, and more.

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read