Oto fragment kodu z książki:

class Game {
	privste player Player;
	public Rectangle Boundaries {get; private set;}
	
	public Game(Rectangle boundaries) {
		this.boundaries = boundaries;
	}
	
	public void Move(Direction direction) {
		player.Move(direction);
	}
}

class Mover {
	protected Point location;
	public Point Location {get { return location; } }
	protected Game game;
	
	public Mover(Game game, Point startingLocation) {
		this.game = game;
		this.location = startingLocation;
	}
	
	public Point Move(Direction direction, Rectangle boundaries) {
		Point newLocation = location;
		switch (direction) {
			case Direction.Up:
				if (newLocation.Y - MoveInterval >= boundaries.Top)
					newLocation.Y -= MoveInterval;
				break;
			//to samo dla reszty kierunków świata	
		}
		return newLocation;
	}
}

class Player : Mover {
	public void Move(Direction direction) {
		base.location = Move(direction, game.Boundaries);
	}
}

Zastanawiam się po co w sygnaturze metody Move w klasie Mover podajemy w parametrze Rectangle boundaries. Chodzi o to, że przecież Mover posiada referencję do Game, więc jaki jest w tym sens? Usunąłem więc ten parametr z sygnatury, jednak napotkałem błąd. Teraz Player oraz Mover posiadają takie same parametry metody Move, więc metoda z klasy Player jest ukryta. Nie mogę natomiast przesłonić metody, ponieważ jedna metoda zwraca Point a druga jest void. Co w takim przypadku powinienem zrobić? Czy wersja książkowa jest poprawna?

Druga sprawa, czy w linijce Point newLocation = location; nie powinno być czasem Point newLocation = Location;, czy nie ma to większego znaczenia? Chodzi mi o to, że do odczytywania powinniśmy chyba użyć publicznej właściwości, a nie prywatnego pola. Gdybym trochę rozbudował tą właściwość i dodał tam jakąś metodę, to musiałbym w tym miejscu zmienić z prywatnego pola na publiczną właściwość.