Значение по умолчанию - C#

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

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

Работал с дженериками и интерфейсами. Проблема: есть некоторый интерфейс (INumber), все его элементы поддерживают в той или иной мере конвертацию из double. Это необходимо для, в том числе, инициализации нулей и единиц (в первую очередь, я бы даже сказал). Если я объявляю их как структуру, то при создании нового экземпляра я не могу отслеживать значения некоторых полей (разве что через лютейшие костыли). Если я объявляю их как класс, то моя реализация перестаёт работать. Есть ещё решение, переделать интерфейс в абстрактный класс, но тогда от него не смогут наследоваться структуры (а они нужны). Как это сделал я:
        private static T def = default(T);
        private static T val(double value)
        { return def.Constant(value); } // интерфейс включает в себя T Constant(double value);
        // Этот метод не получается сделать статическим, так что при инициализации класса двумя строчками выше
        // происходит ошибка -- вызов метода у нулевого объекта.
        private static T zero = val(0);
        private static T one = val(1);
Вопросы (ответить положительно на любой из списка): 1. Как задать конструктор по умолчанию для структуры? 2. Как инициализировать элемент известного интерфейса для дженерика (типа new T)? 3. Как запихать конструктор в интерфейс? 4. Как запихать статический метод в интерфейс? 5. Как в интерфейсе определить константу или нечто подобное, разнящееся для каждого наследника? 6. И вообще любой другой способ инициализировать ноль для неизвестного класса известного интерфейса.

Решение задачи: «Значение по умолчанию»

textual
Листинг программы
Interface IFoo
{
   IFoo ZeroValue {get;}
}

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


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

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

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