-->

Полное руководство. С# 4.0

На нашем литературном портале можно бесплатно читать книгу Полное руководство. С# 4.0, Шилдт Герберт-- . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Полное руководство. С# 4.0
Название: Полное руководство. С# 4.0
Дата добавления: 16 январь 2020
Количество просмотров: 273
Читать онлайн

Полное руководство. С# 4.0 читать книгу онлайн

Полное руководство. С# 4.0 - читать бесплатно онлайн , автор Шилдт Герберт

В этом полном руководстве по C# 4.0 — языку программирования, разработанному специально для среды .NET, — детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.

В данной книге вы найдете:- Полное описание средств языка C#- Подробное рассмотрение новых средств в версии C# 4.0, в том числе PLINQ, библиотеку TPL, именованные и необязательные аргументы, динамический тип данных и многое другое- Сотни простых и понятных примеров программ с комментариями.- Самый полный источник информации по C#Благодаря поддержке параллельного языка интегрированных запросов (PLINQ) и библиотеки распараллеливания задач (TPL) версия 4.0 стала новой вехой в программировании на C#, и поэтому Герберт Шилдт, автор лучших книг по программированию, обновил и расширил свое классическое руководство, чтобы охватить в нем эти и другие нововведения. В книге подробно описываются языковые средства C#, даются профессиональные рекомендации и приводятся сотни примеров программ, охватывающих все аспекты программирования на C#, включая синтаксис, ключевые слова и основные библиотеки, не говоря уже о таких новшествах, как PLINQ, TPL, динамический тип данных, а также именованные и необязательные аргументы.Это необходимое каждому программирующему на C# справочное руководство написано простым и доступным языком, благодаря которому Герберт Шилдт стал таким популярным. В книге найдут ответы на насущные вопросы по C# как начинающие, так и опытные программисты.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 65 66 67 68 69 70 71 72 73 ... 188 ВПЕРЕД
Перейти на страницу:

Переменная а служит для обращения к базовому массиву по ссылке. Память длянего распределяется конструктором класса RangeArray. Нижняя граница индексирования массива хранится в переменной lowerBound, а верхняя граница — в переменной upperBound.Далее объявляются автоматически реализуемые свойства Length и Error.

// Автоматически реализуемое и доступное только для чтения свойство Length.public int Length { get; private set; }// Автоматически реализуемое и доступное только для чтения свойство Error.public bool Error { get; private set; }Обратите внимание на то, что в обоих свойства аксессор set обозначен как private.Как пояснялось выше, такое объявление автоматически реализуемого свойства, по существу, делает его доступным только для чтения.Ниже приведен конструктор класса RangeArray.

// Построить массив по заданному размеру.public RangeArray(int low, int high) { high++; if(high <= low) { Console.WriteLine("Неверные индексы"); high = 1; // создать для надежности минимально допустимый массив low = 0; } а = new int[high - low]; Length = high - low; lowerBound = low; upperBound = --high;}При конструировании объекту класса RangeArray передается нижняя границамассива в качестве параметра low, а верхняя граница — в качестве параметра high.Затем значение параметра high инкрементируется, поскольку пределы индексирования массива изменяются от low до high включительно. Далее выполняется следующаяпроверка: является ли верхний индекс больше нижнего индекса. Если это не так, товыдается сообщение об ошибке и создается массив, состоящий из одного элемента.После этого для массива распределяется память, а ссылка на него присваивается переменной а. Затем свойство Length устанавливается равным числу элементов массива.И наконец, устанавливаются переменные lowerBound и upperBound.Далее в классе RangeArray реализуется его индексатор, как показано ниже.

// Это индексатор для класса RangeArray.public int this[int index] { // Это аксессор get. get { if(ok(index)) { Error = false; return a[index - lowerBound]; } else { Error = true; return 0; } } // Это аксессор set. set { if(ok(index)) { a[index - lowerBound] = value; Error = false; } else Error = true; }}Этот индексатор подобен тому, что использовался в классе FailSoftArray, за одним существенным исключением. Обратите внимание на следующее выражение, в котором индексируется массив а.

index - lowerBoundВ этом выражении индекс, передаваемый в качестве параметра index, преобразуется в индекс с отсчетом от нуля, пригодный для индексирования массива а. Данноевыражение действует при любом значении переменной lowerBound: положительном,отрицательном или нулевом.Ниже приведен метод ok().

// Возвратить логическое значение true, если// индекс находится в установленных границах.private bool ok(int index) { if(index >= lowerBound & index <= upperBound) return true; return false;}```Этот метод аналогичен использовавшемуся в классе FailSoftArray, за исключением того, что в нем контроль границ массива осуществляется по значениям переменных lowerBound и upperBound.

