トップ回答者
引数が多すぎる

質問
-
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim obj1 As New setnumber("----", "----", 0)
Dim obj2 As New setnumber("A101", "三島敏夫", 0)
Dim obj3 As New setnumber("B101", "高志尾一男", 28)
MessageBox.Show(obj1.code & "," & obj1.name & obj1.age)MessageBox.Show(obj2.code & "," & obj2.name & ", " & obj2.age)
MessageBox.Show(obj3.code & "," & obj3.name & ", " & obj3.age)
End Sub
End ClassPublic Class setnumber
Public code As String
Public name As String
Public age As IntegerPublic Sub this()
Me.this("----", "----", 0)
End Sub
Public Sub this(cd As String, nm As String)
Me.this(cd, nm, 0)
End Sub
Public Sub this(cd As String, nm As String, ag As Integer)
Me.this("B101", "yamadatarou", 28)
code = cd
name = nm
age = ag
End Sub
End Classこのプログラムの場合(”----”、”----”、0)と(”A101”、”三島敏夫”、0)と(”B101”、”貴志尾和夫”、28)の所に青色の下波線が付き「引数が多すぎます。」と出ますが、どのように改善したらよろしいでしょうか。
Yoshiroh Itoh
回答
-
もう1個のスレに書こうとしたらロックされて削除対象になってたのでこっちに返信
まず、フォーラムの使い方の説明から
#どうも現在のフォーラムは使い方の説明ページもない初心者に優しくない状態になっているようです
「以前の、ご質問のオーバーロードに関するスレッドでの、私の 参照ページ も、もう一回、ご覧下さい。」と御回答くださった方の参照ページの見方もよろしければ一緒に教えてください。
ページの左上の質問ボタンの下にあるクイックアクセスからマイスレッドを選択すると、過去の投稿が見られます。
ấẦầẨẩẪさんのスレッド の一覧にある メソッドをオーバーロードする(パラメーターの相違) ですねそれと、返信したい回答の下に「返信」と「引用」というリンクがありますので、そこから返信しましょう。
フォーラムページの左上にある「質問」ボタンは新規の質問を行う時のボタンです。
で、質問の方の回答
質問の意味が不十分だったのですが、CSVのように文字列を""で括った形式で表示したいということでしょうか?
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim obj1 As New setnumber("----", "----", 0) Dim obj2 As New setnumber("A101", "三島敏夫", 0) Dim obj3 As New setnumber("B101", "高志尾一男", 28) MessageBox.Show(obj1.code & "," & obj1.name & ", " & obj1.age) 'たぶん書き間違いだと思われる MessageBox.Show(obj2.code & "," & obj2.name & ", " & obj2.age) MessageBox.Show(obj3.code & "," & obj3.name & ", " & obj3.age) '簡略化した方法で表示させるやり方もあります MessageBox.Show(obj1.ToCSV()) MessageBox.Show(obj2.ToCSV()) MessageBox.Show(obj3.ToCSV()) MessageBox.Show(obj1.ToCSV_StringFormat()) MessageBox.Show(obj2.ToCSV_StringFormat()) MessageBox.Show(obj3.ToCSV_StringFormat()) End Sub Public Class setnumber Public code As String Public name As String Public age As Integer Public Sub New() 'VBのコンストラクタはSub Newです Me.New("----", "----", 0) End Sub Public Sub New(cd As String, nm As String) 'VBのコンストラクタはSub Newです Me.New(cd, nm, 0) End Sub Public Sub New(cd As String, nm As String, ag As Integer) 'Me.new("B101", "yamadatarou", 28) 'このコンストラクタ自身を呼び出しているので間違い code = cd name = nm age = ag End Sub '文字列にするのに決まった書式にするなら関数にしてしまえば文字列を結合するコードを何度も書かなくて済みます Public Function ToCSV() As String ' ”は文字列をくくる文字と区別できないので、””のように2個続けて書く必要があります Return """" & code & """,""" & name & """," & age End Function '文字列にするのに決まった書式にするなら関数にしてしまえば文字列を結合するコードを何度も書かなくて済みます 'String.Formatという方法で書式を決めて文字列を作ることもできます ' http://msdn.microsoft.com/ja-jp/library/system.string.format.aspx Public Function ToCSV_StringFormat() As String Return String.Format("""{0}"",""{1}"",{2}", code, name, age) End Function End Class End Class
#コードの書式がC#になっていたのを修正
追記
フォーラムの使い方についてのディスカッション「現在の日本語フォーラムは初心者には使い方が分かりづらい」を投稿しました。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 ひらぽんModerator 2014年4月5日 0:23
- 回答の候補の設定解除 ひらぽんModerator 2014年4月5日 0:41
- 編集済み gekkaMVP 2014年4月5日 1:08
- 回答の候補に設定 ひらぽんModerator 2014年4月7日 9:12
- 回答としてマーク 星 睦美 2014年4月14日 8:01
-
コンストラクタは Sub New です。
http://msdn.microsoft.com/ja-jp/library/2z08e49e(v=vs.90).aspx
- 回答の候補に設定 ひらぽんModerator 2014年4月7日 9:11
- 回答としてマーク 星 睦美 2014年4月14日 8:02
-
Azulean さんの返信につきてますが、最後のメソッド内の一行目
Me.this("B101", "yamadatarou", 28)
を
MyClass.New("B101", "yamadatarou", 28)
とかに変えるとコンパイルエラーが発生するので、この行はまったく不要です。
#そもそも意味がない
ひらぽん http://d.hatena.ne.jp/hilapon/
- 編集済み ひらぽんModerator 2014年4月3日 22:50 文の追加
- 回答としてマーク 星 睦美 2014年4月14日 8:02
-
ấẦầẨẩẪ さま 拝見しました。リンクを貼らなかったのでご迷惑お掛けしました。
さて、gekka さまが具体的なコードを示して下さったので、もう、お分かりでしょう。
クラスの定義 と オーバーロード に関する msdn の解説と併せて、見較べて見るといいと思います。
(本当は、ご自分で考えて頂きたくて、前の様な投稿にしました。)尚、gekka さまのコードの内、最初の部分は、オーバーロードが上手く行っているかの確認も含め、
以下の様に書き換えては如何でしょうか。Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Dim obj1 As New setnumber("----", "----", 0) 'Dim obj2 As New setnumber("A101", "三島敏夫", 0) 'Dim obj3 As New setnumber("B101", "高志尾一男", 28) ' オーバーロードされた New を試す Dim obj1 As New setnumber Dim obj2 As New setnumber("A101", "三島敏夫") Dim obj3 As New setnumber("B101", "高志尾一男", 28)
ここでは、New は、3つの引数が基本で、省略した時の初期値を setnumber クラスが用意していると考えると分かり易いのではないでしょうか。
- 編集済み ShiroYuki_Mot 2014年4月5日 6:49 文字をハイパーリンクに変更
- 回答の候補に設定 ひらぽんModerator 2014年4月7日 9:11
- 回答としてマーク 星 睦美 2014年4月14日 8:01
すべての返信
-
コンストラクタは Sub New です。
http://msdn.microsoft.com/ja-jp/library/2z08e49e(v=vs.90).aspx
- 回答の候補に設定 ひらぽんModerator 2014年4月7日 9:11
- 回答としてマーク 星 睦美 2014年4月14日 8:02
-
Azulean さんの返信につきてますが、最後のメソッド内の一行目
Me.this("B101", "yamadatarou", 28)
を
MyClass.New("B101", "yamadatarou", 28)
とかに変えるとコンパイルエラーが発生するので、この行はまったく不要です。
#そもそも意味がない
ひらぽん http://d.hatena.ne.jp/hilapon/
- 編集済み ひらぽんModerator 2014年4月3日 22:50 文の追加
- 回答としてマーク 星 睦美 2014年4月14日 8:02
-
ấẦầẨẩẪ さま よろしく。
チュートリアル: クラスの定義 (Visual Basic)
http://msdn.microsoft.com/ja-jp/library/xtka85tz.aspx辺りをご覧下さい。
setnumber クラスの中では、変数として定義して、利用する Form1 クラスで値として代入しましょう。以前の、ご質問のオーバーロードに関するスレッドでの、私の 参照ページ も、もう一回、ご覧下さい。
- 編集済み ShiroYuki_Mot 2014年4月5日 1:26 はしょって、リンクを入れなかったのでご迷惑お掛けしました。gekka さま、感謝です。
- 回答の候補に設定 ひらぽんModerator 2014年4月7日 9:11
-
もう1個のスレに書こうとしたらロックされて削除対象になってたのでこっちに返信
まず、フォーラムの使い方の説明から
#どうも現在のフォーラムは使い方の説明ページもない初心者に優しくない状態になっているようです
「以前の、ご質問のオーバーロードに関するスレッドでの、私の 参照ページ も、もう一回、ご覧下さい。」と御回答くださった方の参照ページの見方もよろしければ一緒に教えてください。
ページの左上の質問ボタンの下にあるクイックアクセスからマイスレッドを選択すると、過去の投稿が見られます。
ấẦầẨẩẪさんのスレッド の一覧にある メソッドをオーバーロードする(パラメーターの相違) ですねそれと、返信したい回答の下に「返信」と「引用」というリンクがありますので、そこから返信しましょう。
フォーラムページの左上にある「質問」ボタンは新規の質問を行う時のボタンです。
で、質問の方の回答
質問の意味が不十分だったのですが、CSVのように文字列を""で括った形式で表示したいということでしょうか?
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim obj1 As New setnumber("----", "----", 0) Dim obj2 As New setnumber("A101", "三島敏夫", 0) Dim obj3 As New setnumber("B101", "高志尾一男", 28) MessageBox.Show(obj1.code & "," & obj1.name & ", " & obj1.age) 'たぶん書き間違いだと思われる MessageBox.Show(obj2.code & "," & obj2.name & ", " & obj2.age) MessageBox.Show(obj3.code & "," & obj3.name & ", " & obj3.age) '簡略化した方法で表示させるやり方もあります MessageBox.Show(obj1.ToCSV()) MessageBox.Show(obj2.ToCSV()) MessageBox.Show(obj3.ToCSV()) MessageBox.Show(obj1.ToCSV_StringFormat()) MessageBox.Show(obj2.ToCSV_StringFormat()) MessageBox.Show(obj3.ToCSV_StringFormat()) End Sub Public Class setnumber Public code As String Public name As String Public age As Integer Public Sub New() 'VBのコンストラクタはSub Newです Me.New("----", "----", 0) End Sub Public Sub New(cd As String, nm As String) 'VBのコンストラクタはSub Newです Me.New(cd, nm, 0) End Sub Public Sub New(cd As String, nm As String, ag As Integer) 'Me.new("B101", "yamadatarou", 28) 'このコンストラクタ自身を呼び出しているので間違い code = cd name = nm age = ag End Sub '文字列にするのに決まった書式にするなら関数にしてしまえば文字列を結合するコードを何度も書かなくて済みます Public Function ToCSV() As String ' ”は文字列をくくる文字と区別できないので、””のように2個続けて書く必要があります Return """" & code & """,""" & name & """," & age End Function '文字列にするのに決まった書式にするなら関数にしてしまえば文字列を結合するコードを何度も書かなくて済みます 'String.Formatという方法で書式を決めて文字列を作ることもできます ' http://msdn.microsoft.com/ja-jp/library/system.string.format.aspx Public Function ToCSV_StringFormat() As String Return String.Format("""{0}"",""{1}"",{2}", code, name, age) End Function End Class End Class
#コードの書式がC#になっていたのを修正
追記
フォーラムの使い方についてのディスカッション「現在の日本語フォーラムは初心者には使い方が分かりづらい」を投稿しました。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 ひらぽんModerator 2014年4月5日 0:23
- 回答の候補の設定解除 ひらぽんModerator 2014年4月5日 0:41
- 編集済み gekkaMVP 2014年4月5日 1:08
- 回答の候補に設定 ひらぽんModerator 2014年4月7日 9:12
- 回答としてマーク 星 睦美 2014年4月14日 8:01
-
-
ấẦầẨẩẪ さま 拝見しました。リンクを貼らなかったのでご迷惑お掛けしました。
さて、gekka さまが具体的なコードを示して下さったので、もう、お分かりでしょう。
クラスの定義 と オーバーロード に関する msdn の解説と併せて、見較べて見るといいと思います。
(本当は、ご自分で考えて頂きたくて、前の様な投稿にしました。)尚、gekka さまのコードの内、最初の部分は、オーバーロードが上手く行っているかの確認も含め、
以下の様に書き換えては如何でしょうか。Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Dim obj1 As New setnumber("----", "----", 0) 'Dim obj2 As New setnumber("A101", "三島敏夫", 0) 'Dim obj3 As New setnumber("B101", "高志尾一男", 28) ' オーバーロードされた New を試す Dim obj1 As New setnumber Dim obj2 As New setnumber("A101", "三島敏夫") Dim obj3 As New setnumber("B101", "高志尾一男", 28)
ここでは、New は、3つの引数が基本で、省略した時の初期値を setnumber クラスが用意していると考えると分かり易いのではないでしょうか。
- 編集済み ShiroYuki_Mot 2014年4月5日 6:49 文字をハイパーリンクに変更
- 回答の候補に設定 ひらぽんModerator 2014年4月7日 9:11
- 回答としてマーク 星 睦美 2014年4月14日 8:01