Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора теория(полная).doc
Скачиваний:
0
Добавлен:
22.11.2019
Размер:
123.9 Кб
Скачать

Индексаторы

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

набор элементов, доступ к каждому из которых оказывается возможным по индексу.

Индексатор позволяет обеспечить индексированный доступ к объекту. Главное назначение индексаторов — поддержать создание специализированных массивов, на которые налагается одно или несколько ограничений. Индексаторы могут характеризоваться одной или несколькими размерностями.

тип_элемента this[int индекс]

{// Модификатор доступа считывания данных,

get {// Возврат значения, заданного элементом индекс}

// Модификатор доступа установки данных,

set {// Установка значения, заданного элементом индекс} }

Пример:

namespace Индексатор

{class Array

{int[] arr; int Len;

public Array(int len)

{arr = new int[Len=len];}

public int this[int а]

{set { if (а < Len)arr[а] = value; }

get { if (а < Len)return arr[а]; else return 0; } } }

class Program

{ static void Main()

{ Array mass = new Array(3);

for (int i = 0; i < 5; i++)

{mass[i] = 2;

Console.WriteLine("mass[{0}] = {1} ",i, mass[i]);} } } }

На экране: mass[0] = 2

mass[1] = 2

mass[2] = 2

mass[3] = 0

mass[4] = 0

Механизмы наследования. Объявление наследования.

Допустим, что у нас есть некоторый класс, который почти подходит для нашей конкретной задачи. Почти, но не совсем. Что-то (некоторые методы) в этом классе надо изменить, что-то - добавить. Наследование как раз и служит для этого. При наследовании мы объявляем наш класс потомком другого класса. И наш класс-потомок автоматически приобретает всё, что было в родительском классе. Это мы делаем буквально парой строчек. Затем в дочерний класс мы можем что-нибудь добавить (чего не было в классе родительском). Кроме того, в дочернем классе мы можем что-нибудь из родительского класса переопределить - так что оно уже будет работать по-другому.

При этом выделяется пара классов: Базовый, Производный.

Производный класс наследует (получает в распоряжение) все элементы базового класса, кроме констр и дестр. Режимы защиты элементов класса устанавливают спецификаторы

доступа:

public - общедоступный элемент класса (не распространяется режим защиты). Данные элементы доступны в любом месте области видимости объекта класса;

protected - защищенный элемент. Данные элементы доступны только в самом классе (собственным элементам) и в производном классе. Спецификатора protected в структурах не было – так как структурные типы не поддерживают

наследования;

private - частный элемент. Данные элементы доступны только в самом классе.

Наследование всегда объявляется со стороны производного класса, поэтому к моменту объявления производного, базовый класс должен быть уже объявлен.

Оператор объявления производного класса имеет следующий состав:

сlass ИмяПроизводКласса : ИмяБазовогоКласса{<тег производ класса>};

using System;

namespace test

{ class Worker

{ protected int age=0;

public void setAge(int age)

{if(age>0 && age<100) this.age=age;

else this.age=0; }

public int getAge()

{ return age; } }

class Boss : Worker{

public int numOfWorkers; //Кол.подчиненных

public new void setAge(int age)

{ if(age>0 && age<45) this.age=age;

else this.age=0; } }

class Test

{ static void Main(string[] args)

{ Worker wrk1 = new Worker(); Boss boss = new Boss();

wrk1.setAge(50); boss.setAge(50); boss.numOfWorkers=4;

Console.WriteLine("Возраст работника "+wrk1.getAge());

Console.WriteLine("Возраст босса "+boss.getAge());

Console.WriteLine("Количество подчиненных "+boss.numOfWorkers); } } }

50 0 4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]