.NET 4.x Объясните подробней пример из книги Шилдта - C#

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

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

Листинг программы
  1. using System;
  2. class RangeArray {
  3. // Закрытые данные.
  4. int[] а; // ссылка на базовый массив
  5. int lowerBound; // наименьший индекс
  6. int upperBound; // наибольший индекс
  7. // Автоматически реализуемое и доступное только для чтения свойство Length.
  8. public int Length { get; private set; }
  9. // Автоматически реализуемое и доступное только для чтения свойство Error.
  10. public bool Error { get; private set; }
  11. // Построить массив по заданному размеру.
  12. public RangeArray(int low, int high) {
  13. high++;
  14. if(high <= low) {
  15. Console.WriteLine("Неверные индексы");
  16. high = 1; // создать для надежности минимально допустимый массив
  17. low = 0;
  18. }
  19. а = new int[high - low];
  20. Length = high - low;
  21. lowerBound = low;
  22. upperBound = --high;
  23. // Это индексатор для класса RangeArray.
  24. public int this[int index] {
  25. // Это аксессор get.
  26. get {
  27. if(ok(index)) {
  28. Error = false;
  29. return a[index - lowerBound];
  30. } else {
  31. Error = true;
  32. return 0;
  33. }
  34. }
  35. // Это аксессор set.
  36. set {
  37. if(ok(index)) {
  38. a[index - lowerBound] = value;
  39. Error = false;
  40. }
  41. else Error = true;
  42. }
  43. }
  44. // Возвратить логическое значение true, если
  45. // индекс находится в установленных границах.
  46. private bool ok(int index) {
  47. if(index >= lowerBound & index <= upperBound) return true;
  48. return false;
  49. }
  50. }
  51. // Продемонстрировать применение массива с произвольно
  52. // задаваемыми пределами индексирования.
  53. class RangeArrayDemo {
  54. static void Main() {
  55. RangeArray ra = new RangeArray(-5, 5);
  56. RangeArray ra2 = new RangeArray(1, 10);
  57. RangeArray ra3 = new RangeArray(-20, -12);
  58. // Использовать объект ra в качестве массива.
  59. Console.WriteLine("Длина массива ra: " + rа.Length);
  60. for(int i = -5; i <= 5; i++)
  61. ra[i] = i;
  62. Console.Write("Содержимое массива ra: ");
  63. for(int i = -5; i <= 5; i++)
  64. Console.Write(ra[i] + " ");
  65. Console.WriteLine("\n");
  66. // Использовать объект ra2 в качестве массива.
  67. Console.WriteLine("Длина массива ra2: " + ra2.Length);
  68. for(int i = 1; i <= 10; i++)
  69. ra2[i] = i;
  70. Console.Write("Содержимое массива ra2: ");
  71. for(int i = 1; i <= 10; i++)
  72. Console.Write(ra2[i] + " ");
  73. Console.WriteLine("\n");
  74. // Использовать объект raЗ в качестве массива.
  75. Console.WriteLine("Длина массива ra3: " + ra3.Length);
  76. for(int i = -20; i <= -12; i++)
  77. ra3[i] = i;
  78. Console.Write("Содержимое массива ra3: ");
  79. for(int i = -20; i <= -12; i++)
  80. Console.Write(ra3[i] + " ");
  81. Console.WriteLine("\n");
  82. }
Не до конца понятна вот эта строка return a[index - lowerBound]; В книге она объясняется вот так "В этом выражении индекс, передаваемый в качестве параметра index, преобразуется в индекс с отсчетом от нуля, пригодный для индексирования массива а." Но не совсем понятно как это происходит, как он преобразуется, и почему с отсчетом от нуля? Я так понимаю что от передаваемого индекса постоянно отнимается нижняя граница массива, или как?

Решение задачи: «.NET 4.x Объясните подробней пример из книги Шилдта»

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

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


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

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

13   голосов , оценка 3.692 из 5

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

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

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