Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Ключевое слово this C# Полное руководство Герберт Шилдт

Ключевое слово this C# Полное руководство Герберт Шилдт

Прежде чем завершать эту главу, необходимо представить ключевое слово this. Когда метод вызывается, ему автоматически передается ссылка на вызывающий объект, т.е. тот объект, для которого вызывается данный метод. Эта ссылка обозначается ключевым словом this. Следовательно, ключевое слово this обозначает именно тот объект, по ссылке на который действует вызываемый метод. Для того чтобы стало яснее назначение ключевого слова this, рассмотрим сначала пример программы, в которой создается класс Rect, инкапсулирующий ширину и высоту прямоугольника и включающий в себя метод Area (), возвращающий площадь прямоугольника.

using System;

class Rect {
   public int Width;
   public int Height;

   public Rect(int w, int h) {
      Width = w;
      Height = h;
   }

   public int Area() {
      return Width * Height;
   }
}

class UseRect {
   static void Main() {
      Rect r1 = new Rect (4, 5) ;
      Rect r2 = new Rect (7, 9) ;

      Console.WriteLine("Площадь прямоугольника r1: " + r1.Area());
      Console. WriteLine ("Площадь прямоугольника r2 : " + r2 . Area () ) ;
   }
}


Как вам должно уже быть известно, другие члены класса могут быть доступны непосредственно без дополнительного уточнения имени объекта или класса. Поэтому оператор
   return Width * Height;
в методе Area () означает, что копии переменных Width и Height, связанные с вызывающим объектом, будут перемножены, а метод возвратит их произведение. Но тот же самый оператор можно написать следующим образом:
   return this.Width * this.Height;
В этом операторе ключевое слово this обозначает объект, для которого вызван метод Area (). Следовательно, в выражении this .Width делается ссылка на копию переменной Width данного объекта, а в выражении this. Height — ссылка на копию переменной Height этого же объекта. Так, если бы метод Area () был вызван для объекта х, то ключевое слово this в приведенном выше операторе обозначало бы ссылку на объект х. Написание оператора без ключевого слова this представляет собой не более чем сокращенную форму записи.
Ключевое слово this можно также использовать в конструкторе. В этом случае оно обозначает объект, который конструируется. Например, следующие операторы в методе Rect ()
   Width = w;
   Height = h;

можно было бы написать таким образом:
   this.Width = w;
   this.Height = h;

Разумеется, такой способ записи не дает в данном случае никаких преимуществ.
Ради примера ниже приведен весь класс Rect, написанный с использованием ссылки this.

using System;

class Rect {
   public int Width;
   public int Height;

   public Rect(int w, int h) {
      this.Width = w;
      this.Height = h;
   }

   public int Area() {
      return this.Width * this.Height;
   }
}

class UseRect {
   static void Main() {
      Rect r1 = new Rect (4, 5) ;
      Rect r2 = new Rect (7, 9) ;

      Console .WriteLine ("Площадь прямоугольника r1: " + r1 .Area () ) ;
      Console.WriteLine("Площадь прямоугольника r2: " + r2 . Area () ) ;
   }
}


В действительности ключевое слово this не используется приведенным выше способом в программировании на С#, поскольку это практически ничего не дает, да и стандартная форма записи намного проще и понятнее. Тем не менее ключевому слову this можно найти не одно полезное применение. Например, в синтаксисе C# допускается называть параметр или локальную переменную тем же именем, что и у переменной экземпляра. В этом случае имя локальной переменной скрывает переменную экземпляра. Для доступа к скрытой переменной экземпляра и служит ключевое слово this. Например, приведенный ниже код является правильным с точки зрения синтаксиса C# способом написания конструктора Rect ().
   public Rect(int Width, int Height) {
      this.Width = Width;
      this.Height = Height;
   }

В этом варианте написания конструктора RectO имена параметров совпадают с именами переменных экземпляра, а следовательно, скрывают их. Но для “обнаружения” скрытых переменных служит ключевое слово this.