VS2010の自動生成ソース

PowerShellの拡張コマンドレットを作成してみようとしているのですが、自動生成ソースが表示されたときになんとなく「なんか違う?」と思ってVS2008と比較してみたところ、やっぱり違ってました。
気がついたのは「Implements IDisposable」とした場合です。
ちょっと長いですが、ソースは以下の通り。
○VS2008 ——————————————————————————————-
Imports System.Management.Automation
Imports System.Diagnostics

<Cmdlet(VerbsLifecycle.Stop, "Hoge")> _
Public Class Hoge
    Inherits Cmdlet
    Implements IDisposable

    Protected Overrides Sub ProcessRecord()
        MyBase.ProcessRecord()
    End Sub
    Private disposedValue As Boolean = False        ‘ 重複する呼び出しを検出するには
    ‘ IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ‘ TODO: 他の状態を解放します (マネージ オブジェクト)。
            End If
            ‘ TODO: ユーザー独自の状態を解放します (アンマネージ オブジェクト)。
            ‘ TODO: 大きなフィールドを null に設定します。
        End If
        Me.disposedValue = True
    End Sub
#Region " IDisposable Support "
    ‘ このコードは、破棄可能なパターンを正しく実装できるように Visual Basic によって追加されました。
    Public Sub Dispose() Implements IDisposable.Dispose
        ‘ このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region
End Class
○VS2010 ——————————————————————————————-

Imports System.Management.Automation
Imports System.Diagnostics

<Cmdlet(VerbsLifecycle.Stop, "Hoge")>
Public Class Hoge
    Inherits Cmdlet
    Implements IDisposable
    Protected Overrides Sub ProcessRecord()
        MyBase.ProcessRecord()
    End Sub
#Region "IDisposable Support"
    Private disposedValue As Boolean ‘ 重複する呼び出しを検出するには
    ‘ IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ‘ TODO: マネージ状態を破棄します (マネージ オブジェクト)。
            End If
            ‘ TODO: アンマネージ リソース (アンマネージ オブジェクト) を解放し、下の Finalize() をオーバーライドします。
            ‘ TODO: 大きなフィールドを null に設定します。
        End If
        Me.disposedValue = True
    End Sub
    ‘ TODO: 上の Dispose(ByVal disposing As Boolean) にアンマネージ リソースを解放するコードがある場合にのみ、Finalize() をオーバーライドします。
    ‘Protected Overrides Sub Finalize()
    ‘    ‘ このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
    ‘    Dispose(False)
    ‘    MyBase.Finalize()
    ‘End Sub
    ‘ このコードは、破棄可能なパターンを正しく実装できるように Visual Basic によって追加されました。
    Public Sub Dispose() Implements IDisposable.Dispose
        ‘ このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region
End Class
Regionの範囲とかも変更されているのですが、大きな違いはアンマネージリソースを解放するためのロジック[Finalize()部分]がコメント状態で生成されること。
マネージリソースのみを使用する場合はこのままでよいですし、アンマネージリソースを使用するときにはコメント解除してリソース解放処理を追加するだけになるようです。
仕事でたまにWin32API関連の処理を書きます(.netではなくnative C++です(T_T))が、こんな処理を書こうとすると、前はMSDNのサンプルソースをコピーして使っていましたので、ちょっと嬉しい発見です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください