Слайд 1Лекция №2
Классы и методы в C#
Слайд 2Классы
Класс – это абстрактный тип данных, т.е. это некоторый шаблон, на основе
которого будут создаваться его экземпляры – объекты.
В Си-шарп классы объявляются с помощью ключевого слова class:
[модификатор доступа] class [имя_класса]
{
//тело класса
}
Слайд 3Модификаторы доступа к классам
- public – доступ к классу возможен из любого места
одной сборки либо из другой сборки, на которую есть ссылка;
- internal – доступ к классу возможен только из сборки, в которой он объявлен.
Если при объявлении класса не указать модификатор доступа, то по умолчанию будет применяться режим internal.
Сборка – это готовый функциональный модуль в виде exe либо dll файла (файлов), который содержит скомпилированный код для .NET.
Слайд 4Объявление классов
Класс следует объявлять внутри пространства имен namespace, но за пределами другого
класса
Пример:
namespace HelloWorld
{
class Student // класс будет internal
{
//тело класса
}
public class Pupil
{
//тело класса
}
}
Слайд 5Члены класса
- поля;
- константы;
- свойства;
- конструкторы;
- методы;
- события;
- операторы;
- индексаторы;
- вложенные типы.
Все члены класса также имеют свой уровень доступа.
Слайд 6Модификаторы доступа
к членам класса
- public – доступ к члену возможен из любого места
одной сборки, либо из другой сборки, на которую есть ссылка;
- protected – доступ к члену возможен только внутри класса, либо в классе-наследнике;
- internal – доступ к члену возможен только из сборки, в которой он объявлен;
- private – доступ к члену возможен только внутри класса;
- protected internal - доступ к члену возможен из одной сборки, либо из класса-наследника другой сборки.
Слайд 7Не указав модификатор доступа для члена, по умолчанию ему будет присвоен
режим private.
При помощи модификаторов доступа в Си-шарп реализуется один из базовых принципов ООП – инкапсуляция.
Инкапсуляция - это использование модификаторов доступа с целью сокрытия частей программного кода от конечного пользователя (разработчик или наследующий объект).
Модификаторы доступа
к членам класса
Слайд 8Классы и члены класса можно сделать статическими с помощью служебного слова
static.
Пример:
public static class Class1
{
}
При использовании статического класса не обязательно создавать объект класса для обращения к классу и его членам.
Модификаторы доступа
к членам класса
Слайд 9Поля класса
Поле – это переменная, объявленная внутри класса. Для получения доступа к
полям следует использовать свойства или методы.
Пример:
class Student
{
private string firstName;
private string lastName;
private int age;
public string group; // не рекомендуется использовать public для поля
}
Слайд 10Создание объектов
После объявления класса можно создавать объекты при помощи ключевого слова new и
имени класса:
namespace HelloWorld
{
class Student
{
private string firstName;
private string lastName;
private int age;
public string group;
}
class Program
{
static void Main(string[] args)
{
Student student1 = new Student(); //создание объекта student1 класса Student
Student student2 = new Student();
}
}
}
Слайд 11Доступ к членам объекта
Доступ осуществляется при помощи оператора точка «.» :
static
void Main(string[] args)
{
Student student1 = new Student();
Student student2 = new Student();
student1.group = "Group1";
student2.group = "Group2";
Console.WriteLine(student1.group); // выводит "Group1"
Console.Write(student2.group);
Console.ReadKey();
}
Слайд 12Рассмотрим пример:
namespace HelloWorld
{
class Student
{
private string firstName;
private string
lastName;
private int age;
public string group;
}
class Program
{
static void Main(string[] args)
{
Student student1 = new Student();
student1.firstName= "Nikolay"; //ошибка, нет доступа к полю firstName. }
Слайд 13Константы
Константы-члены класса не отличаются от простых констант.
Константа – это переменная, значений которой нельзя
изменить. Константа объявляется с помощью ключевого слова const.
Пример:
class Math
{
private const double Pi = 3.14;
}
Слайд 14Методы
Метод – это небольшая подпрограмма, которая выполняет, в идеале, только одну
функцию. Методы позволяют сократить объем кода.
Различают статические и простые методы.
Статический метод – это метод, который не имеет доступа к полям объекта, и для вызова такого метода не нужно создавать экземпляр (объект) класса, в котором он объявлен.
Простой метод – это метод, который имеет доступ к данным объекта, и его вызов выполняется через объект.
Слайд 15Методы
[модификаторы] ИмяМетода ([параметры])
{ // Тело метода }
Пример:
1) public double
Meth1(double a)
{…
rerurn(Math.Pow(a,2))
}
2)
private void Meth2()
{…
}
Слайд 16Задание 1
Создать новый класс Tel, содержащий поля день разговора (задается целым
числом в интервале от 1 до 7), время разговора (вещественное число) и стоимость (вещественное число). Создать новый метод для подсчета стоимости телефонного разговора в зависимости от дна недели: в выходные дни стоимость разговора меньше на 10%.
Слайд 17Свойства
Свойства класса - это член класса, он предоставляет удобный механизм доступа
к полю класса (чтение поля и запись).
При использовании свойства, мы обращаемся к нему, как к полю класса, но на самом деле компилятор преобразовывает это обращение к вызову соответствующего неявного метода.
Такой метод называется аксессор (accessor).
Слайд 18Свойства
Существует два аксессора: get (для получения данных) и set (для записи). Объявление простого свойства имеет
следующую структуру:
<тип> <имя>
{
get
{ // код аксессора для чтения из поля }
set
{ // код аксессора для записи в поле }
}
Слайд 19Свойства
Пример:
public class Date
{ private int month = 7;
Public int
Month
{
get {
return month; }
set {
if ((value > 0) && (value < 13)) { month = value; } }
}
}
Слайд 20Свойства
Метод доступа get должен заканчиваться оператором return или throw, а элемент управления не должен
выходить за основную часть метода доступа.
Метод доступа set похож на метод, имеющий тип возвращаемого значения void. В нем используется неявный параметр value, тип которого соответствует типу свойства.
Слайд 21Задание 2
Отредактируйте Задание 1 так, чтобы с помощью свойства происходила проверка
вводимого дня недели, и в случае, когда день недели не входит в интервал от 1 до 7, выводился запрос на повторное введение.
Слайд 22Вложенные типы
Тип, определенный внутри класса , называется вложенным типом.
Пример:
class Container
{
class Nested
{
Nested() { }
}
}
Слайд 23Вложенные типы
Вложенные типы по умолчанию являются private, но могут быть также public,
protected internal, protected или internal.
Для создания нового экземпляра вложенного класса следует использовать запись:
Container.Nested a= new Container.Nested();
Слайд 24События
Прежде чем рассмотреть события, необходим ознакомиться с понятием делегат.
Делегат – это
объект, указывающий на другой метод (или список методов) приложения, который может быть вызван позднее.
Тип делегата объявляется с помощью ключевого слова delegate:
delegate <возвращаемый_тип> имя (список_параметров);
Слайд 25using System;
namespace ConsoleApplication1
{ // Создадим делегат
delegate int IntOperation (int
i, int j);
class Program
{ // Организуем ряд методов
static int Sum(int x, int y)
{ return x + y; }
static int Prz(int x, int y)
{ return x * y; }
static void Main()
{ // Сконструируем делегат
IntOperation op1 = new IntOperation(Sum);
int result = op1(5, 10);
Console.WriteLine("Сумма: " + result);
// Изменим ссылку на метод
op1 = new IntOperation(Prz);
result = op1(5, 10);
Console.WriteLine("Произведение: " + result);}
}
}
Слайд 26События
Событие- это ситуация, при возникновении которой, произойдет действие или несколько действий.
Событие
задается ключевым словом event:
public event <НазваниеДелегата> <НазваниеСобытия>;
Для запуска события используется запись:
<НазваниеСобытия> ()
Слайд 27Задание 3
Определено два класса. Первый класс будет находить квадрат числа от
1 до 10, используя цикл. Другой класс будет ждать, когда в первом классе квадрат числа станет больше 25, и после этого выведет в консоль фразу «Квадрат числа больше 25!».
Слайд 28Домашнее задание
Найти и законспектировать:
Индексаторы класса и их использование в C#.
Конструкторы класса
в С#.
Слайд 29Самостоятельно
1. Создать новый класс, содержащий поля количество дней (задается целым числом
с учетом того, что в месяц не более 26 рабочих дней), среднее значение отработанных часов в день (вещественное число) и стоимость 1 часа (вещественное число), надбавки (в %). Создать новый метод для подсчета заработной платы за месяц с учетом надбавки. Использовать при решении поля, методы, свойство (для ограничения количества дней в рабочем месяце).
Слайд 30Самостоятельно
2. В предыдущую задачу добавьте событие: если среднее значение отработанных часов
в день превышает 8 часов, выводится сообщение «Переработка!».