A method can declare a `Player` parameter when its behavior depends on a Player object's state. The caller provides a Player reference as the argument.
A Player may hold both `Name` and `NumberOfTurns`. A Game method that describes a Player can read both fields through one parameter:
public string DescribePlayer(Player participant)The signature says that the method accepts a Player and returns a string. Inside the method, `participant.Name` and `participant.NumberOfTurns` refer to fields on that Player.
A call with Jordan's Player reads Jordan's fields. A later call with Casey's Player reads Casey's fields. The method definition stays the same; the argument changes which object the parameter reaches.
A method can receive two Player references:
public bool HasMoreTurns(Player first, Player second)The first and second arguments supply those parameters in order. They may refer to different Players, or they may both refer to one Player.
A Player parameter can contain `null`. Reading `participant.Name` in that case throws a `NullReferenceException`, because no Player object is available through the parameter.