Значение по умолчанию - C#
Формулировка задачи:
Работал с дженериками и интерфейсами. Проблема: есть некоторый интерфейс (INumber), все его элементы поддерживают в той или иной мере конвертацию из double. Это необходимо для, в том числе, инициализации нулей и единиц (в первую очередь, я бы даже сказал). Если я объявляю их как структуру, то при создании нового экземпляра я не могу отслеживать значения некоторых полей (разве что через лютейшие костыли). Если я объявляю их как класс, то моя реализация перестаёт работать. Есть ещё решение, переделать интерфейс в абстрактный класс, но тогда от него не смогут наследоваться структуры (а они нужны).
Как это сделал я:
Вопросы (ответить положительно на любой из списка):
1. Как задать конструктор по умолчанию для структуры?
2. Как инициализировать элемент известного интерфейса для дженерика (типа new T)?
3. Как запихать конструктор в интерфейс?
4. Как запихать статический метод в интерфейс?
5. Как в интерфейсе определить константу или нечто подобное, разнящееся для каждого наследника?
6. И вообще любой другой способ инициализировать ноль для неизвестного класса известного интерфейса.
Листинг программы
- 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);
Решение задачи: «Значение по умолчанию»
textual
Листинг программы
- Interface IFoo
- {
- IFoo ZeroValue {get;}
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д