Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
36
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

8. И ещё немного о классах и их использовании...

Допустим нужно создать программу для регистрации участников на олимпиаду по математике. Для нас не имеет значения, как выглядит человек, нам важно следующее: школа, класс, ФИО, год рождения, балл (это конечно упрощённая модель). Т. е. были выявлены общие характеристики для наших участников. Кроме того, нужно производить некоторые операции: регистрация участника, дисквалификация участника, начисление баллов и прочее. Участников у нас может быть очень много, но класс у нас будет всего один:

class participant

{

private string FIO;

private int school;

private int theclass;

private int point;

public participant() { }

public participant(string aFIO, int aSchool, int aClass, int aPoint)

{

this.FIO = aFIO;

this.school = aSchool;

this.theclass = aClass;

this.point = aPoint;

}

public void GetInfo()

{

Console.WriteLine("Ф.И.О.:" + this.FIO);

Console.WriteLine("Школа:" + this.school);

Console.WriteLine("Класc:" + this.theclass);

Console.WriteLine("Баллы:" + this.point);

}

}

Был создан класс, который называется participant (участник). Данный класс имеет 4 внутренние переменные: FIO, school, theclass и point. Третью переменную пришлось назвать theclass, а не class, потому что class является зарезервированным (ключевое слово же) и его нельзя использовать в качестве имени переменной.

Первый конструктор является конструктором по умолчанию, он собственно ничего не делает. Но в отличие от других языков программирования в C# нужно объявлять конструктор по умолчанию, т. к. автоматически он не создаётся. Второй конструктор принимает четыре параметра и присваивает их нашим внутренним переменным (инициализирует их). Конструктор называется точно так же как и класс, собственно это и делает его конструктором. Обратим внимание, на то, как происходит обращение к внутренним переменным: this.FIO.

this — это ссылка на текущий экземпляр класса. В процессе создания класса неизвестно, как будет называться объект, который этот класс реализует, поэтому его необходимо назвать this. Вообще, к членам и методам класса нужно обращаться через точку: «имя объекта».»имя члена».

Кроме этого у нашего класса есть один единственный метод: GetInfo, который отображает информацию о участнике.

Создаём экземпляр класса:

static void Main()

{

participant x = new participant("John A.", 10, 11, 100);

x.GetInfo();

}

Обратим вниманием, что невозможно изменить внутренние переменные объекта с помощью конструкции:

x.FIO = "Вася Пупкин";

Потому что, нет прав доступа к этой переменной (она объявлена как private).

3.6.3. Вложенные классы и понятие «Вложенные типы» Вложенные классы и понятие «Вложенные типы»

1. Вложенные классы

Иногда некоторый класс играет чисто вспомогательную роль для другого класса и используется только внутри него. В этом случае логично описать его внутри существующего класса. Вот пример такого описания:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class ClassA

{

// Вложенный класс

private class ClassB

{

public int z;

}

// Переменная типа вложенного класса

private ClassB w;

// Конструктор

public ClassA()

{

w = new ClassB();

w.z = 35;

}

// Некоторый метод

public int SomeMethod()

{

return w.z;

}

}

class Test

{

static void Main(string[] args)

{

ClassA v = new ClassA();

int k = v.SomeMethod();

Console.WriteLine(k);

// Выведет: 35

Console.WriteLine("Для продолжения нажмите любую клавишу . . ."); ;

Console.ReadKey();

}

}

}

Здесь класс ClassB объявлен внутри класса ClassA. Объявлен он со словом private, так что его экземпляры мы можем создавать только внутри класса ClassA (что и делаем в конструкторе класса ClassA). Методы класса ClassA имеют доступ к экземпляру класса ClassB (как, например, метод SomeMethod).

Вложенный класс имеет смысл использовать тогда, когда его экземпляр используется только в определенном классе. Кроме того, при использовании вложенных классов улучшается читаемость кода — если нас не интересует устройство основного класса, то разбирать работу вложенного класса нет необходимости.

Обратим также внимание, как вложенные классы показываются на вкладке «Окно классов» в Среде разработки Visual Studio 2010:

Рис. 1. Окно классов проекта LC_Console