- ベストアンサー
vb.net Charsメソッドについて
- vb.netの勉強をしている際に、getStringメソッドに引数を指定せずに呼び出した場合、ビルドエラーにならないことに疑問があります。
- 調査の結果、getStringメソッドに引数を指定することでCharsメソッドが呼ばれることがわかりました。
- しかし、この書き方が正しいのかどうかについては腑に落ちないため、詳しい説明を求めています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
getString の時点で戻り値と同じ扱いだから、String の機能が 摘要されていますね。関数呼び出しの引数ではなく、String に Index 指定した解釈です。 String は Char の配列ですよね? Private Sub methodA() Dim a As String = "xyz" Debug.WriteLine(a(1)) Debug.WriteLine(a.Chars(1)) For Each temp As Char In a Debug.WriteLine(temp) Next Debug.WriteLine(getString(1)) Debug.WriteLine(getString()(1)) Debug.WriteLine(getString().Chars(1)) End Sub 例えば戻り値を String の配列にすれば理解できるでしょうか? Private Sub methodA() Dim a As String = getString(1) Dim b As String = getString()(1) '本来はこう書くべき? Dim c As Char = getString()(1)(1) Dim d As String = getString()(1)(1) 'これが成り立つのはCharとStringの関係 End Sub Private Function getString() As String() Dim rtn As String() = {"aaa", "bbb", "ccc"} Return rtn End Function 確かにコードだけ見ると分かり難いですね。 VBは要らぬおせっかい解釈が多いです。それが被って2つの意味で 解釈できるんですね。 自分で Private Overloads Function getString(ByVal index As Integer) As String を用意すると、また解釈が変わったりします。 エラーにしてしまった方が良い様にも思いますが、適当に解釈してくれます。 バグを生みやすい部分ですね。
お礼
ご回答ありがとうございます。 大変わかりやすかったです。 >自分で > Private Overloads Function getString(ByVal index As Integer) As String >を用意すると、また解釈が変わったりします。 確かにIntegerを引数にとるgetStringをオーバーロードした場合は、こちらが優先されて解釈されるのですね。 勉強になりました。