Visual Basicでは、デフォルト値は以下のように設定されます:
Optionalキーワードと初期化子を使います。Public Sub LogMessage(message As String, Optional level As String = "INFO") Console.WriteLine($"[{level}]: {message}") End Sub ' 第二引数なしの呼び出し - 'INFO'になります LogMessage("Test")
Public Property Status As String = "Undefined"
特徴:
VB.NETでオブジェクト型のパラメータにデフォルト値を設定できますか?
回答: いいえ、Optionalパラメータには定数式のみが許可され、つまり値型と文字列型です。オブジェクトの場合、Nothingの値のみが使用でき、必要なオブジェクトはメソッド内で作成する必要があります:
Public Sub DoWork(Optional obj As SomeClass = Nothing) If obj Is Nothing Then obj = New SomeClass() End If ' ... End Sub
物語
金融システム: Optional値付きの新しいパラメータを追加する際、開発者がリストの最後に指定しなかった。すべての呼び出しはコンパイルされましたが、パラメータがずれて、値が誤って渡される結果となった。
物語
報告システム: 自動初期化を使用するプロパティ(VB.NET 2010+)を適用したが、構文からの値のオーバーライドのロジックを考慮するのを忘れ、デフォルト値が常に正しく上書きされなかった。
物語
外部APIとの統合: Optionalパラメータのデフォルト値としてオブジェクトを設定しようとした際、コンパイル時エラーが発生し、リリースが遅れ、メソッドシグネチャの大規模なリファクタリングが必要になった。