Главная » Просмотр файлов » Г. Шилдт - Полный справочник по C#

Г. Шилдт - Полный справочник по C# (1160789), страница 43

Файл №1160789 Г. Шилдт - Полный справочник по C# (Г. Шилдт - Полный справочник по C#) 43 страницаГ. Шилдт - Полный справочник по C# (1160789) страница 432019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 43)

Поэтому лучше реализовать "фабрику" класса, используя s t a t i c метод, который позволяет обращаться к нему, не создавая ненужного объекта. Нижеприводится пример реализации "фабрики" класса, переписанный с учетом этого усовершенствования.// Создание статической "фабрики" класса.using System;class MyClass {int a, b;// Создаем "фабрику" для класса MyClass.static public MyClass factory(int i, int j) {MyClass t = new MyClass();t.a = i;t.b = j;return t; // Метод возвращает объект.public void show() {Console.WriteLine("а и b: " + a + " " + b ) ;class MakeObjects {public static void Main() {int i, j ;// Генерируем объекты с помощью "фабрики" класса.for(i=0, j=10; i < 10; i++, j — ) {MyClass ob = MyClass.factory(i, j ) ; // Получение// объекта.ob.show{);222Часть I.

Язык С #IConsole.WriteLine();В этой версии программы метод f a c t o r y () вызывается посредством указанияимени класса:I MyClass ob = M y C l a s s . f a c t o r y ( i , j ) ; // Получение объекта.Этот пример показывает, что нет необходимости создавать объект класса MyClassдо использования "фабрики" класса.Статические конструкторыКонструктор класса также можно объявить статическим. Статический конструкторобычно используется для инициализации атрибутов, которые применяются к классу вцелом, а не к конкретному его экземпляру. Таким образом, статический конструкторслужит для инициализации аспектов класса до создания объектов этого класса. Рассмотрим простой пример.// Использование статического конструктора.using System;class Cons {public static int alpha;public int beta;s// Статический конструктор,static Cons() {alpha = 99;Console.WriteLine("Внутри статического конструктора.");}// Конструктор экземпляра,public Cons() {beta = 100;Console.WriteLine("Внутри конструктора экземпляра.");class ConsDemo {public static void Main() {Cons ob = new Cons();Console.WriteLine("Cons.alpha: " + Cons.alpha);Console.WriteLine("ob.beta: " + ob.beta);Вот результаты выполнения этой программы:Внутри статического конструктора.Внутри конструктора экземпляра.Cons.alpha: 99o b .

b e t a : 100Обратите внимание на то, что статический конструктор вызывается автоматически,причем до вызова конструктора экземпляра. В общем случае static-конструктор будет выполнен до любого конструктора экземпляра. Кроме того, static-конструкторыдолжны быть закрытыми, и их не может вызвать ваша программа.Глава 8. Подробнее о методах и классах223Полныйсправочник поПерегрузка операторовЯзык С# позволяет определить значение оператора относительно создаваемогокласса. Этот процесс называется перегрузкой операторов.

Перефужая оператор,вы расширяете его использование для класса. Результат действия оператора полностью находится в ваших руках, и может быть разным при переходе от класса к классу.Например, класс, который определяет связный список, может использовать оператор" + " для добавления объектов в список. Класс, который реализует стек, может использовать оператор " + " для занесения объекта в стек. А какой-то другой класс может использовать этот оператор иным способом.При перефузке оператора ни одно из его исходных значений не теряется. Перефузку оператора можно расценивать как введение новой операции для класса.

Следовательно, перефузка оператора " + " , например, для обработки связного списка (в качестве оператора сложения) не изменяет его значение применительно к целым числам.Главное достоинство перефузки операторов состоит в том, что она позволяет бесшовно интефировать новый тип класса со средой профаммирования. Эта расширяемость типов — важная составляющая мощи таких объектно-ориентированных языковпрофаммирования, как С#. Если для класса определены некоторые операторы, выможете оперировать объектами этого класса, используя обычный С#-синтаксис выражений.

Более того, вы можете использовать в выражениях объект, включающий другие типы данных. Перефузка операторов — одно из самых мощных средств языка С#.Основы перегрузки операторовПерефузка операторов тесно связана с перефузкой методов. Для перегрузки операторов используется ключевое слово o p e r a t o r , позволяющее создать операторныйметод, который определяет действие оператора, связанное с его классом.Существует две формы методов o p e r a t o r : одна используется для унарных операторов, а другая — для бинарных.

Общий же формат (для обоих случаев) таков:// Общий формат перегрузки для унарного оператора,public s t a t i c тип_возврата operator ор{тип_параметра операнд){// операции}// Общий формат перегрузки для бинарного оператора,public static тип_возврата operator op{тип_параметра1 операнд1,тип_параметра2 операнд2){// операции}Здесь элемент ор — это оператор (например " + " или " / " ) , который перефужается.Элемент тип_возврата — это тип значения, возвращаемого при выполнении заданной операции.

