调用其他构造函数的构造函数:任何性能问题?

问题描述:

在性能至关重要的应用程序中,是否会有任何明显的优势情景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