Как в 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();
}