- ベストアンサー
自作したメソッド・・・こんな場合、引数は省略すべき?
- 仮に、フォームにボタンが複数個あり、いずれかのボタンをクリックすると、共通処理のモジュール「shori」を呼び出すプログラムを想定します。
- 引数を省略しない形だと、コードが煩雑になります。この場合、引数を省略する形、つまり(a)~(c)のコードを(d)の箇所へ書き込む手法は積極的に行うべきでしょうか?
- ご助言よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 自作したメソッド・・・引数はなるべく省略すべき?(VB2005)
自作したメソッドに関して、引数はなるべく設定するべきでしょうか?それとも、引数は省略できるなら省略したほうがよいでしょうか? 下記(a)、(b)は例です。 a)引数はなるべく省略 --------------------------------- Private Sub hoge() Call foo() End Sub Private Sub foo() Dim hoga As integer = Pbar 'プロパティ「Pbar」の値を設定 '処理 End Sub --------------------------------- b)あえて引数を設定 --------------------------------- Private Sub hoge() Dim hoga As integer = Pbar 'プロパティ「Pbar」の値を設定 Call foo(hoga) End Sub Private Sub foo(ByVal hoga As integer) '処理 End Sub --------------------------------- 現在、(b)のようにあえて引数を設定したほうが、呼び出し先のメソッドがどういう処理を行っているかを掴めていいかな?と考え始めています。 ご助言よろしくお願い致します。
- ベストアンサー
- Visual Basic
- プロパティを通さなければアクセスできない変数を設定したい(VB2005)
下記はメンバ変数とプロパティのコードです。 -------------------------------------- 'メンバ変数 Private _hoge As Integer = 1 'プロパティ Private ReadOnly Property phoge() Get Return _hoge End Get End Property -------------------------------------- 上記の構造だと、同じクラス内であれば、下記のようにメンバ変数へプロパティを通さずアクセスが可能です。 Private Sub aaa() MessageBox.Show(_hoge) ' 1 と表示される(ここでエラーを出したい) End Sub 質問内容は、変数_hogeに対してアクセスするには、(同じクラス内からのアクセスであっても)プロパティを通さなければならない形にしたい、というものです。 つまり、下記のような形でないとエラーが発生するようにしたいと考えています。 Private Sub aaa() Dim foo As Integer = phoge() MessageBox.Show(foo) End Sub どうぞよろしくお願い致します。
- ベストアンサー
- Visual Basic
- VBのfunctionの引数について
2の Double型と 3の Single型のように送る側と受け取る側の変数の型が 違ってもよいのでしょうか?プログラムはそのまま実行できたのですが・・・・。 Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim koku As Integer Dim san As Integer Dim rika As Integer Dim ave As Double------------------------------------1 koku = Val(TextBox1.Text) san = Val(TextBox2.Text) rika = Val(TextBox3.Text) ave = (koku + san + rika) / 3 Label5.Text = Round(ave)-------------------------------2 End Sub Private Function Round(ByVal sngvalue As Single-----3) As Integer Dim intvalue As Integer intvalue = Int(sngvalue + 0.5) Return intvalue End Function End Class
- ベストアンサー
- Visual Basic
- VB6における事前バインディングの記述方法について
VB6.0で、ActiveXコンポーネントのインスタンス生成に関連する質問をさせていただきます。 まず前提として、VB6.0では、 ExcelのようなActiveXコンポーネントをコード上で生成する場合、下記の4通りの記述が可能です。 -------------------------------------------- '(1) 参照設定は要らない Dim hoge As Object Set hoge = CreateObject("Foo.Bar") '(2) 参照設定が必要 Dim hoge As Foo.Bar Set hoge = CreateObject("Foo.Bar") '(3) 参照設定が必要 Dim hoge As Object Set hoge = New Foo.Bar '(4) 参照設定が必要 Dim hoge As Foo.Bar Set hoge = New Foo.Bar --------------------------------------------- この中で遅延バインディング(実行時バインディング)は(1)のみで、 (2)~(4)は事前バインディングです。 ここで疑問なのですが、開発者が事前バインディングでコーディングを行う場合、 (4)以外の記述(つまり、(2)と(3)の記述方法)にメリットや必要性はあるのでしょうか。 (2)はコード補完が使えなくなりますし、 (3)はレジストリ経由のせいでパフォーマンスが低下するでしょうし、 デメリットしかないように思われます。 そうであれば、これらの記述方法は推奨されないものなのでは、と思ったしだいです。 回答、よろしくお願いします。
- 締切済み
- Visual Basic
- vb.net Charsメソッドについて
vs2008、.NET Framework 3.5 にてvb.net の勉強をしているのですが、 下記のような場合にビルドエラーにならないことについて 疑問があります。 Public Class ClassA Private Sub methodA() Dim a As String = getString(1) ・・・★ End Sub Private Function getString() As String Return "abcdefg" End Function End ClassA getStringメソッドには引数をとらないもののみが定義 されているので、methodAからgetStringメソッドを呼び出した 場合(★)は、ビルドエラーになると思うのですが、なりません。 a の値は"b"になります。 調べてみたところ、引数に1を設定したことによって、 Charsというメソッドが呼ばれているようなのですが、 それであれば、 Dim a As String = getString().Chars(1) と書くものだと思うのですが…。 こういう書き方もできるんだという話であればそれまでなのですが、 どうも腑に落ちないので、説明できる方がいらっしゃれば 教えていただきたいです。
- ベストアンサー
- Visual Basic
- ユーザ定義関数の引数省略について
VBAで自分で関数を作成しているのですが、 引数を複数省略したいときはどうすれば良いでしょうか? 例えば、Test(A as integer, Optional B as integer =1, Optional C as integer =1)という関数で Test(1,0)と記述した時に"0"は引数BなのかCなのかどうやって指定するのでしょうか? それとも複数省略は出来ないのでしょうか?
- ベストアンサー
- Excel(エクセル)
- VB6で配列を引数にするときの2通りの方法について
VB6で引数に配列を渡す方法が2通りあるよう?ですが以下のような配列があり、渡し方によって引数の定義の仕方が異なると思うのですが、(2)番目の関数の書き方が知りたいです。 dim ary_dat(10) as integer (1)test_A( ary_dat ) は、sub test_A( byref ary() as integer)という関数を作れば動作することはわかりましたが、 (2)test_B( ary_dat(0) ) は、関すでどのような引数を定義すればできるのでしょうか?
- 締切済み
- Visual Basic
- 配列を引数で渡したりするには?
初心者なので困っています。配列をほかのサブルーチンへ渡して、その中で配列の値を書き換えて、上層のルーチンへ渡すにはどうしたらよいのでしょうか? 初心者なので、みなまさまのお知恵を拝借させてください。よろしくお願いします。 Private Sub Print() Dim C_ALL(3) As Integer Dim D_ALL(3) As Integer Data_Set(C_ALL(), D_ALL()) MsgBox(C_ALL() & " " & D_ALL()) '配列内容すべて表示 End Sub Private Sub Data_set(ByRef C_ALL As Integer, ByRef D_ALL As Integer) Dim i As Integer For i = 0 To 4 C_ALL(i) += i D_ALL(i) += i i += 1 Next End Sub
- 締切済み
- Visual Basic
- 自作クラスのイベントを外部ハンドラでスレッドセーフ
■.NETモジュールプロジェクト(DLL) Public Class MyClass Public Event hoge( ByVal sender As Object, ByVal e As EventArgs ) Private WithEvents Timer As Timers.Timer Private Sub New() Timer = New Timers.Timer : Timer.Interval = 10 : Timer.Start() End Sub Private Sub fuga( ByVal sender As Object, ByVal e As EventArgs ) Handles Timer.Elapsed RaiseEvent hoge( Me, New EventArgs ) ' 一定時間ごとにイベントを発生させる End Sub End Class ■上の.NETモジュールを参照している Windows Form アプリケーションプロジェクト(EXE) Public Class Form1 Private WithEvents foo As MyClass.MyClass Public Sub New() InitializeComponent() foo = New MyClass.MyClass End Sub Private Sub bar() Handles foo.hoge TextBox1.Text = "baz" ' TextBox1 は デザイナで Form1 に貼り付け済み End Sub End Class という 2 プロジェクトを含むソリューションを作成しました。実行すると、 有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'TextBox1' がアクセスされました。 というエラーが出てきます。 foo が MyClass ではなく、system.windows.forms.dll などに入っている Button や Form といったコントロールの場合は、上記の bar() のような書き方でもスレッドセーフに扱えるので、MyClass もForm1 のコードを修正する事なく、利用できたらなと思っています。 その場合、どのように MyClass を書けばいいでしょうか。環境は VS2008 で、.NET2.0 ベースです。
- ベストアンサー
- Visual Basic
- Option Strictと構造体とArrayListの関係について(VB2005)
下記はArrayListに構造体の値を格納し、表示させるプログラムです。 -------------------------------- Option Strict Off '構造体 Public Structure hoge Dim a As String Dim b As String Dim c As String End Structure Private Sub test() Dim aryhoge As New ArrayList Dim foo As hoge foo.a = "aa" foo.b = "bb" foo.c = "cc" aryhoge.Add(foo) MessageBox.Show(aryhoge(0).a) 'A) Option Strict Off だと"aa"と表示される End Sub -------------------------------- このプログラムはOption Strict Offだとメッセージボックスに"aa"と表示されます。 ですがOption Strict Onだと、(A)の箇所にて「遅延バインディングを使用できません」というエラーが発生し、実行ができません。 質問内容は、Option Strict Onで上記のプログラムを動かすには、(A)をどのように修正すればよいか、というものです。 どうぞよろしくお願い致します。
- ベストアンサー
- Visual Basic
お礼
sgwjnさん 詳細な解説ありがとうございます。 やはり省略すべきですか。 大変参考になりました。 ご回答ありがとうございました。