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

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

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

Не могу понять смысл приведённого в книге примера. Это программа, в которой создается класс FailSoftArray, реализующий массив для выявления ошибок нарушения границ массива. По задаче много вопросов, для удобства они написаны в качестве комментариев к коду. P.S Везде написано, что индексаторы расширяют возможности класса, более удобные и т.п. Я даже не то чтобы не понимаю, как некоторые части кода реализованы, а для чего вообще этот пример нужен в практическом применении. Очень надеюсь на вашу помощь. Вроде бы тема не сложная, но меня поставила в тупик.
Листинг программы
  1. // Использовать индексатор для создания отказоустойчивого массива.
  2. using System;
  3. class FailSoftArray {
  4. int[] a; // ссылка на базовый массив
  5. public int Length; // открытая переменная длины массива
  6. public bool ErrFlag; // обозначает результат последней операции
  7. // Построить массив заданного размера.
  8. public FailSoftArray(int size) {
  9. a = new int[size];
  10. Length = size;
  11. }
  12. // Это индексатор для класса FailSoftArray.
  13. public int this[int index] { // Откуда передаётся этот параметр index?
  14. // Это аксессор get.
  15. Get {
  16. if(ok(index)) {
  17. ErrFlag = false;
  18. } else {
  19. ErrFlag = true;
  20. return 0;
  21. }
  22. }
  23. // Это аксессор set.
  24. set {
  25. if(ok(index)) {
  26. a[index] = value; //В комментариях книги написано: «Если параметр index метода ok() находится в установленных
  27. //пределах, то соответствующему элементу массива присваивается значение, передаваемое из параметра value». Не
  28. //могу понять, а какое значение принимает параметр Value, чтобы он его передал элементу массива в данном случае?
  29. ErrFlag = false;
  30. }
  31. else ErrFlag = true;
  32. }
  33. }
  34. // Возвратить логическое значение true, если
  35. // индекс находится в установленных границах.
  36. private bool ok(int index) {
  37. if(index >= 0 & index < Length) return true;
  38. return false;
  39. }
  40. }
  41. // Продемонстрировать применение отказоустойчивого массива.
  42. class FSDemo {
  43. static void Main() {
  44. FailSoftArray fs = new FailSoftArray(5);
  45. int x;
  46. // Выявить скрытые сбои.
  47. Console.WriteLine("Скрытый сбой."); //Что вообще здесь понимается под скрытым сбоем?
  48. for(int i=0; i < (fs.Length * 2); i++) //Почему в условии ставим именно (fs.Length * 2)?
  49. fs[i] = i*10;
  50. for(int i=0; i < (fs.Length * 2); i++) { //Какой вообще смысл создавать 2 цикл?
  51. //Ведь можно было в первом всё сделать. Зачем присваивать значение fs[i] переменной х, почему бы не использовать сам fs[i]?
  52. x = fs[i];
  53. if(x != -1) Console.Write(x + " "); // Как оно может быть равно -1, если мы сами ставили условие в цикле, что i равно от 0 до (fs.Length * 2), а fs[i] = i*10?
  54. }
  55. Console.WriteLine();
  56. // А теперь показать сбои.
  57. Console.WriteLine("\nСбой с уведомлением об ошибках.");
  58. for (int i=0; i < (fs.Length * 2); i++) {
  59. fs[i] = i * 10;
  60. if(fs.ErrFlag) // Возможно, я что-то упустила в процессе обучения... Что значит объект.переменная?
  61. Console.WriteLine("fs[" + i + "] вне границ");
  62. }
  63. for(int i=0; i < (fs.Length * 2); i++) {
  64. x = fs[i];
  65. if(!fs.ErrFlag) Console.Write(x + " ");
  66. else
  67. Console.WriteLine("fs[" + i + "] вне границ");
  68. }
  69. }
  70. }

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут