2

パフォーマンスが重要なアプリケーションでは、シナリオ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
4

4 に答える 4

4

いいえ、目立った違いはありません。

独自のベンチマークを実行して調べることができます。

于 2011-05-06T18:45:22.870 に答える
0

MarinoŠimićによって提案された一般的なInit()メソッドを使用しないでください! これはC++スタイルであり、C#には適していません。C#では、初期化はコンストラクターで行う必要があります。

詳細については、Bill Wagnersの本「EffectiveC#」を参照してください。

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

于 2013-03-13T08:47:54.607 に答える
0

速度はそれほど変わらないはずです。Thjereは、ベアコンストラクターからディープコンストラクターへの呼び出しがあと2回だけです...しかし:

言語C#に、コンストラクターを呼び出すコンストラクターについてどう思うかを尋ねる必要があります:Pそこではうまくいかないので、「初期化メソッド」を作成するなどの別のアプローチに固執し、各コンストラクターからそれを呼び出す必要があると思います。より読みやすいコードがあります。そこでは、それほど読みにくい「:this(0)」表記を使用する必要があります(たとえば、それを読むときの手続き型)。そして、何かをするポイントに到達するための呼び出しが1つ少なくなります。

于 2011-05-06T18:45:22.520 に答える
0

それはあなたが目立つことによって何を意味するかによります。シナリオ1では追加の呼び出しが発生しますが、追加される時間は1ミリ秒の何分の1かで測定されます。シナリオ2はより高速になります。(生成されるコードのサイズも大きくなります。)

于 2011-05-06T19:09:29.180 に答える