OriginalGriff
Эрик абсолютно прав, но это может помочь вам думать о машинах вместо классов.
Вы привыкли к понятиям "моя машина" и "ваша машина"; "эта машина" и "та машина" - и осознаете, что каждая из них может быть разной или меняться в зависимости от обстоятельств. Это вы идете вдоль ряда транспортных средств, глядя на каждый по очереди, а затем "этот автомобиль" меняется по мере движения. Машины не меняются, но ваша ссылка на них меняется.
Ряд автомобилей-это набор экземпляров класса "автомобиль" , и когда вы идете, вы мысленно переназначаете "этот автомобиль" на каждый новый экземпляр по очереди, поэтому вы можете обсуждать каждый экземпляр, используя одни и те же слова: "какого цвета этот автомобиль?"; "какая марка этого автомобиля?"
Ответ меняется в зависимости от того, перед каким автомобилем вы в данный момент стоите, потому что каждый раз, когда вы спрашиваете, "этот автомобиль" проверяет, какой экземпляр автомобиля вы имеете в виду, и это конкретные данные.
this
в C# служит той же цели: он ссылается на текущий экземпляр класса, который "доступен", когда выполняется ваш код - и будет меняться, поскольку ваш код вне класса использует разные экземпляры.
Он всегда доступен - за исключением статических методов, которые не работают с экземплярами, но которые имеют дело с вопросами, которые затрагивают все экземпляры: "сколько колес у автомобиля?" например, это статический вопрос, потому что вам не нужно ходить вокруг автомобиля, считая шины, чтобы знать, что результат "четыре" - если бы у него было только два, это был бы мотоцикл!
В большинстве случаев вам не нужно его использовать - это подразумевается использованием нестатического свойства или метода-единственный раз, когда у вас есть локальная переменная (или параметр), которая имеет то же имя, что и переменная уровня класса, и вам нужно явно указать версию уровня класса.
В этом есть смысл?
Eric Lynch
Хорошо, мне нравится аналогия. Хотя, для статических классов, как насчет этих фанковых трехколесных автомобилей :)