Как в main использовать индексатор, чтобы вывести элементы - C#
Формулировка задачи:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { Random rnd = new Random(); Massive[] a = new Massive[3];// создаем массива объектов класса a[0] = Massive.Randomaize(5, rnd); a[1] = Massive.Randomaize(a[0].Length, rnd); a[2] = a[0] + a[1]; foreach (Massive m in a) Console.WriteLine(m); Console.ReadLine(); } } class Massive { private int[] arr; private int N; // длина private int sm; // сумма public Massive(int N) // конструктор для длины массива { this.N = N; arr = new int[N]; sm = 0; } public Massive() : this(0) { } // конструктор по умолчанию для длины массива public int this[int Index] //индексатор { get { return arr[Index]; } set { sm += value - arr[Index]; // заполнение массива, подсчет суммы arr[Index] = value; } } //СВОЙСТВА public int Sum { get { return sm; } } public int Length { get { return N; } } /*Метод ToString-возвращает строку, представляющую текущий объект(возвращает строковое представление объекта , в данном случае сроку вида "Сумма: перечисление массива" override-переопределение String.Join-метод (Сцепляет указанные элементы массива строк, помещая между ними заданный разделитель) */ /* public override string ToString() { return Sum + ": " + String.Join(" ", arr); } */ /* Чтобы переопределить сумму используется метод operator+ , причем статичный т.е. нельзя вызвать m.operator+(...), а только так Matrix.operator+(a,b) Перегружаем бинарный оператор + Перегрузка операторов должна выполняться открытыми статическими методами класса (спецификаторы public static) Перегрузку операторов можно использовать как в классах, так и в структурах * Перегрузка операторов имеет некоторые ограничения: -перегрузка не может изменить приоритет операторов;(с private на public к примеру) -при перегрузке невозможно изменить число операндов, с которыми работает оператор;(Matrix a, Matrix b-операнды) Поскольку перегруженные операторы являются статическими методами, они не получают указателя this, поэтому унарные операторы должны получать 1 параметр, бинарные 2. Операции не должны изменять значение передаваемого им операнда. Операция, возвращающая величину типа класса, для которого она определяется, должна создать новый объект этого класса, выполнить с ним необходимые действия и передать его в качестве результата */ public static Massive operator+ (Massive a, Massive b) //перегрузка операторасуммы { Massive s = new Massive(a.Length); if (a.Length <= b.Length) { for (int i = 0; i < a.Length; i++) s[i] = a.arr[i] + b.arr[i]; return s; } else { for (int i = 0; i < b.Length; i++) s[i] = a.arr[i] + b.arr[i]; return s; } } public static Massive Randomaize(int Length , Random rnd = null) //заполнение массива { if (rnd == null) rnd = new Random(); if (Length < 0) Length = rnd.Next(5, 5); Massive m = new Massive(Length); while (Length-- > 0) m[Length] = rnd.Next(-5, 5); return m; } } }
Решение задачи: «Как в main использовать индексатор, чтобы вывести элементы»
textual
Листинг программы
foreach (Massive m in a) { for(int i=0;i<m.Length;i++) Console.WriteLine(m[i]); Console.WriteLine(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д