[c#] When to use in vs ref vs out

Extra notes regarding C# 7:
In C# 7 there's no need to predeclare variables using out. So a code like this:

public void PrintCoordinates(Point p)
{
  int x, y; // have to "predeclare"
  p.GetCoordinates(out x, out y);
  WriteLine($"({x}, {y})");
}

Can be written like this:

public void PrintCoordinates(Point p)
{
  p.GetCoordinates(out int x, out int y);
  WriteLine($"({x}, {y})");
}

Source: What's new in C# 7.