Герберт Шилдт - C# 4.0: полное руководство

Тут можно читать онлайн Герберт Шилдт - C# 4.0: полное руководство - бесплатно ознакомительный отрывок. Жанр: comp-programming, издательство ООО И.Д. Вильямс, год 2011. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    C# 4.0: полное руководство
  • Автор:
  • Жанр:
  • Издательство:
    ООО И.Д. Вильямс
  • Год:
    2011
  • Город:
    Москва -- Киев
  • ISBN:
    978-5-8459-1684-6
  • Рейтинг:
    3.93/5. Голосов: 141
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Герберт Шилдт - C# 4.0: полное руководство краткое содержание

C# 4.0: полное руководство - описание и краткое содержание, автор Герберт Шилдт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.


Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок

C# 4.0: полное руководство - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Герберт Шилдт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

А теперь рассмотрим следующий код аксессора set, предотвращающего ошибки нарушения границ массива.

set {

if(ok(index) ) {

a[index] = value;

ErrFlag = false;

}

else ErrFlag = true;

}

Если параметр index метода ok()находится в установленных пределах, то соответствующему элементу массива присваивается значение, передаваемое из параметра value. В противном случае устанавливается логическое значение trueпеременной ErrFlag. Напомним, что valueв любом аксессорном методе является неявным параметром, содержащим присваиваемое значение. Его не нужно (да и нельзя) объявлять отдельно.

Наличие обоих аксессоров, get и set, в индексаторе не является обязательным. Так, можно создать индексатор только для чтения, реализовав в нем один лишь аксессор get, или же индексатор только для записи с единственным аксессором set.

Перегрузка индексаторов

Индексатор может быть перегружен. В этом случае для выполнения выбирается тот вариант индексатора, в котором точнее соблюдается соответствие его параметра и аргумента, указываемого в качестве индекса. Ниже приведен пример программы, в которой индексатор массива класса FailSoftArrayперегружается для индексов типа double. При этом индексатор типа doubleокругляет свой индекс до ближайшего целого значения.

// Перегрузить индексатор массива класса FailSoftArray.

using System;

class FailSoftArray {

int[] a; // ссылка на базовый массив

public int Length; //открытая переменная длины массива

public bool ErrFlag; // обозначает результат последней операции

// Построить массив заданного размера,

public FailSoftArray(int size) {

a = new int[size];

Length = size;

}

// Это индексатор типа int для массива FailSoftArray.

public int this[int index] {

// Это аксессор get.

get {

if(ok(index)) {

ErrFlag = false;

return a[index];

}

else

{

ErrFlag = true;

return 0;

}

}

// Это аксессор set.

set {

if(ok(index)) {

a[index] = value;

ErrFlag = false;

}

else

ErrFlag = true;

}

}

/* Это еще один индексатор для массива FailSoftArray. Он округляет свой аргумент до ближайшего целого индекса. */

public int this[double idx] {

// Это аксессор get.

get {

int index;

// Округлить до ближайшего целого.

if((idx - (int) idx) < 0.5) index = (int) idx;

else index = (int) idx + 1;

if(ok(index)) {

ErrFlag = false;

return a[index];

}

else

{

ErrFlag = true;

return 0;

}

}

// Это аксессор set.

set {

int index;

// Округлить до ближайшего целого.

if( (idx - (int) idx) < 0.5) index = (int) idx;

else index = (int) idx + 1;

if (ok (index) ) {

a[index] = value;

ErrFlag = false;

}

else

ErrFlag = true;

}

}

// Возвратить логическое значение true, если

// индекс находится в установленных границах,

private bool ok(int index) {

if(index >= 0 & index < Length) return true;

return false;

}

}

// Продемонстрировать применение отказоустойчивого массива,

class FSDemo {

static void Main() {

FailSoftArray fs = new FailSoftArray(5);

// Поместить ряд значений в массив fs.

for(int i=0; i < fs.Length; i++) fs[i] = i;

// А теперь воспользоваться индексами

// типа int и double для обращения к массиву.

Console.WriteLine("fs[1]: " + fs[1]);

Console.WriteLine("fs[2]: " + fs[2]);

Console.WriteLine("fs[1.1]: " + fs[1.1]);

Console.WriteLine("fs[1.6]: " + fs[1.6]);

}

}

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

fs[1] : 1

fs[2] : 2

fs[1.1] : 1

fs[1.6] : 2

Как показывает приведенный выше результат, индексы типа doubleокругляются до ближайшего целого значения. В частности, индекс 1.1 округляется до 1, а индекс 1.6 — до 2.

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

Индексаторы без базового массива

Следует особо подчеркнуть, что индексатор совсем не обязательно должен оперировать массивом. Его основное назначение — предоставить пользователю функциональные возможности, аналогичные массиву. В качестве примера в приведенной ниже программе демонстрируется индексатор, выполняющий роль массива только для чтения, содержащего степени числа 2 от 0 до 15. Обратите внимание на то, что в этой программе отсутствует конкретный массив. Вместо этого индексатор просто вычисляет подходящее значение для заданного индекса.

// Индексаторы совсем не обязательно должны оперировать отдельными массивами.

using System;

class PwrOfTwo {

/* Доступ к логическому массиву, содержащему степени числа 2 от 0 до 15. */

public int this[int index] {

// Вычислить и возвратить степень числа 2.

get {

if((index >= 0) && (index < 16))

return pwr(index);

else

return -1;

}

// Аксессор set отсутствует.

}

int pwr(int p) {

int result = 1;

for(int i=0; i < p; i++) result *= 2;

return result;

}

}

class UsePwrOfTwo {

static void Main() {

PwrOfTwo pwr = new PwrOfTwo();

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Герберт Шилдт читать все книги автора по порядку

Герберт Шилдт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




C# 4.0: полное руководство отзывы


Отзывы читателей о книге C# 4.0: полное руководство, автор: Герберт Шилдт. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x