Одномерные индексаторы. По примеру из книги Шилдта - разобрать код - 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];
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д