SlideShare a Scribd company logo
1 of 16
Модуль 04 Введение в классы
1
Размещение объектов с помощью ключевого
слова new
2
Модификаторы доступов C#
3
 public: публичный, общедоступный класс или
член класса. Такой член класса доступен из
любого места в коде, а также из других программ
и сборок
 private: закрытый класс или член класса.
Представляет полную противоположность
модификатору public. Такой закрытый класс или
член класса доступен только из кода в том же
классе или контексте.
 protected: такой член класса доступен из
любого места в текущем классе или в
производных классах.
4
 internal: класс и члены класса с подобным
модификатором доступны из любого места кода в
той же сборке, однако он недоступен для других
программ и сборок (как в случае с
модификатором public).
 protected internal: совмещает функционал двух
модификаторов. Классы и члены класса с таким
модификатором доступны из текущей сборки и из
производных классов.
5
Константы и поля для чтения
6
Свойства
Автоматические свойства
Инициализация автосвойств
7
Понятие конструкторов
8
Роль ключевого слова this
Построение цепочки вызовов
конструктора с использование this
9
 Контекст класса
 Контекст метода
 Контекст блока кода
10
Виды контекстов
Понятие ключевого слова static
11
Определение статических конструкторов
12
 В отдельном классе может быть определен
только один статический конструктор
 Не имеет модификатор доступа и не может
принимать параметры
 Выполняется только один раз
Параметры методов
Передача параметров по ссылке и
модификатор ref
Модификатор out
13
Массив параметров и ключевое слово
params
14
Частичные классы
15
Определение кортежей
Использование кортежей
16

More Related Content

Similar to модуль 04

Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]Technopark
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.Igor Shkulipa
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Javaitc73
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работамstudent_kai
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
шаблоны проектирования (42)
шаблоны проектирования (42)шаблоны проектирования (42)
шаблоны проектирования (42)romachka_pole
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 

Similar to модуль 04 (20)

Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Lecture 4
Lecture 4Lecture 4
Lecture 4
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
лек13 3
лек13 3лек13 3
лек13 3
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работам
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Lec 2
Lec 2Lec 2
Lec 2
 
шаблоны проектирования (42)
шаблоны проектирования (42)шаблоны проектирования (42)
шаблоны проектирования (42)
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
Step 5
Step 5Step 5
Step 5
 

More from Yevgeniy Gertsen

модуль 18 сериализация объектов
модуль 18 сериализация объектовмодуль 18 сериализация объектов
модуль 18 сериализация объектовYevgeniy Gertsen
 
модуль 17 основы xml
модуль 17 основы xmlмодуль 17 основы xml
модуль 17 основы xmlYevgeniy Gertsen
 
модуль 17 основы xml
модуль 17 основы xmlмодуль 17 основы xml
модуль 17 основы xmlYevgeniy Gertsen
 
модуль 16 взаимодействие с файловой системой
модуль 16 взаимодействие с файловой системоймодуль 16 взаимодействие с файловой системой
модуль 16 взаимодействие с файловой системойYevgeniy Gertsen
 
модуль 14 введение в generics
модуль 14 введение в genericsмодуль 14 введение в generics
модуль 14 введение в genericsYevgeniy Gertsen
 
модуль 15 сборка мусора. рефлексия
модуль 15 сборка мусора. рефлексиямодуль 15 сборка мусора. рефлексия
модуль 15 сборка мусора. рефлексияYevgeniy Gertsen
 
модуль 13 использование коллекций
модуль 13 использование коллекциймодуль 13 использование коллекций
модуль 13 использование коллекцийYevgeniy Gertsen
 
модуль 12 делегаты, события
модуль 12 делегаты, событиямодуль 12 делегаты, события
модуль 12 делегаты, событияYevgeniy Gertsen
 
модуль 11 структуры, перечисления
модуль 11 структуры, перечислениямодуль 11 структуры, перечисления
модуль 11 структуры, перечисленияYevgeniy Gertsen
 
Модуль 10 Интерфейсы
Модуль 10 ИнтерфейсыМодуль 10 Интерфейсы
Модуль 10 ИнтерфейсыYevgeniy Gertsen
 
Модуль 07 Перегрузка операторов
Модуль 07 Перегрузка операторовМодуль 07 Перегрузка операторов
Модуль 07 Перегрузка операторовYevgeniy Gertsen
 
модуль 06 пространства имен
модуль 06 пространства именмодуль 06 пространства имен
модуль 06 пространства именYevgeniy Gertsen
 
модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключенийYevgeniy Gertsen
 
модуль 03 строки
модуль 03 строкимодуль 03 строки
модуль 03 строкиYevgeniy Gertsen
 
модуль 03 массивы
модуль 03 массивымодуль 03 массивы
модуль 03 массивыYevgeniy Gertsen
 
модуль 02 основы языка программирования c#
модуль 02 основы языка программирования c#модуль 02 основы языка программирования c#
модуль 02 основы языка программирования c#Yevgeniy Gertsen
 
модуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .netмодуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .netYevgeniy Gertsen
 

More from Yevgeniy Gertsen (20)

модуль 18 сериализация объектов
модуль 18 сериализация объектовмодуль 18 сериализация объектов
модуль 18 сериализация объектов
 
модуль 17 основы xml
модуль 17 основы xmlмодуль 17 основы xml
модуль 17 основы xml
 
модуль 17 основы xml
модуль 17 основы xmlмодуль 17 основы xml
модуль 17 основы xml
 
модуль 16 взаимодействие с файловой системой
модуль 16 взаимодействие с файловой системоймодуль 16 взаимодействие с файловой системой
модуль 16 взаимодействие с файловой системой
 
модуль 14 введение в generics
модуль 14 введение в genericsмодуль 14 введение в generics
модуль 14 введение в generics
 
модуль 15 сборка мусора. рефлексия
модуль 15 сборка мусора. рефлексиямодуль 15 сборка мусора. рефлексия
модуль 15 сборка мусора. рефлексия
 
модуль 13 использование коллекций
модуль 13 использование коллекциймодуль 13 использование коллекций
модуль 13 использование коллекций
 
модуль 12 делегаты, события
модуль 12 делегаты, событиямодуль 12 делегаты, события
модуль 12 делегаты, события
 
модуль 11 структуры, перечисления
модуль 11 структуры, перечислениямодуль 11 структуры, перечисления
модуль 11 структуры, перечисления
 
Модуль 10 Интерфейсы
Модуль 10 ИнтерфейсыМодуль 10 Интерфейсы
Модуль 10 Интерфейсы
 
модуль 09-02
модуль 09-02модуль 09-02
модуль 09-02
 
модуль 09-01
модуль 09-01модуль 09-01
модуль 09-01
 
модуль 08
модуль 08модуль 08
модуль 08
 
Модуль 07 Перегрузка операторов
Модуль 07 Перегрузка операторовМодуль 07 Перегрузка операторов
Модуль 07 Перегрузка операторов
 
модуль 06 пространства имен
модуль 06 пространства именмодуль 06 пространства имен
модуль 06 пространства имен
 
модуль 05 обработка исключений
модуль 05 обработка исключениймодуль 05 обработка исключений
модуль 05 обработка исключений
 
модуль 03 строки
модуль 03 строкимодуль 03 строки
модуль 03 строки
 
модуль 03 массивы
модуль 03 массивымодуль 03 массивы
модуль 03 массивы
 
модуль 02 основы языка программирования c#
модуль 02 основы языка программирования c#модуль 02 основы языка программирования c#
модуль 02 основы языка программирования c#
 
модуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .netмодуль 01 введение в платформу microsoft .net
модуль 01 введение в платформу microsoft .net
 

модуль 04

