2014-11-28 4 views
-2

Для абстрактного класса A, имеющего функцию sumBill (int a, int b). Теперь предположим, что у вас есть класс 3 или 4 класса, расширяющий класс A и реализующий их версию sumBill. И в разных местах кода вы делаете вызовы sumBill с целыми параметрами. Позже выясняется, что параметры должны быть типа double, а не int. Итак, теперь нужно реорганизовать все места, которые делают вызов sumBill, чтобы передать параметры двойного типа данных. Итак, вопрос в том, что разработчик мог сделать лучше, чтобы избежать такой проблемы в первую очередь. Его вопрос шаблона дизайна. Как реализовать его в C#?Дизайн абстрактного класса в C#

+2

Просто размещение домашней работы на SO не будет. Пожалуйста, покажите, что ** вы ** сделали уже и где у вас проблема. – BCdotWEB

+1

кажется, что вы хотите [Generic Class] (http://msdn.microsoft.com/en-us/library/sz6zd40f.aspx) – Grundy

+1

Просто реорганизовать его. Современные IDE и инструменты должны сделать это довольно легко. И прочитайте «decimal», если вы работаете с финансами. Дженерики полезны, если вы хотите повторно использовать код для разных типов, но здесь это не так (вы не суммируете как целые, так и двойные счета, вы решили, что все счета должны использовать double). –

ответ

-1

Нечто подобное может работать:

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 Фактически вы не можете предвидеть эти случаи. Вы реализуете программное обеспечение, основанное на некотором требовании, если изменения требований вы также измените.

+1

Похоже, в то время, когда он написал метод, он понятия не имел, что они будут заменены на парные. В этом случае я не думаю, что шаблоны для каждого метода, который вы пишете, на всякий случай, если тип может измениться, - отличное решение. – Kindread

+0

@ Не сомневаюсь, что это может быть так, мы не знаем, что ТО знал в этот момент времени. Сказав это, действительно, не очень важно изменить каждый метод на общий. Но если вам придется изменить его еще раз, вы можете рассмотреть такое решение. – HimBromBeere

+1

Плюс templating так абсолютно не работает в этих случаях. Вы не можете написать разумную математическую операцию, не имея представления о базовом типе. – TomTom

2

Ничего. Такие вещи случаются. Вы собираете требования так хорошо, как можете, и иногда этого просто недостаточно.

Смежные вопросы