2011-01-21 6 views
3
Public Function Foo(ByRef a As AClass, _ 
        Optional ByRef b As BClass = Nothing, _ 
        Optional ByRef c As CClass = Nothing) As XClass 

エラー:省略可能なパラメータは、デフォルト値を指定する必要があります。 オプションByRef - VB.NETで間違っていますか?

さんはDasですか?

+0

あなたは、ほぼ間違いなく 'ByVal'を使用する必要があります。 – SLaks

+0

@SLaks:しかしByRefが必要です – serhio

+1

@serhio:なぜですか?あなたはほとんど間違いなくそうします。 – SLaks

答えて

3

これは空のクラスで私にとってうまくコンパイルされます。他の行やパラメータクラスの定義に誤りがあると思います。

Public Class Class1 

    Public Function Foo(ByRef a As aclass, _ 
         Optional ByRef b As bclass = Nothing, _ 
         Optional ByRef c As cclass = Nothing) As xclass 
     Return Nothing 
    End Function 

End Class 

Public Class aclass  
End Class 

Public Class bclass  
End Class 

Public Class cclass  
End Class 

Public Class xclass 
End Class 
+0

私はこのようなコードを手に入れようとしている人はすぐに戸口に出てくると言わざるを得ないが、同様の実験をしても問題はなかった。 –

+0

あなたは理由があります... – serhio

+0

私はちょうど 'ByRef b as bclass As bclass = Nothing'(として繰り返す)質問申し訳ありません。 – serhio

1

これは私がそれらのパラメータを必要としないオーバーロードを作成することをお勧めしたいあなたが使用したいパターンである場合:

Public Function Foo(ByRef a As AClass) As XClass 
    Return Foo(a, Nothing, Nothing) 
End Function 
Public Function Foo(ByRef a As AClass, ByRef b As BClass, ByRef c As CClass) As XClass 
    '//Return XClass here 
End Function 
+0

C#アプローチ。特にVB.NETでは必要ありません – serhio

+1

いいえ、これは間違いなくVBのアプローチです。 C#では、refパラメータにnull値を指定することは決してありません。私はオプションのパラメータの考え方にはあまり気にしなかったので、私はより多くの負荷に傾いています。あなたは本当により明確で洗練されたコードで終わります。 –

+0

@serhio:実際にはオプションのパラメータがエラーの原因かもしれません。 –

関連する問題