C# 用C语言正确设计抽象类#

C# 用C语言正确设计抽象类#,c#,design-patterns,C#,Design Patterns,给定一个抽象类A,它有一个函数sumBill(intA,intB)。现在假设有3个或4个类扩展了类A并实现了它们的sumBill版本。在代码中的不同位置,您使用整数参数调用sumBill。 后来发现参数必须是double类型而不是int类型。因此,现在必须重构调用sumBill传递double数据类型参数的所有位置。 因此,问题是,开发人员首先应该做些什么才能更好地避免这样的问题。 这是一个设计模式问题。如何在C#中实现它?无。这样的事情经常发生。您尽可能地收集需求,但有时这还不够。类似的方法可

给定一个抽象类A,它有一个函数sumBill(intA,intB)。现在假设有3个或4个类扩展了类A并实现了它们的sumBill版本。在代码中的不同位置,您使用整数参数调用sumBill。 后来发现参数必须是double类型而不是int类型。因此,现在必须重构调用sumBill传递double数据类型参数的所有位置。 因此,问题是,开发人员首先应该做些什么才能更好地避免这样的问题。
这是一个设计模式问题。如何在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 */ }   
}
抽象类A{
公共摘要T sumBill(t1,t2);
}
B类:A{
公共重写T sumBill(t1,t2){/*您在此实现了B*/}
}
这种“模式”称为泛型。看一看


然而,仅仅因为将来可能需要,就让每个成员都具有通用性,这是过分的。你可能永远不会真正需要它()。事实上,你无法预见这些情况。你根据一些需求来实现一个软件,如果需求改变了,你也会改变软件。

简单地把你的作业贴在上面是不行的。请说明你已经做了什么,以及你在哪里遇到了问题。看起来你只是想重构它。现代的IDE和工具应该使这相当容易。如果你正在处理财务问题,请阅读
十进制
类型。如果你想为不同的类型重用代码,泛型是很有用的,但这里不是这样(你没有对整数和双精度账单求和,你决定所有账单都需要使用双精度)。听起来,在他写这个方法的时候,他不知道它们会变成双精度的。在这种情况下,我不认为模板化您编写的每个方法是一个很好的解决方案,以防类型可能需要更改。@Kindread确定可能是这样的,我们不知道当时的情况。话虽如此,将每个方法都改为泛型确实不是什么好事。但是如果你必须再一次改变它,你可以考虑这样的解决方案。加上模板在这些情况下绝对不起作用。“如果你不知道基类型,你就不可能写出一个合理的数学运算。”希姆布罗姆比尔。如果我合理地期望我必须同时实现不同类型的模板(在1个或多个项目中),我会考虑泛型/模板,如果我希望它只被实例化为1类型,那么我不一定会使用它。在这种情况下,读者觉得这是一个不必要的复杂问题。请注意,我并不是在暗示我是对的,而你是错的,我只是想更多地了解你的观点。