Написать реализацию класса "булева функция"

Добрый день дали задание. Немного не понимаю. Можно объяснений? Как это можно реализовать. (примеры какие нибудь)

Написать реализацию класса "булева функция". Реализация должна содержать:

  1. метод GetNumber (должно возвращать номер функции) и GetDual (должно возвращать двойственную функцию);
  2. индексатор, свойства IdenticallyTrue (общезначимая), IdenticallyFalse (Тождественно ложная)
  3. операции !, &&, ||, ^ и ==;
  4. поддержку интерфейсов IEquatable, ICloneable, IEnumerable.

Также есть еще требования к работе которые загоняют в еще большой тупик:

В разработанных классах необходимо реализовать такие концепции ООП, как "наследование" и "полиморфизм". Нужно описать базовый класс (класс-предок) и наследоваться от него.

Часть функциональности классов надо реализовать с использованием свойств. Также необходимо реализовать поддержку сериализации объектов классов. Кроме того нужно описать собственный интерфейс, описать в нем по крайней мере 2 метода или свойства и реализовать их в классе.

Каждый класс обязательно должен содержать не менее двух конструкторов.

При написании классов нельзя использовать классы с просторов имен System.Linq, System.Collection.Generic и System.Collection (списки, ассоциативные массивы, очереди, стеки, множества и т. п.) в случаях, название классов в которых обозначена символом "". Использование массивов допускается (в вариантах, в названии классов в которых «» ограничения на использование коллекций отсутствует).

Обязательно протестировать все реализованные возможности.

using System;

namespace lab4
{
    class Boolean_function {
        static void Main(string[] args) {
            //Console.WriteLine("Hello World!");
        }
        public int GetNumber(Func<int> f) {
            return f();
        }
        //public GetDual(Func<int> f) { return f(); }
    }

    //2 задание
    class WritersCollection {
        bool[] writers = {true, false, true};

        // Этот метод возвращает только true.
        private bool[] IdenticallyTrue(bool[] writers) {
            bool[] result = new bool[0];
            for (int j = 0, i = 0; j < writers.Length; j++) {
                if (writers[j] == true) {
                    result[i] = true;
                    i++;
                }
            }
            return result;
            throw new System.ArgumentOutOfRangeException("true", "Такого значения здесь нет");
        }

        // Этот метод возвращает только false.
        private bool[] IdenticallyFalse(bool[] writers) {
            bool[] result = new bool[0];
            for (int j = 0, i = 0; j < writers.Length; j++) {
                if (writers[j] == false) {
                    result[i] = false;
                    i++;
                }
            }
            return result;
            throw new System.ArgumentOutOfRangeException("false", "Такого значения здесь нет");
        }

        // Метод доступа get вернет массив из всех true.
        public bool[] this[bool[] writers]
        {
            get
            {
                return (IdenticallyTrue(writers));
            }
        }

        // Метод доступа get вернет массив из всех false.
        /*public bool[] this[bool[] writers]
        {
            get
            {
                return (IdenticallyFalse(writers));
            }
        }*/
    }
}

Ответы (0 шт):