Доступ через свойство - C#

Узнай цену своей работы

Формулировка задачи:

Имеется кусок кода из класса:
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;
Как видно из кода, в данном классе имеется закрытое поле массив ins, к нему осуществляется доступ через свойство. Но значения данного массива задаются в методе input этого же класса, путем его вызова из другого класса и передачей ему массива значений, из-за этого значения не фильтруются, т.е. операторы if ветви set в данной ситуации свое предназначение не выполняют, т.к. по определению методы класса имеют доступ к закрытым полям класса. Мне нужно, чтобы при вызове object.input(1,0,1,0,1), происходила проверка передаваемых значений( только 0 и 1) и чтобы эта проверка проходила с помощью свойства(мб нужно задать какие-то спецификаторы или атрибуты метода или свойства). Возможно ли это? И второй вопрос. У меня имеется класс(не абстрактный) предок и его потомок. В потомке, помимо унаследованных методов, имеется новый метод, и в мэйне имеется строка Предок f= new Потомок(); f.новый метод(); Естественно тут выдаст ошибку, так как новый метод в классе предка вообще не определен, а переменная f имеет тип предка. Но мб есть какой-нибудь способ корректного выполнения этого кода без определения этого метода в классе предка ?

Решение задачи: «Доступ через свойство»

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");
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы