private (C# Reference)

The private keyword is a member access modifier.

This page covers private access. The private keyword is also part of the private protected access modifier.

Private access is the least permissive access level. Private members are accessible only within the body of the class or the struct in which they are declared, as in this example:

class Employee
    private int _i;
    double _d;   // private access by default

Nested types in the same body can also access those private members.

It is a compile-time error to reference a private member outside the class or the struct in which it is declared.

For a comparison of private with the other access modifiers, see Accessibility Levels and Access Modifiers.


In this example, the Employee class contains two private data members, _name and _salary. As private members, they cannot be accessed except by member methods. Public methods named GetName and Salary are added to allow controlled access to the private members. The _name member is accessed by way of a public method, and the _salary member is accessed by way of a public read-only property. For more information, see Properties.

class Employee2
    private readonly string _name = "FirstName, LastName";
    private readonly double _salary = 100.0;

    public string GetName()
        return _name;

    public double Salary
        get { return _salary; }

class PrivateTest
    static void Main()
        var e = new Employee2();

        // The data members are inaccessible (private), so
        // they can't be accessed like this:
        //    string n = e._name;
        //    double s = e._salary;

        // '_name' is indirectly accessed via method:
        string n = e.GetName();

        // '_salary' is indirectly accessed via property
        double s = e.Salary;

C# language specification

For more information, see Declared accessibility in the C# Language Specification. The language specification is the definitive source for C# syntax and usage.

See also