Доступ через свойство - C#
Формулировка задачи:
Имеется кусок кода из класса:
Как видно из кода, в данном классе имеется закрытое поле массив ins, к нему осуществляется доступ через свойство. Но значения данного массива задаются в методе input этого же класса, путем его вызова из другого класса и передачей ему массива значений, из-за этого значения не фильтруются, т.е. операторы if ветви set в данной ситуации свое предназначение не выполняют, т.к. по определению методы класса имеют доступ к закрытым полям класса.
Мне нужно, чтобы при вызове object.input(1,0,1,0,1), происходила проверка передаваемых значений( только 0 и 1) и чтобы эта проверка проходила с помощью свойства(мб нужно задать какие-то спецификаторы или атрибуты метода или свойства). Возможно ли это?
И второй вопрос. У меня имеется класс(не абстрактный) предок и его потомок. В потомке, помимо унаследованных методов, имеется новый метод, и в мэйне имеется строка
Предок f= new Потомок();
f.новый метод();
Естественно тут выдаст ошибку, так как новый метод в классе предка вообще не определен, а переменная f имеет тип предка. Но мб есть какой-нибудь способ корректного выполнения этого кода без определения этого метода в классе предка ?
public int this[int i]
{
get
{
if (i >= 0 && i < ins.Length) return ins[i];
else throw new Exception("ERROR RANGE");
}
set
{
if (i >= 0 && i < ins.Length && value >= 0 && value <= 1) ins[i] = value;
else throw new Exception("ERROR VALUE OF SIGNAL");
}
}
public void input(params int[] arr) // связать со свойством метода предка
{
ins = new int[Nins];
for (int i = 0; i < Nins; i++)
{
ins[i] = arr[i];
}
}
int[] ins;Решение задачи: «Доступ через свойство»
textual
Листинг программы
using System;
using System.Linq;
internal class Test
{
public static void Main()
{
//input(1, 0);
input(1, 5);
}
public static void input(params int[] arr) // связать со свойством метода предка
{
if (arr.Any(n => n != 0 && n != 1))
{
throw new ArgumentException("Number must be 1 or 0", "arr");
}
}
}