Объявить класс, содержащий массив, индексатор для работы с этим массивом и приватный конструктор - C#
Формулировка задачи:
Объявить класс, содержащий одномерный целочисленный массив, индексатор для работы с этим массивом, а также приватный конструктор, принимающий один параметр в качестве аргумента. Конструктор выделяет память под массив, размерность которого определяется аргументом конструктора. Также в классе определен конструктор с двумя аргументами, который при своей работе вызывает приватный конструктор, передавая ему свой первый аргумент в качестве параметра, а затем расписывает все элементы массива значением своего второго аргумента. Создать объект этого класса. Ввести с клавиатуры элементы массива объекта Аргументы для конструктора вводятся с клавиатуры. Распечатать поля (массивы) объектов.
Вот, что получилось. StackOverFlowException
class Program
{
static void Main(string[] args)
{
int x = Int32.Parse(Console.ReadLine());
int y = Int32.Parse(Console.ReadLine());
YaClass ya_object = new YaClass(x, y);
for (int i = 0; i < ya_object.array.Length; i++)
{
Console.WriteLine(ya_object.array[i].ToString());
}
}
}
class YaClass
{
public int[] array;
public int this[int index]
{
set
{
array[index] = value;
}
get
{
return array[index];
}
}
private YaClass(int x) : this(x, 0)
{
this.array = new int[x];
}
public YaClass(int x, int y)
{
new YaClass(x);
for (int i = 0; i < this.array.Length; i++)
{
array[i] = y;
}
}
}Решение задачи: «Объявить класс, содержащий массив, индексатор для работы с этим массивом и приватный конструктор»
textual
Листинг программы
public class Program
{
private static void Main(string[] args)
{
var length = int.Parse(Console.ReadLine());
var defaultValue = int.Parse(Console.ReadLine());
var myArray = new MyArray(length, defaultValue);
for (var i = 0; i < myArray.Length; i++)
Console.WriteLine(myArray[i]);
}
}
public class MyArray
{
private readonly int[] _array;
public MyArray(int length, int defaultValue) : this(length)
{
for (var i = 0; i < _array.Length; i++)
_array[i] = defaultValue;
}
private MyArray(int length)
{
_array = new int[length];
}
public int this[int index]
{
get { return _array[index]; }
set { _array[index] = value; }
}
public int Length
{
get { return _array.Length; }
}
}