Класс RangeArray демонстрирует лишь одну разновидность специализированногомассива, который может быть создан с помощью индексаторов и свойств. Существуют, конечно, и другие. Аналогичным образом можно, например, создать динамические массивы, которые расширяются или сужаются по мере надобности, ассоциативные и разреженные массивы. Попробуйте создать один из таких массивов в качествеупражнения.

ГЛАВА 11. Наследование

Наследование является одним из трех основополагающих принципов объектно-ориентированного программирования, поскольку оно допускает созданиеиерархических классификаций. Благодаря наследованиюможно создать общий класс, в котором определяются характерные особенности, присущие множеству связанныхэлементов. От этого класса могут затем наследовать другие,более конкретные классы, добавляя в него свои индивидуальные особенности.

В языке C# класс, который наследуется, называетсябазовым, а класс, который наследует, — производным.Следовательно, производный класс представляет собой специализированный вариант базового класса. Он наследуетвсе переменные, методы, свойства и индексаторы, определяемые в базовом классе, добавляя к ним свои собственныеэлементы.Основы наследования

Поддержка наследования в C# состоит в том, что в объявление одного класса разрешается вводить другой класс. Дляэтого при объявлении производного класса указываетсябазовый класс. Рассмотрим для начала простой пример.Ниже приведен класс TwoDShape, содержащий ширинуи высоту двухмерного объекта, например квадрата, прямоугольника, треугольника и т.д.// Класс для двумерных объектов.class TwoDShape { public double Width; public double Height; public void ShowDim() { Console.WriteLine("Ширина и высота равны " + Width + " и " + Height); }}

Класс TwoDShape может стать базовым, т.е. отправной точкой для создания классов,описывающих конкретные типы двумерных объектов. Например, в приведенной нижепрограмме класс TwoDShape служит для порождения производного класса Triangle.Обратите особое внимание на объявление класса Triangle.// Пример простой иерархии классов.using System;// Класс для двумерных объектов.class TwoDShape { public double Width; public double Height; public void ShowDim() { Console.WriteLine("Ширина и высота равны " + Width + " и " + Height); }}// Класс Triangle, производный от класса TwoDShape.class Triangle : TwoDShape { public string Style; // тип треугольника // Возвратить площадь треугольника. public double Area() { return Width * Height / 2; } // Показать тип треугольника. public void ShowStyle() { Console.WriteLine("Треугольник " + Style); }}class Shapes { static void Main() { Triangle t1 = new Triangle(); Triangle t2 = new Triangle(); t1.Width = 4.0; t1.Height = 4.0; t1.Style = "равнобедренный"; t2.Width = 8.0; t2.Height = 12.0; t2.Style = "прямоугольный"; Console.WriteLine("Сведения об объекте t1: "); t1.ShowStyle(); t1.ShowDim(); Console.WriteLine("Площадь равна " + t1.Area()); Console.WriteLine(); Console.WriteLine("Сведения об объекте t2: "); t2.ShowStyle(); t2.ShowDim(); Console.WriteLine("Площадь равна " + t2.Area()); }}

При выполнении этой программы получается следующий результат.Сведения об объекте t1:Треугольник равнобедренныйШирина и высота равны 4 и 4Площадь равна 8Сведения об объекте t2:Треугольник прямоугольныйШирина и высота равны 8 и 12Площадь равна 48

В классе Triangle создается особый тип объекта класса TwoDShape (в данном случае — треугольник). Кроме того, в класс Triangle входят все члены класса TwoDShape,к которым, в частности, добавляются методы Area() и ShowStyle(). Так, описаниетипа треугольника сохраняется в переменной Style, метод Area() рассчитывает и возвращает площадь треугольника, а метод ShowStyle() отображает тип треугольника.Обратите внимание на синтаксис, используемый в классе Triangle для наследования класса TwoDShape.class Triangle : TwoDShape {

Этот синтаксис может быть обобщен. Всякий раз, когда один класс наследует отдругого, после имени базового класса указывается имя производного класса, отделяемое двоеточием. В C# синтаксис наследования класса удивительно прост и удобен в использовании.

В класс Triangle входят все члены его базового класса TwoDShape, и поэтомув нем переменные Width и Height доступны для метода Area(). Кроме того, объектыt1 и t2 в методе Main() могут обращаться непосредственно к переменным Width иHeight, как будто они являются членами класса Triangle. На рис. 11.1 схематическипоказано, каким образом класс TwoDShape вводится в класс Triangle.

Полное руководство. С# 4.0 - _12.jpg

Рис. 11.1. Схематическое представление класса Triangle

Несмотря на то что класс TwoDShape является базовым для класса Triangle, в тоже время он представляет собой совершенно независимый и самодостаточный класс.Если класс служит базовым для производного класса, то это совсем не означает, что онне может быть использован самостоятельно. Например, следующий фрагмент кодасчитается вполне допустимым.TwoDShape shape = new TwoDShape();shape.Width = 10;shape.Height = 20;shape.ShowDim();

1 ... 65 66 67 68 69 70 71 72 73 ... 188 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название