Чтение онлайн

на главную

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

ItemType
представляет тип данных, хранящихся в коллекции или массиве, a
TargetCollection
представляет реальный массив или коллекцию. Существует два набора требований, которым должна удовлетворять коллекция, перебор элементов которой будет выполняться с помощью инструкции
foreach
. Первый набор имеет отношение к составу самой коллекции. Это следующие требования:

□ Тип коллекции должен быть интерфейсом, классом или структурой.

□ Тип коллекции должен включать метод

GetEnumerator
для возврата типа перечислителя. Тип перечислителя является по сути объектом,
который позволяет перебрать коллекцию элемент за элементом.

Второй набор требований имеет дело с составом типа перечислителя, возвращаемого упомянутым выше методом

GetEnumerator
. Список требований дан ниже:

□ Перечислитель должен предоставить метод

MoveNext
типа
boolean
.

□ 

MoveNext
должен возвращать
true
, если в коллекции есть еще элементы.

□ 

MoveNext
должен увеличивать счетчик элементов при каждом вызове.

□ Тип перечислителя должен предоставлять свойство с именем

Current
, которое возвращает
ItemType
(или тип, который может быть преобразован в
ItemType
).

□ Метод доступа свойства должен возвращать текущий элемент коллекции.

Следующий пример использует

foreach
для просмотра таблицы
Hashtable
:

Hashtable t = new Hashtable;

t["a"] = "hello";

t["b"] = "world";

t["c"] = "of";

t["d"] = "c-sharp";

foreach (DictionaryEntry b in t) {

 Console.WriteLine(b.Value);

}

Ключевые слова модификации доступа: private, protected, public, и (пакет по умолчанию)

Ключевое слово

private
используется, чтобы сделать методы и переменные доступными только изнутри элементов содержащего их класса. Функциональность одинакова в обоих языках, модификатор
public
позволяет сущностям вне пакета получить доступ к внутренним элементам. Конечно, для C# это будут сущности вне пространства имен, а не пакета.

C# и Java различаются в том, как обрабатываются

protected
и
'default'
. В то время как в Java
protected
делает метод или переменную доступной для классов в том же пакете или подклассах класса,
protected
в C# делает код видимым только для этого класса и подклассов, которые от него наследуют.

C# вводит также новый модификатор доступа —

internal
. Ключевое слово
internal
изменяет члены данных так, что они будут видимы всему коду внутри компонента, но не клиентам этого компонента. Различие здесь между модификатором в Java, который указывает элемент, доступный только для элементов в пакете, и
internal
состоит в том, что
internal
доступен всем элементам сборки, которая может охватывать несколько пространств имен. Сборки и пространства имен будут рассмотрены позже в этом приложении.

Модификаторы: abstract, class, extends, final, implements, interface, native, new static, synchronized, transient, volatile

Модификатор

abstract
имеет одну
и ту же форму и синтаксис в обоих языках. Таким же является ключевое слово
class
. C# не имеет модификаторов
extends
или
implements
. Чтобы вывести из класса или реализовать интерфейс, используйте оператор
:
. Когда список базового класса содержит базовый класс и интерфейсы, базовый класс следует первым в списке. Ключевое слово
interface
используется для объявления интерфейса. Примеры рассмотренных ранее концепций приведены ниже:

class ClassA: BaseClass, Iface1, Iface2 {

 // члены класса

}

public interface IfruitHaver {

 public void Fruit;

}

public class plant: IfruitHaver {

 public Plant {

 }

 public void Fruit {

 }

}

class Tree : Plant {

 public Tree {

 }

}

Ключевое слово

final
в Java трудно отнести к какой-то категории. Частично причина заключается в том, что оно предоставляет вид функциональности два-в-одном, что делает трудным соединение его с каким-либо одним назначением. Объявление класса как
final
запечатывает его, делая невозможным расширение. Объявление метода как
final
также его запечатывает, делая невозможным его переопределение. Объявление переменной как
final
является по сути объявлением ее только для чтения. Именно для чтения, а не константой, так как возможно задать значение
final
как значение переменной. Значения констант должны быть известны во время компиляции, поэтому константы могут задаваться равными только другим константам.

В противоположность этому C# предоставляет специфические приемы для рассмотрения каждого отдельного вопроса. По умолчанию подкласс не должен иметь возможности повторно реализовывать открытый метод, который уже реализован в суперклассе. C# вводит новую концепцию — сокрытие метода, что позволяет программисту переопределить члены суперкласса в классе-наследнике и скрыть реализацию базового класса, C# использует в данном случае модификатор

new
.

Это делается присоединением

new
к объявлению метода. Достоинство сокрытия версий членов базового класса состоит в том, что можно выборочно определить, какую реализацию использовать. Пример такой концепции представлен в коде ниже:

namespace Fona {

 using System;

 public class Plant {

public Plant{}

public void BearFruit {

Console.WriteLine("Generic plant fruit");

}

 }

 class Tree : Plant {

public Tree{}

// ключевое слово new используется здесь явно, чтобы скрыть

// базовую версию

Поделиться:
Популярные книги

Возрождение Феникса. Том 2

Володин Григорий Григорьевич
2. Возрождение Феникса
Фантастика:
фэнтези
попаданцы
альтернативная история
6.92
рейтинг книги
Возрождение Феникса. Том 2

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Сумеречный Стрелок 4

Карелин Сергей Витальевич
4. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 4

Аномалия

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Аномалия

Весь цикл «Десантник на престоле». Шесть книг

Ланцов Михаил Алексеевич
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Весь цикл «Десантник на престоле». Шесть книг

Диверсант

Вайс Александр
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Диверсант

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Дело Чести

Щукин Иван
5. Жизни Архимага
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Дело Чести

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2

Начальник милиции 2

Дамиров Рафаэль
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции 2

Авиатор: назад в СССР 10

Дорин Михаил
10. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 10

Курсант: Назад в СССР 11

Дамиров Рафаэль
11. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 11

Адепт. Том 1. Обучение

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
9.27
рейтинг книги
Адепт. Том 1. Обучение