Access modifiers control what code can see and use a class member.
public — accessible from anywhereprivate — accessible only within the same class (default for members)protected — accessible within the class and derived classesinternal — accessible within the same assemblyprotected internal — accessible from the same assembly OR derived classesprivate protected — derived classes within the same assembly onlypublic class BankAccount
{
public string Owner { get; } // anyone
private decimal _balance; // this class only
private string _pin;
public decimal Balance => _balance; // read-only to outside
public BankAccount(string owner, decimal initial, string pin)
{
Owner = owner;
_balance = initial;
_pin = pin;
}
public bool Withdraw(decimal amount, string pin)
{
if (!VerifyPin(pin)) return false;
if (amount > _balance) return false;
_balance -= amount;
return true;
}
private bool VerifyPin(string pin) =>
string.Equals(_pin, pin, StringComparison.Ordinal);
}
public class User
{
public string Name { get; private set; } // public read, private write
public string Role { get; protected set; }
public void ChangeName(string newName) => Name = newName; // allowed inside class
}