Шилдт Герберт
Шрифт:
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 rl = new Rect(4, 5);
Rect r2 = new Rect(7, 9);
Console.WriteLine("Площадь прямоугольника rl: " + rl.AreaO);
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 rl = new Rect(4, 5);
Rect r2 = new Rect(7, 9);
Console.WriteLine("Площадь прямоугольника rl: " + rl.AreaO);
Console.WriteLine("Площадь прямоугольника r2: " + r2.Area);
}
}
В действительности ключевое слово this не используется приведенным выше способом в программировании на С#, поскольку это практически ничего не дает, да и стандартная форма записи намного проще и понятнее. Тем не менее ключевому слову this можно найти не одно полезное применение. Например, в синтаксисе C# допускается называть параметр или локальную переменную тем же именем, что и у переменной экземпляра. В этом случае имя локальной переменной скрывает переменную экземпляра. Для доступа к скрытой переменной экземпляра и служит ключевое слово this. Например, приведенный ниже код является правильным с точки зрения синтаксиса C# способом написания конструктора Rect .
public Rect(int Width, int Height) { this.Width = Width; this.Height = Height;
}
В этом варианте написания конструктора Rect имена параметров совпадают с именами переменных экземпляра, а следовательно, скрывают их. Но для "обнаружения" скрытых переменных служит ключевое слово this.
ГЛАВА 7 Массивы и строки
В этой главе речь вновь пойдет о типах данных в С#. В ней рассматриваются массивы и тип string, а также оператор цикла fore a ch.
Массивы
Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем. В C# массивы могут быть как одномерными, так и многомерными, хотя чаще всего применяются одномерные массивы. Массивы служат самым разным целям, поскольку они предоставляют удобные средства для объединения связанных вместе переменных. Например, в массиве можно хранить максимальные суточные температуры, зарегистрированные в течение месяца, перечень биржевых курсов или же названия книг по программированию из домашней библиотеки.