Для абстрактного класса A, имеющего функцию sumBill (int a, int b). Теперь предположим, что у вас есть класс 3 или 4 класса, расширяющий класс A и реализующий их версию sumBill. И в разных местах кода вы делаете вызовы sumBill с целыми параметрами. Позже выясняется, что параметры должны быть типа double, а не int. Итак, теперь нужно реорганизовать все места, которые делают вызов sumBill, чтобы передать параметры двойного типа данных. Итак, вопрос в том, что разработчик мог сделать лучше, чтобы избежать такой проблемы в первую очередь. Его вопрос шаблона дизайна. Как реализовать его в C#?Дизайн абстрактного класса в C#
ответ
Нечто подобное может работать:
abstract class A{
public abstract T sumBill<T>(T t1, T t2);
}
class B : A {
public override T sumBill<T>(T t1, T t2) { /* your implementation of B here */ }
}
Эта "модель" называется Обобщения. Посмотрите here Фактически вы не можете предвидеть эти случаи. Вы реализуете программное обеспечение, основанное на некотором требовании, если изменения требований вы также измените.
Похоже, в то время, когда он написал метод, он понятия не имел, что они будут заменены на парные. В этом случае я не думаю, что шаблоны для каждого метода, который вы пишете, на всякий случай, если тип может измениться, - отличное решение. – Kindread
@ Не сомневаюсь, что это может быть так, мы не знаем, что ТО знал в этот момент времени. Сказав это, действительно, не очень важно изменить каждый метод на общий. Но если вам придется изменить его еще раз, вы можете рассмотреть такое решение. – HimBromBeere
Плюс templating так абсолютно не работает в этих случаях. Вы не можете написать разумную математическую операцию, не имея представления о базовом типе. – TomTom
Ничего. Такие вещи случаются. Вы собираете требования так хорошо, как можете, и иногда этого просто недостаточно.
- 1. C# состав дизайн Multiple абстрактного класса
- 2. Дизайн абстрактного пользовательского интерфейса C++
- 3. Расширение абстрактного класса C++
- 4. экземпляр абстрактного класса в C++
- 5. Рефакторинг абстрактного класса в C#
- 6. Наследование абстрактного класса шаблона C#
- 7. C++ - итератор для абстрактного класса
- 8. Дизайн абстрактного общего класса DbContext в EF Core
- 9. Получение класса из абстрактного класса (C++)
- 10. Дизайн мультиплатформенного класса C++
- 11. Предотвращение подкласса интерфейса абстрактного класса в C++
- 12. Инлайн наследование абстрактного класса в C++
- 13. Создать экземпляр производного абстрактного класса в C++
- 14. Как создать массив абстрактного класса в C++
- 15. Ошибка переопределения класса в C++ при получении абстрактного класса из другого абстрактного класса
- 16. Ошибка в расширении абстрактного класса
- 17. частичная реализация абстрактного метода абстрактного класса
- 18. Возвращаемый подкласс абстрактного класса в методе абстрактного класса
- 19. Дизайн класса C++ «вспомогательные функции»
- 20. Распределение кучи абстрактного класса
- 21. C++ VARIADIC шаблон класса дизайн
- 22. Наследование как абстрактного класса, так и класса в C++
- 23. Конструктор C# для типа параметризованного абстрактного класса
- 24. Оператор вывода C++ для абстрактного класса
- 25. написать C# реализация абстрактного класса inline?
- 26. C# Наследование абстрактного класса статического поля
- 27. C++ избежать вызова абстрактного конструктора базового класса
- 28. Частичный метод внутри абстрактного класса (C#)
- 29. Оператор постфиксного абстрактного базового класса C++
- 30. C++ не может создать экземпляр абстрактного класса
Просто размещение домашней работы на SO не будет. Пожалуйста, покажите, что ** вы ** сделали уже и где у вас проблема. – BCdotWEB
кажется, что вы хотите [Generic Class] (http://msdn.microsoft.com/en-us/library/sz6zd40f.aspx) – Grundy
Просто реорганизовать его. Современные IDE и инструменты должны сделать это довольно легко. И прочитайте «decimal», если вы работаете с финансами. Дженерики полезны, если вы хотите повторно использовать код для разных типов, но здесь это не так (вы не суммируете как целые, так и двойные счета, вы решили, что все счета должны использовать double). –