这被认为是基于意见的,因为这两种方法都有其各自的优势。 SO上的许多开发人员都有他们自己的偏好,因此要在不放弃意见的情况下进行挑战就很难。
在B类中,每个调用都直接转到方法A,而在C类中,调用首先必须经过本地方法,然后才能转到方法A。此额外步骤可以被认为是多余的,因此B类将是首选。 >
但是,无论出于何种原因,您都可能不得不将尚未实现的类的调用从方法A更改为方法D。在这种情况下,您将不得不在B类中更改四个方法,而在C类中只需更改一个。因此,C类更易于维护和调整。
因此,两者都有其优点和缺点,并且B类的性能提升很小。 (字面上的时钟滴答声!)
因此,总的来说,它并不重要,因此我的建议是选择最适合开发人员阅读的解决方案。这意味着添加注释,使用正确的格式,使用清晰的方法名称,并尝试避免重复自己!
后面的评论意味着B类和C类都是不好的做法,因为每个类is repeating a call to some method。您应该重新考虑将这些方法重塑为单个方法。这可能很棘手,因为这些方法可能有很多差异。
,
十个布林克(Wrink Brink)会写下我想要的答案,因此充其量我只能补充他的话:
我讨厌使用静力学。用一个静态调用替换另一个静态调用是很痛苦的。因此,我更喜欢C。它易于更换。
但是我实际上还有两个可能值得考虑的选择:
第一
当我讨厌静电时,我尽量避免编写它们。而且您所有的类仍然是静态的,将问题向下传递。如果我需要像这样的东西并且它有任何非常量字段,则不会将其设为静态。相反,我将其设置为需要实例的普通类。然后创建一个静态类,该类接受此类的实例。听起来不像是这种差异,但要替换:
static staticsProvider SP = new ImplementationA();
使用
static staticsProvider SP = new ImpelentationB();
允许快速交换。同样,如果您需要两个或多个不同的实例来处理不同的代码段(SP1和SP2),那么现在这只是一个附加的静态字段和实例化。这些是静态处理的两个重要问题。而且您仍然可以在类或函数范围内使用实例。
现在,WPF的方式是“如果无法更改,则将其包装成可以更改的内容!”。那么选项D:
//I am not a static
public class D{
//I am not either
public void MethodA(){
//But I do call one for you
A.MethodA();
}
}
然后您可以创建一个静态字段:
static public D SP = new D();
如果您需要多个静态提供程序,则需要一个静态提供程序?做另一个领域。是否需要其他实现?从D
中提取接口(实际上是VS IDE选项)或创建抽象基类。将变量更改为所述基类/接口。然后创建一个D2类,从您刚刚创建的类继承/实现。
不希望它在运行时更改? const或只读修饰符。但是实际上,在运行时交换实例的能力可能是一项功能。
第二
而不是试图减少对static的调用,如何减少MethodBX和MethodCX的版本呢?
通过使用委托,您可以将“ beforeStatic”和“ afterStatic”部分的代码作为函数上交。
但这仅建议用于很小的差异。如果您的差异很大,则为每个调用编写两个大的委托将使它的可管理性降低,然后只需编写现在获得的多重函数即可。
函数调用开销
调用函数会产生成本。实际上,CPU必须进行跳转。跳动仍然是可以衡量成本的事情。总的来说,它可能不会成熟-我们已经超出了限制CPU周期的时间。另外,它可能会自动避免:
本地C ++具有inline编译器提示。
Afaik .NET不允许此控件。但是它确实具有JiT和编译器优化。那些完全可以自动为您内联。对于这样的功能:
public static StaticCaller() {
MethodA();
}
让我说,如果要嵌入任何任何函数,则类似的函数必须排在列表的顶部。
本文链接:https://www.f2er.com/3128744.html