1) WebClient является управляемым типом, поэтому вам не нужен финализатор. Финализатор необходим в том случае, если ваши пользователи не Dispose () вашего класса NoGateway и после этого необходимо очистить собственный тип (который не собирается GC). В этом случае, если пользователь не вызывает Dispose (), содержащийся в нем WebClient будет удален GC сразу после того, как это сделает NoGateway.
2) Косвенно да, но вам не нужно об этом беспокоиться. Ваш код верен, и вы не можете помешать пользователям легко забыть Dispose ().