Одномерные индексаторы. По примеру из книги Шилдта - разобрать код - C#

Узнай цену своей работы

Формулировка задачи:

Не могу понять смысл приведённого в книге примера. Это программа, в которой создается класс FailSoftArray, реализующий массив для выявления ошибок нарушения границ массива. По задаче много вопросов, для удобства они написаны в качестве комментариев к коду. P.S Везде написано, что индексаторы расширяют возможности класса, более удобные и т.п. Я даже не то чтобы не понимаю, как некоторые части кода реализованы, а для чего вообще этот пример нужен в практическом применении. Очень надеюсь на вашу помощь. Вроде бы тема не сложная, но меня поставила в тупик.
// Использовать индексатор для создания отказоустойчивого массива.
using System;
class FailSoftArray {
int[] a; // ссылка на базовый массив
public int Length; // открытая переменная длины массива
public bool ErrFlag; // обозначает результат последней операции
// Построить массив заданного размера.
public FailSoftArray(int size) {      
a = new int[size];                    
Length = size;                        
}
// Это индексатор для класса FailSoftArray.
public int this[int index] {        // Откуда передаётся этот параметр index?      
// Это аксессор get.               
Get {                         
if(ok(index)) {          
ErrFlag = false;         
} else {                
ErrFlag = true;
return 0;
}
}
// Это аксессор set.
set {
if(ok(index)) {
a[index] = value;       //В комментариях книги написано: «Если параметр index метода ok() находится в установленных
//пределах, то соответствующему элементу массива присваивается значение, передаваемое из параметра value». Не 
//могу понять, а какое значение принимает параметр 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);
int x;
// Выявить скрытые сбои.
Console.WriteLine("Скрытый сбой.");        //Что вообще здесь понимается под скрытым сбоем?
for(int i=0; i < (fs.Length * 2); i++)         //Почему в условии ставим именно (fs.Length * 2)?
fs[i] = i*10;
for(int i=0; i < (fs.Length * 2); i++) {     //Какой вообще смысл создавать 2 цикл? 
//Ведь можно было в первом всё сделать. Зачем присваивать значение fs[i] переменной х, почему бы не использовать сам fs[i]?
x = fs[i];
if(x != -1) Console.Write(x + " ");     // Как оно может быть равно -1, если мы сами ставили условие в цикле,  что i равно от 0 до (fs.Length * 2), а fs[i] = i*10?
}
Console.WriteLine();
// А теперь показать сбои.
Console.WriteLine("\nСбой с уведомлением об ошибках.");
for (int i=0; i < (fs.Length * 2); i++) {
fs[i] = i * 10;
if(fs.ErrFlag)     // Возможно, я что-то упустила в процессе обучения... Что значит объект.переменная?      
Console.WriteLine("fs[" + i + "] вне границ");
}
for(int i=0; i < (fs.Length * 2); i++) {
x = fs[i];
if(!fs.ErrFlag) Console.Write(x + " ");
else
Console.WriteLine("fs[" + i + "] вне границ");
}
}
}

Решение задачи: «Одномерные индексаторы. По примеру из книги Шилдта - разобрать код»

textual
Листинг программы
return a[index];

ИИ поможет Вам:


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

Оцени полезность:

7   голосов , оценка 3.857 из 5