using System;
class FailSoftArray {
int[] a; // ссылка на базовый массив
// Построить массив по заданному размеру.
public FailSoftArray(int size)
{
a = new int[size];
Length = size;
}
// Автоматически реализуемое и доступное только для чтения свойство Length.
public int Length
{
get; private set;
}
// Автоматически реализуемое и доступное только для чтения свойство Error.
public bool Error
{
get; private set;
}
// Это индексатор для массива FailSoftArray.
public int this[int index]
{
// Это аксессор get.
get
{
if (ok(index))
{
Error = false;
return a[index];
}
else
{
Error = true;
return 0;
}
}
// Это аксессор set.
set
{
if (ok(index))
{
a[index] = value;
Error = false;
}
else Error = true;
}
}
// Возвратить логическое значение true, если
// индекс находится в установленных границах.
private bool ok(int index)
{
if (index >= 0 & index < Length) return true;
return false;
}
}
public class Test
{
public static void Main()
{
FailSoftArray fs = new FailSoftArray(5);
// Использовать свойство Error.
for (int i = 0; i < fs.Length + 1; i++)
{
fs[i] = i * 10;
Console.WriteLine(fs[i]);
if (fs.Error)
Console.WriteLine("Ошибка в индексе " + i);
}
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgRmFpbFNvZnRBcnJheSB7CiAgICBpbnRbXSBhOyAvLyDRgdGB0YvQu9C60LAg0L3QsCDQsdCw0LfQvtCy0YvQuSDQvNCw0YHRgdC40LIKICAgICAgICAgICAgIC8vINCf0L7RgdGC0YDQvtC40YLRjCDQvNCw0YHRgdC40LIg0L/QviDQt9Cw0LTQsNC90L3QvtC80YMg0YDQsNC30LzQtdGA0YMuCiAgICBwdWJsaWMgRmFpbFNvZnRBcnJheShpbnQgc2l6ZSkKICAgIHsKICAgICAgICBhID0gbmV3IGludFtzaXplXTsKICAgICAgICBMZW5ndGggPSBzaXplOwogICAgfQogICAgLy8g0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0YDQtdCw0LvQuNC30YPQtdC80L7QtSDQuCDQtNC+0YHRgtGD0L/QvdC+0LUg0YLQvtC70YzQutC+INC00LvRjyDRh9GC0LXQvdC40Y8g0YHQstC+0LnRgdGC0LLQviBMZW5ndGguCiAgICBwdWJsaWMgaW50IExlbmd0aAogICAgewogICAgICAgIGdldDsgcHJpdmF0ZSBzZXQ7CiAgICB9CiAgICAvLyDQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDRgNC10LDQu9C40LfRg9C10LzQvtC1INC4INC00L7RgdGC0YPQv9C90L7QtSDRgtC+0LvRjNC60L4g0LTQu9GPINGH0YLQtdC90LjRjyDRgdCy0L7QudGB0YLQstC+IEVycm9yLgogICAgcHVibGljIGJvb2wgRXJyb3IKICAgIHsKICAgICAgICBnZXQ7IHByaXZhdGUgc2V0OwogICAgfQogICAgLy8g0K3RgtC+INC40L3QtNC10LrRgdCw0YLQvtGAINC00LvRjyDQvNCw0YHRgdC40LLQsCBGYWlsU29mdEFycmF5LgogICAgcHVibGljIGludCB0aGlzW2ludCBpbmRleF0KICAgIHsKICAgICAgICAvLyDQrdGC0L4g0LDQutGB0LXRgdGB0L7RgCBnZXQuCiAgICAgICAgZ2V0CiAgICB7CiAgICAgICAgaWYgKG9rKGluZGV4KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiBhW2luZGV4XTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vINCt0YLQviDQsNC60YHQtdGB0YHQvtGAIHNldC4KICAgICAgICBzZXQKICAgICAgICB7CiAgICAgICAgICAgIGlmIChvayhpbmRleCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFbaW5kZXhdID0gdmFsdWU7CiAgICAgICAgICAgICAgICBFcnJvciA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgRXJyb3IgPSB0cnVlOwogICAgICAgIH0KICAgIH0KICAgIC8vINCS0L7Qt9Cy0YDQsNGC0LjRgtGMINC70L7Qs9C40YfQtdGB0LrQvtC1INC30L3QsNGH0LXQvdC40LUgdHJ1ZSwg0LXRgdC70LgKICAgIC8vINC40L3QtNC10LrRgSDQvdCw0YXQvtC00LjRgtGB0Y8g0LIg0YPRgdGC0LDQvdC+0LLQu9C10L3QvdGL0YUg0LPRgNCw0L3QuNGG0LDRhS4KICAgIHByaXZhdGUgYm9vbCBvayhpbnQgaW5kZXgpCiAgICB7CiAgICAgICAgaWYgKGluZGV4ID49IDAgJiBpbmRleCA8IExlbmd0aCkgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJIEZhaWxTb2Z0QXJyYXkgZnMgPSBuZXcgRmFpbFNvZnRBcnJheSg1KTsKICAgICAgICAvLyDQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YHQstC+0LnRgdGC0LLQviBFcnJvci4KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZzLkxlbmd0aCArIDE7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGZzW2ldID0gaSAqIDEwOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShmc1tpXSk7CiAgICAgICAgICAgIGlmIChmcy5FcnJvcikKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCLQntGI0LjQsdC60LAg0LIg0LjQvdC00LXQutGB0LUgIiArIGkpOwogICAgICAgIH0KCX0KfQ==