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

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

Полное руководство. С# 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 ... 69 70 71 72 73 74 75 76 77 ... 188 ВПЕРЕД
Перейти на страницу:

Выполнение этого кода приводит к следующему результату.Член i в базовом классе: 1Член i в производном классе: 2

Как видите, в выражении base.Show() вызывается вариант метода Show() из базового класса.

Обратите также внимание на следующее: ключевое слово new используется в приведенном выше коде с целью сообщить компилятору о том, что метод Show(), вновьобъявляемый в производном классе В, намеренно скрывает другой метод Show(),определенный в базовом классе А.Создание многоуровневой иерархии классов

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

Для того чтобы показать, насколько полезной может оказаться многоуровневаяиерархия классов, рассмотрим следующий пример программы. В ней производныйкласс Triangle служит в качестве базового для создания другого производного класса — ColorTriangle. При этом класс ColorTriangle наследует все характерные особенности, а по существу, члены классов Triangle и TwoDShape, к которым добавляется поле color, содержащее цвет треугольника.// Пример построения многоуровневой иерархии классов.using System;class TwoDShape { double pri_width; double pri_height; // Конструктор, используемый по умолчанию. public TwoDShape() { Width = Height = 0.0; } // Конструктор для класса TwoDShape. public TwoDShape(double w, double h) { Width = w; Height = h; } // Сконструировать объект равной ширины и высоты. public TwoDShape(double х) { Width = Height = x; } // Свойства ширины и высоты объекта. public double Width { get { return pri_width; } set { pri_width = value < 0 ? -value : value; } } public double Height { get { return pri_height; } set { pri_height = value < 0 ? -value : value; } } public void ShowDim() { Console.WriteLine("Ширина и высота равны " + Width + " и " + Height); }}// Класс для треугольников, производный от класса TwoDShape.class Triangle : TwoDShape { string Style; // закрытый член класса /* Конструктор, используемый по умолчанию. Автоматически вызывает конструктор, доступный по умолчанию в классе TwoDShape. */ public Triangle() { Style = "null"; } // Конструктор. public Triangle(string s, double w, double h) : base(w, h) { Style = s; } // Сконструировать равнобедренный треугольник. public Triangle(double x) : base(x) { Style = "равнобедренный"; } // Возвратить площадь треугольника. public double Area() { return Width * Height / 2; } // Показать тип треугольника. public void ShowStyle() { Console.WriteLine("Треугольник " + Style); }}// Расширить класс Triangle.class ColorTriangle : Triangle { string color; public ColorTriangle(string c, string s, double w, double h) : base(s, w, h) { color = c; } // Показать цвет треугольника. public void ShowColor() { Console.WriteLine("Цвет " + color); }}class Shapes6 { static void Main() { ColorTriangle t1 = new ColorTriangle("синий", "прямоугольный", 8.0, 12.0); ColorTriangle t2 = new ColorTriangle("красный", "равнобедренный", 2.0, 2.0); Console.WriteLine("Сведения об объекте t1: "); t1.ShowStyle(); t1.ShowDim(); t1.ShowColor(); Console.WriteLine("Площадь равна " + t1.Area()); Console.WriteLine(); Console.WriteLine("Сведения об объекте t2: "); t2.ShowStyle(); t2.ShowDim(); t2.ShowColor(); Console.WriteLine("Площадь равна " + t2.Area()); }}

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

Благодаря наследованию в классе ColorTriangle могут использоваться определенные ранее классы Triangle и TwoDShape, к элементам которых добавляется лишьта информация, которая требуется для конкретного применения данного класса.В этом отчасти и состоит ценность наследования, поскольку оно допускает повторноеиспользование кода.

Приведенный выше пример демонстрирует еще одно важное положение: ключевое слово base всегда обозначает ссылку на конструктор ближайшего по иерархиибазового класса. Так, ключевое слово base в классе ColorTriangle обозначает вызовконструктора из класса Triangle, а ключевое слово base в классе Triangle — вызовконструктора из класса TwoDShape. Если же в иерархии классов конструктору базового класса требуются параметры, то все производные классы должны предоставлятьэти параметры вверх по иерархии, независимо от того, требуются они самому производному классу или нет.Порядок вызова конструкторов

В связи с изложенными выше в отношении наследования и иерархии классов может возникнуть следующий резонный вопрос: когда создается объект производногокласса и какой конструктор выполняется первым — тот, что определен в производномклассе, или же тот, что определен в базовом классе? Так, если имеется базовый класс Аи производный класс В, то вызывается ли конструктор класса А раньше конструкторакласса В? Ответ на этот вопрос состоит в том, что в иерархии классов конструкторы вызываются по порядку выведения классов: от базового к производному. Более того, этотпорядок остается неизменным независимо от использования ключевого слова base.Так, если ключевое слово base не используется, то выполняется конструктор по умолчанию, т.е. конструктор без параметров. В приведенном ниже примере программыдемонстрируется порядок вызова и выполнения конструкторов.// Продемонстрировать порядок вызова конструкторов.using System;// Создать базовый класс.class А { public А() { Console.WriteLine("Конструирование класса А."); }}// Создать класс, производный от класса А.class В : А { public В() { Console.WriteLine("Конструирование класса В."); }}// Создать класс, производный от класса В.class С : В { public С() { Console.WriteLine("Конструирование класса С."); }}class OrderOfConstruction { static void Main() { С с = new С(); }}

Вот к какому результату приводит выполнение этой программы.Конструирование класса А.Конструирование класса В.Конструирование класса С.

Как видите, конструкторы вызываются по порядку выведения их классов.

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

Как вам должно быть уже известно, C# является строго типизированным языкомпрограммирования. Помимо стандартных преобразований и автоматического продвижения простых типов значений, в этом языке строго соблюдается принцип совместимости типов. Это означает, что переменная ссылки на объект класса одного типа,как правило, не может ссылаться на объект класса другого типа. В качестве примерарассмотрим следующую программу, в которой объявляются два класса одинаковойструктуры.// Эта программа не подлежит компиляции.class X { int а; public X(int i) { a = i; }}class Y { int a; public Y(int i) { a = i; }}class IncompatibleRef { static void Main() { X x = new X(10); X x2; Y у = new Y(5); x2 = x; // верно, поскольку оба объекта относятся к одному и тому же типу х2 = у; // ошибка, поскольку это разнотипные объекты }}

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