Указатели в C# это переменные диапазон значений которых состоит из адресов ячеек памяти или специальных значений — нулевых адресов. В C# - указатели могут быть объявлены только для удержания адреса переменной и массива. Указатели объявляются неявно, с использованием символа *, как показано в следующем примере:
int *p; // Или int* p; Данное объявление указателя создает ссылку на начальный адрес памяти целого числа. Звездочка (*) в нашем выражении служит оператором разыменования. Таким образом, мы объявили переменную указателя p, которая содержит в себе адрес переменной типа int. Обратный оператор генерирования ссылки (&), используется для получения адреса переменной.
Указатель this - это указатель на объект, для которого был вызван нестатический метод. Ключевое слово this обеспечивает доступ к текущему экземпляру класса. Классический пример использования this, это как раз в конструкторах, при одинаковых именах полей класса и аргументов конструктора. Ключевое слово this это что-то вроде имени объекта, через которое мы имеем доступ к текущему объекту.
Переопределяемый метод в производном классе объявляется при помощи модификатора virtual. В производном классе для объявления переопределенного метода используется модификатор override.
Модификатор override обозначает метод или свойство производного класса, который заменяет его тем же именем и подписью в базовом классе. Базовый метод, который будет перезаписан, должен быть объявлен как virtual, abstract или override: таким способом нельзя переопределить статический метод или метод, не являющийся виртуальным. Как переопределенный, так и переопределяемый метод или свойство должны иметь одинаковые модификаторы уровня доступа.