调用其他构造函数的构造函数:任何性能问题?
问题描述:
在性能至关重要的应用程序中,是否会有任何明显的优势情景1(完全独立的构造函数)与情景2(链调用构造函数)?调用其他构造函数的构造函数:任何性能问题?
方案1
Class TwoInts
Private a, b As Integer
Public Sub New(ByVal a As Integer, ByVal b As Integer)
Me.a = a
Me.b = b
End Sub
Public Sub New(ByVal a As Integer)
Me.a = a
Me.b = 0
End Sub
Public Sub New()
Me.a = 0
Me.b = 0
End Sub
End Class
方案2
Class TwoInts
Private a, b As Integer
Public Sub New(ByVal a As Integer, ByVal b As Integer)
Me.a = a
Me.b = b
End Sub
Public Sub New(ByVal a As Integer)
Me.New(a, 0)
End Sub
Public Sub New()
Me.New(0)
End Sub
End Class
答
不,不会有明显的差异。
你可以运行你自己的基准并找出答案。
答
速度不应有很大的差别。 Thjere只有2个多从裸露的构造函数来深一个电话......但是:
你应该问的语言C#它认为有关调用构造函数的构造函数: 在那里,它不会去很好P,所以我认为你应该坚持一种不同的方法,比如做一个“初始化方法”,然后从每个构造函数中调用它,并有一个更易读的代码。在那里你需要使用不太明了的“:this(0)”符号(例如,在阅读时程序化)。而且,只需要少一点电话即可完成某件事。
答
这取决于你明显的意思。情景1确实会引入额外的呼叫,但它添加的时间将以毫秒为单位进行测量。情景2会更快。 (这也会增加生成的代码的大小。)
答
不要使用MarinoŠimić提出的通用Init()方法! 它是C++风格,不适合C#。在C#中,初始化应该在构造函数中完成!
详见比尔瓦格纳的书 “有效的C#”:
http://www.diranieh.com/NETCSharp/EffectiveCS.htm#14._Use_Constructor_Chaining