• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vb.net Charsメソッドについて)

vb.net Charsメソッドについて

このQ&Aのポイント
  • vb.netの勉強をしている際に、getStringメソッドに引数を指定せずに呼び出した場合、ビルドエラーにならないことに疑問があります。
  • 調査の結果、getStringメソッドに引数を指定することでCharsメソッドが呼ばれることがわかりました。
  • しかし、この書き方が正しいのかどうかについては腑に落ちないため、詳しい説明を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.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 を用意すると、また解釈が変わったりします。 エラーにしてしまった方が良い様にも思いますが、適当に解釈してくれます。 バグを生みやすい部分ですね。

daijigo73
質問者

お礼

ご回答ありがとうございます。 大変わかりやすかったです。 >自分で >  Private Overloads Function getString(ByVal index As Integer) As String >を用意すると、また解釈が変わったりします。 確かにIntegerを引数にとるgetStringをオーバーロードした場合は、こちらが優先されて解釈されるのですね。 勉強になりました。

関連するQ&A