C# Access Modifiers
Access Modifiers
By now, you are quite familiar with the public
keyword that appears
in many of our examples:
public string color;
The public
keyword is an access modifier,
which is used to set the access level/visibility for classes, fields, methods and properties.
C# has the following access modifiers:
Modifier | Description |
---|---|
public |
The code is accessible for all classes |
private |
The code is only accessible within the same class |
protected |
The code is accessible within the same class, or in a class that is inherited from that class. You will learn more about inheritance in a later chapter |
internal |
The code is only accessible within its own assembly, but not from another assembly. You will learn more about this in a later chapter |
There's also two combinations: protected internal
and private protected
.
For now, lets focus on public
and private
modifiers.
Private Modifier
If you declare a field with a private
access modifier, it can only be
accessed within the same class:
Example
class Car
{
private string model;
static void Main(string[] args)
{
Car Ford = new Car("Mustang");
Console.WriteLine(Ford.model);
}
}
The output will be:
Mustang
If you try to access it outside the class, an error will occur:
Example
class Car
{
private string model = "Mustang";
}
class Program
{
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.model);
}
}
The output will be:
'Car.model' is inaccessible due to its protection level
The field 'Car.model' is assigned but its value is never used
Public Modifier
If you declare a field with a public
access modifier, it is accessible for
all classes:
Example
class Car
{
public string model = "Mustang";
}
class Program
{
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.model);
}
}
The output will be:
Mustang
Why Access Modifiers?
To control the visibility of class members (the security level of each individual class and class member).
To achieve "Encapsulation" - which is the process of making sure that "sensitive" data is hidden from users.
This is done by declaring fields as private
. You will learn more about this in the next chapter.
Note: By default, all members of a class are private
if you don't specify an access modifier:
Example
class Car
{
string model; // private
string year; // private
}