Несмотря на то что можно выбрать любой тип, тип возвращаемогозначения чаще всего будет совпадать с типом класса, для которого этот оператор перефужается. Такая корреляция облегчает использование перефуженного оператора ввыражениях. Для унарных операторов операнд передается в элементе операнд, а длябинарных — в элементах операнд1 и операнд2.Для унарных операторов тип операнда должен совпадать с классом, для которогоопределен оператор.

Что касается бинарных операторов, то тип хотя бы одного опе-Глава 9. Перегрузка операторов225ранда должен совпадать с соответствующим классом. Таким образом, С#-операторынельзя перегружать для классов, не созданных вами. Например, вы не можете перегрузить оператор " + " для типов i n t или s t r i n g .И последнее: параметры операторов не должны использовать модификатор refили out.Перегрузка бинарных операторовЧтобы разобраться, как работает перегрузка операторов, начнем с примера, в котором перегружаются два бинарных оператора — " + " и " - " . В следующей программесоздается класс ThreeD поддержки координат объекта в трехмерном пространстве.Перегруженный оператор " + " выполняет сложение отдельных координат двухThreeD-объектов, а перегруженный оператор " - " вычитает координаты одногоjrhr ее D-объекта из координат другого.// Пример перегрузки операторов.using System;// Класс трехмерных координат,class ThreeD {int x, у, z; // 3-х-мерные координаты.public ThreeD () { x = у = z = 0; }public ThreeD(int i, int j, int k) {x = i; у = j;k; }// Перегрузка бинарного оператора "+".public static ThreeD operator +(ThreeD opl,ThreeD op2)ThreeD result = new ThreeD();/* Суммирование координати возврат результата.result.x = opl.x + op2.x;result.у = opl.у + ор2.у;result.z = opl.z + op2.z;двух точек/// Эти операторы выполняют// целочисленное сложение,return result;// Перегрузка бинарного оператора "-".public static ThreeD operator -(ThreeD opl, ThreeD op2){ThreeD result = new ThreeD();/* Обратите внимание на порядок операндов.opl - левый операнд, ор2 - правый.

*/result.х = opl.x - ор2.х; // Эти операторы выполняютresult.у = opl.у - ор2.у; // целочисленное вычитание,result.z = opl.z - op2.z;return result;// Отображаем координаты X, Y, Z.226Часть I. Язык С#public void show(){Console.WriteLine(x + ", " + у + ", " + z) ;c l a s s ThreeDDemo {p u b l i c s t a t i c void Main() {ThreeD a = new ThreeD(1, 2, 3 ) ;ThreeD b = new ThreeDdO, 10, 10);ThreeD с = new ThreeD();Console.Write("Координаты точки а: " ) ;a.show();Console.WriteLine();Console.Write("Координаты точки b: " ) ;b. show() ;Console.WriteLine();с = a + b; // Складываем а и b.Console.Write("Результат сложения а + b:с.show();Console.WriteLine();");c = a + b + c ;// Складываем a, b и с.Console.Write("Результат сложения а + b + с: " ) ;с.show();Console.WriteLine();с = с - a; // Вычитаем а из с.Console.Write("Результат вычитания с - а: " ) ;с.show();Console.WriteLine();с = с - b; // Вычитаем b из с.Console.Write("Результат вычитания с - Ь:с.show();Console.WriteLine();");При выполнении эта программа генерирует следующие результаты:Координаты точки а :1,Координаты точки Ь : 10,2,310,10Результатсложения а + Ь: 1 1 , 12,13Результатсложения а + Ь + с :24,Результатвычитания с - а :22,2 1 , 22,2623Р е з у л ь т а т вычитания с - Ь : 1 1 , 12, 13Эту программу стоит рассмотреть подробнее.

Начнем с перегруженного оператора" + " . При воздействии оператора " + " на два объекта типа ThreeD величины соответствующих координат суммируются, как показано в методе o p e r a t o r s - ( ) . Однако заметьте, что этот метод не модифицирует значения ни одного из операндов. Этот меГлава 9. Перегрузка операторов227тод возвращает новый объект типа ThreeD, который содержит результат выполнениярассматриваемой операции. Это происходит и в случае стандартного арифметическогооператора сложения " + " , примененного, например, к числам 10 и 12.

Результат операции 10+12 равен 22, но при его получении ни 10, ни 12 не были изменены. Хотя несуществует правила, которое бы не позволяло перегруженному оператору изменятьзначение одного из его операндов, все же лучше, чтобы он не противоречил общепринятым нормам.Обратите внимание на то, что метод o p e r a t o r * () возвращает объект типа ThreeD.Несмотря на то что он мог бы возвращать значение любого допустимого в С# типа,тот факт, что он возвращает объект типа ThreeD, позволяет использовать оператор"+" в таких составных выражениях, как а+ь+с Здесь часть этого выражения, а+b, генерирует результат типа ThreeD, который затем суммируется с объектом с.

Характеристики

Тип файла
PDF-файл
Размер
24,15 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее