2

In an application where performance is crucial, would there be any noticeable advantage of Scenario 1 (completely separate constructors) vs. Scenario 2 (chain-calling constructors)?

Scenario 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

Scenario 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
4

4 回答 4

4

不,不会有明显的区别。

您可以运行自己的基准测试并找出答案。

于 2011-05-06T18:45:22.870 回答
0

速度应该差别不大。Thjere 只是从裸构造函数到深层构造函数的另外 2 次调用......但是:

您应该询问语言 C# 它对调用构造函数的构造函数的看法:P 它不会很顺利,所以我认为您应该坚持使用不同的方法,例如制作“初始化方法”,并从每个构造函数中调用它,并且有更易读的代码。在那里,您需要使用不太可读的“:this(0)”表示法(例如,阅读时的程序性)。而且它会少一个调用来达到做某事的地步。

于 2011-05-06T18:45:22.520 回答
0

不要使用 Marino Šimić 提出的通用 Init() 方法! 它是 C++ 风格,不适合 C#。在 C# 中,初始化应该在构造函数中完成!

有关详细信息,请参阅 Bill Wagners 的书“Effective C#”:

http://www.diranieh.com/NETCSharp/EffectiveCS.htm#14._Use_Constructor_Chaining

于 2013-03-13T08:47:54.607 回答
0

这取决于您所说的明显是什么意思。场景 1 确实引入了额外的调用,但它增加的时间将以毫秒为单位进行测量。场景 2 会更快。(它也会增加生成代码的大小。)

于 2011-05-06T19:09:29.180 回答