是否存在与.Net中的重载方法相关的成本?
所以,如果我有3个方法,如:
Calculate (int) Calculate (float) Calculate (double)
并且这些方法在运行时"动态地"调用,基于传递给Calculate方法的内容,这个重载决策的成本是多少?
或者我可以有一个Calculate并在方法体中产生差异,但我认为这将需要该方法在每次调用时评估类型.
是否有更好的方法/设计来解决这个问题,可能没有开销?或者更好的是,处理这类案件的最佳做法是什么?我想拥有相同的类/方法名称,但行为不同.
编辑:谢谢大家.如果它有任何不同,Jusdt有一件事.我想知道你有这些方法的DLL和用C#编写的程序,它允许用户将这些方法添加为UI项(不指定类型).所以用户添加UI项目Calculate(5),然后计算(12.5)等,C#app执行此操作,是否仍然没有开销?
就运行时而言,这些是不同的方法.与写作相同:
CalculateInt(int) CalculateFloat(float)
关于性能问题,除了非常特殊的情况,您可以安全地忽略方法调用开销.
这个问题是关于方法重载,而不是多态.据我所知,方法重载没有惩罚,因为编译器会根据传递给它的参数类型找出在编译时调用哪个方法.
只有在使用派生类型作为基类的替代时,多态性才会发挥作用.
首先,除非您的分析器告诉您存在性能问题,否则您不应为牺牲性能提升而牺牲良好的设计.
要回答您的问题,方法调用的解决方案不是动态的.它是在编译时确定的,因此在这方面没有成本.唯一的成本是可能隐式转换类型以适合参数类型.