Editor's Notes

  1. C# является полноценным объектно-ориентированным языком, в данном языке программирования наиболее фундаментальной программной конструкцией является тип класса. Формально класс – это определяемый пользователем тип, который состоит их полей данных (часто называемых переменными-членами) и членов, оперирующими эти данные (конструкторов, методов, событий). Все вместе поля данных представляют «состояние» экземпляра класса (иначе называемого объектом) Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о человеке - наличие двух рук, двух ног, головы, пищеварительной, нервной системы, головного мозга и т.д. Есть некоторый шаблон - этот шаблон можно назвать классом. Реально же существующий человек (фактически экземпляр данного класса) является объектом этого класса. Класс определяется с помощью ключевого слова Class. После определения типа класса нужно определить набор переменных-членов, которые будут использоваться для определения его состояния. Например, вы можете решить, что объект Car, должен иметь поле данных типа int, представляющее текущую скорость, и поле данных типа string для предоставления названия автомобиля. (Класс будет выглядеть следующим образом)
  2. Все члены класса - поля, методы, свойства - все они имеют модификаторы доступа. Модификаторы доступа позволяют задать допустимую область видимости для членов класса. То есть контекст, в котором можно употреблять данную переменную или метод.
  3. Полями класса называются обычные переменные уровня класса. Константы Особенностью констант является то, что их значение можно установить только один раз. Например, если у нас в программе есть некоторые переменные, которые не должны изменять значение (к примеру, число PI, число e и т.д.), мы можем объявить их константами. Поля для чтения (readonly) Поля для чтения можно инициализировать при их объявлении либо на уровне класса, либо инициализировать и изменять в конструкторе. Инициализировать или изменять их значение в других местах нельзя, можно только считывать их значение.
  4. Свойства Кроме обычных методов в языке C# предусмотрены специальные методы доступа, которые называются свойства. Они обеспечивает простой доступ к полям класса, узнать их значение или выполнить их установку. Здесь у нас есть закрытое поле name и есть общедоступное свойство Name. Хотя они имеют практически одинаковое название за исключением регистра, но это не более чем стиль, названия у них могут быть произвольные и не обязательно должны совпадать. Через это свойство мы можем управлять доступом к переменной name. Стандартное определение свойства содержит блоки get и set. В блоке get мы возвращаем значение поля, а в блоке set устанавливаем. Параметр value представляет передаваемое значение. Возможно, может возникнуть вопрос, зачем нужны свойства, если мы можем в данной ситуации обходиться обычными полями класса? Но свойства позволяют вложить дополнительную логику, которая может быть необходима, например, при присвоении переменной класса какого-либо значения. Свойства управляют доступом к полям класса. Однако, что, если у нас с десяток и более полей, то определять каждое поле и писать для него однотипное свойство было бы утомительно. Начиная с версии C# 6.0 была добавлена такая функциональность, как инициализация автосвойств. Автоматические свойства Начиная с версии C# 3.0, появилась возможность для реализации очень простых свойств, не прибегая к явному определению переменной, которой управляет свойство. Вместо этого базовую переменную для свойства автоматически предоставляет компилятор. Такое свойство называется автоматически реализуемым. Несмотря на очевидные удобства автоматически реализуемых свойств, их применение ограничивается в основном теми ситуациями, в которых не требуется управление установкой или получением значений из поддерживающих полей. Инициализация автосвойств Обратите внимание на то, что после обозначений аксессоров get и set сразу же следует точка с запятой, а тело у них отсутствует. Такой синтаксис предписывает компилятору создать автоматически переменную, иногда еще называемую поддерживающим полем, для хранения значения.   Выше мы посмотрели, что через свойства устанавливается доступ к приватным переменным класса. Подобное сокрытие состояния класса от вмешательства извне представляет механизм инкапсуляции, который представляет одну из ключевых концепций объектно-ориентированного программирования. Применение модификаторов доступа типа private защищает переменную от внешнего доступа. Для управления доступом во многих языках программирования используются специальные методы, геттеры и сеттеры. В C# их роль, как правило, выполняют свойства. https://metanit.com/sharp/tutorial/3.4.php
  5. Кроме обычных методов в классах используются также и специальные методы, которые называются конструкторами. Конструкторы вызываются при создании нового объекта данного класса. Отличительной чертой конструктора является то, что его название должно совпадать с названием класса. Одно из назначений конструктора - начальная инициализация членов класса. Конструктор это специальный метод класса, который вызывается неявно при создании объекта с использованием ключевого слова new. Конструктор НИКОГДА не не имеет возвращаемогозначения.
  6. В языке C# имееться ключевое слова THIS, которое обеспечивает доступ к текущему экземпляру класса. Второй пункт стр.191
  7. Каждая переменная доступна в рамках определенного контекста или области видимость. Вне этого контекста переменная уже не существует. Существуют различные контексты Контекст класса. Переменные, определенные на уровне класса, доступны в любом методе этого класса Контекст метода. Переменные, определенные на уровне метода, являются локальными и доступны только в рамках данного метода. В других методах они недоступны Контекст блока кода. Переменные, определенные на уровне блока кода, также являются локальными и доступны только в рамках данного блока. Вне своего блока кода они не достуны.
  8. Класс C# может определять любое количество статических членов, которые объявляются с помощью ключевого слова static. При этом соответствующий член должен вызываться непосредственно на уровне класса. Проще говоря, статические члены – это элементы, задуманные как общие, так что нет нужды создавать экземпляр класса перед их вызовом. Ключевое слово static может быть применено к следующим конструкциям: Данные класса; Методы класса; Свойства класса; Конструктор; Целое определение класса; https://habrahabr.ru/post/206082/
  9. Стр198-199 В C# предусмотрена возможность определения статистического конструктора, который позволяет безопасно устанавливать значения статистических данных.
  10. Параметры представляют собой переменные, которые определяются в сигнатуре метода и создаются при его вызове. Существует два способа передачи параметров в метод в языке C#: по значению и по ссылке. Наиболее простой способ передачи параметров представляет передача по значению. Данные значения еще называют аргументами. Передача параметров по ссылке и модификатор ref При передаче параметров по ссылке перед параметрами используется модификатор ref В чем отличие двух способов передачи параметров? При передаче по значению метод получает не саму переменную, а ее копию. А при передаче параметра по ссылке метод получает адрес переменной в памяти. И, таким образом, если в методе изменяется значение параметра, передаваемого по ссылке, то также изменяется и значение переменной, которая передается на его место.   Модификатор out Выше мы использовали входные параметры. Но параметры могут быть также выходными. Чтобы сделать параметр выходным, перед ним ставится модификатор out. Причем, как и в случае с ref ключевое слово out используется как при определении метода, так и при его вызове. Прелесть использования подобных параметров состоит в том, что по сути мы можем вернуть из метода не один вариант, а несколько.
  11. Во всех предыдущих примерах мы использовали постоянное число параметров. Но, используя ключевое слово params, мы можем передавать неопределенное количество параметров
  12. Частичные классы Частичные классы (partial class) представляют возможность разделить функционал одного класса на несколько файлов. Например, сейчас у нас код класса Book весь находится в одном файле Book.cs. Но мы можем разделить весь код на несколько разных файлов. В этом случае нам надо будет поставить перед определением класса ключевое слово partial.
  13. System.ValueTuple Определение кортежей Кортеж представляет набор значений, заключенных в круглые скобки: var tuple = (5, 10); В данном случае определен кортеж tuple, который имеет два значения: 5 и 10. В дальнейшем мы можем обращаться к каждому из этих значений через поля с названиями Item[порядковый_номер_поля_в_кортеже]. Мы также можем дать названия полям кортежа Кортежи могут передаваться в качестве параметров в метод, могут быть возвращаемым результатом функции, либо использоваться иным образом. Например, одной из распространенных ситуаций является возвращение из функции двух и более значений, в то время как функция можно возвращать только одно значение. И кортежи представляют оптимальный способ для решения этой задачи