This c что это
Ключевое слово this представляет указатель на текущий объект данного класса. Соответственно через this мы можем обращаться внутри класса к любым его членам.
В данном случае определен класс Point, который представляет точку на плоскости. И для хранения координат точки в классе определены переменные x и y.
Для обращения к переменным используется указатель this . Причем после this ставится не точка, а стрелка -> .
В большинстве случаев для обращения к членам класса вряд ли поднадобится ключевое слово this. Но оно может быть необходимо, если параметры функции или переменные, которые определяются внутри функции, называются также как и переменные класса. К примеру, чтобы в конструкторе разграничить параметры и переменные класса как раз и используется указатель this.
С помощью this можно возвращать текущий объект класса:
Здесь метод move с помощью указателя this возвращает ссылку на объект текущего класса, осуществляя условное перемещение точки. Таким образом, мы можем по цепочке для одного и того же объекта вызывать метод move:
Здесь также важно отметить возвращение не просто объекта Point, а ссылки на этот объект. Так, в данном случае выге определенная строка фактически будет аналогично следующему коду:
Но если бы метод move возвращал бы не ссылку, а посто объект:
То вызов p1.move(10, 5).move(10) был бы фактически эквивалентен следующему коду:
Где второй вызов метода move вызывался бы для временной копии и никак бы не затрагивал переменную p1.
Ключевое слово this

В языке C# имеется ключевое слово this, которое обеспечивает доступ к текущему экземпляру класса. Одно из возможных применений ключевого слова this состоит в том, чтобы разрешать неоднозначность контекста, которая может возникнуть, когда входящий параметр назван так же, как поле данных данного типа. Разумеется, в идеале необходимо просто придерживаться соглашения об именовании, которое не может привести к такой неоднозначности.
Чтобы продемонстрировать наглядное применение ключевого слова this, давайте рассмотрим следующий пример:

Этот код нормально компилируется, но Visual Studio 2010 отобразит предупреждающее сообщение о том, что переменная присваивается сама себе в методе Method1(). Так же обнаружится, что значением поля ch осталась пустая строка при вызове первого метода! Эту ситуацию позволяет избежать как раз применение ключевого слова this, как это показано в примере в методе Method2().

Помимо небольшого выигрыша от использования this в неоднозначных ситуациях, это ключевое слово может быть полезно при реализации членов, поскольку такие IDE-среды, как SharpDevelop и Visual Studio 2010, включают средство IntelliSense, когда вводится this. Это может здорово помочь, когда вы забыли название члена класса и хотите быстро вспомнить его определение.
Constructor chaining
Другое применение ключевого слова this состоит в проектировании класса, использующего технику под названием сцепление конструкторов или цепочка конструкторов (constructor chaining). Этот шаблон проектирования полезен, когда имеется класс, определяющий несколько конструкторов. Учитывая тот факт, что конструкторы часто проверяют входящие аргументы на соблюдение различных бизнес-правил, возникает необходимость в избыточной логике проверки достоверности внутри множества конструкторов.

Поток логики конструкторов в данном примере описан ниже:
Создается объект за счет вызова конструктора, который принимает один аргумент типа byte.
Конструктор передает полученные данные ведущему конструктору, добавляя необходимые дополнительные начальные аргументы, не указанные вызывающим кодом.
Ведущий конструктор присваивает входные данные полям объекта.
Управление возвращается первоначально вызванному конструктору, который выполняет остальные операторы кода.
В построении цепочки конструкторов замечательно то, что этот шаблон программирования работает с любой версией языка C# и платформой .NET. Однако если целевой платформой является .NET 4.0, можно еще более упростить задачу программирования за счет использования необязательных аргументов в качестве альтернативы традиционным цепочкам конструкторов.
Неявный указатель this
Ключевое слово this представляет собой неявно определенный указатель на сам объект. С его помощью метод класса определяет, с данными какого объекта ему предстоит работать. Каждый метод класса неявно содержит в качестве поля данных указатель:
При вызове метода ему передается неявный аргумент, содержащий адрес объекта, для которого эта функция вызывается.
В первом случае функции readm() неявно передается указатель на объект aa , а во втором случае – bb .
Использование this необходимо в функциях, которые непосредственно работают с указателем на объект:
- this – указатель на объект (адрес объекта)
- * this – разыменованый указатель (сам объект)
Указатель this удобно использовать, например, в конструкторах, когда имена передаваемых параметров совпадают с именами полей класса.
В случае если аргументы и поля класса имеют разные имена, указатель this при обращении к полям класса может быть опущен. Но в приведенном выше примере использование this указывает, что мы ходим обратиться именно к полю класса.
Внутри тела класса могут использоваться ссылки или указатели на тот же класс. Это позволяет строить рекурсивные структуры класса.
Указатель this может быть использован только для нестатического метода.
Результат выполнения: 