教えて!gooグレードポイントがdポイントに!

お世話になっています。
.NETでのコーディングを行っています。

標記の件ですが、初めてなので
.NETからなのか、もともとそうなのかは不明なのですが、
プロシージャの引数をOptionalで宣言すると、
省略された時の値を設定する必要がありますよね。

省略可能の引数を配列変数にしたい場合、どのように宣言したら良いのでしょうか?

初期値って言っても、今回省略可能にしたい変数は、
検索結果を格納するための変数ですので、
省略されたときには何の値も入っていなくて良いんです。


宣言部分は以下のとおりです。

Public Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _
ByRef Wstr_WeekNm() As String, _
ByRef Wstr_WeekNmR() As String) As Boolean

この、Wstr_WeekNmR()を省略可能にしたいのです。

このような場合、どうやって宣言するべきなのでしょうか?
ヘルプを見たのですが、よくわからなくて・・・(;_;)

念のため、省略された時に、何らかの値を設定する方法も知りたいです。
よろしくお願いいたします。

教えて!goo グレード

A 回答 (5件)

>ByRefは、呼び出された関数内で値を変えるための変数という認識でよいのでしょうか?


そうですね、呼び出し元のコピー(ByVal)でなく、呼び出し元で渡した変数自身を直接変更するということです。

>取得したい検索結果が3個あり、2つだけ取得したい場合と、3つ全部取得したい場合があります。
そういう場合は、
引数が3つある関数と2つある関数と2つ作っておけば、いいような気がします。
あるいは、
#3の方の言われる様に(註:ByRefでいいです)
Optional ByRef Wstr_WeekNmR() As String = Nothing
optional指定をした場合は、配列の場合nothingしか指定できません。
(なので、質問文で言われるような「省略された時に、何らかの値を設定する方法」(定数の配列?)はありません)
そして、Wstr_WeekNmR is Nothingで省略されたかどうか調べればいいですね。
    • good
    • 1
この回答へのお礼

>(なので、質問文で言われるような「省略された時に、何らかの値を設定する方法」(定数の配列?)はありません)

なるほどです(笑)
今回はNothingでOKですので、希望どおりのことが出来ました。

とても勉強になりました。ありがとうございました。

お礼日時:2005/01/26 14:33

#1です



下記の方法ではいけないのですか?
コーディング上でインテリセンスも出てきますのでスマートだと思いますが...

<既存のメソッドに「Overloads」を加える>
Public Overloads Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _
ByRef Wstr_WeekNm() As String, _
ByRef Wstr_WeekNmR() As String) As Boolean


<新規メソッドを追加する。既存のメソッドにスルーするように作成する>
Public Overloads Function CM_fun_b_Get_WeekdayNm(ByRef Wstr_WeekKb() As String, _
ByRef Wstr_WeekNm() As String) As Boolean

  Return CM_fun_b_Get_WeekdayNm(Wstr_WeekKb, Wstr_WeekNm, Nothing)

End Function
    • good
    • 1
この回答へのお礼

すみません!!
お礼をしたつもりがすっかり抜けてしまっていました(T.T)

Overloadsをヘルプで読んだのですが、あんまりよくわからなくて・・・_(^^;)ゞ

教えてもらったソースを読んで、しっかり理解したいと思います。ありがとうございました。

お礼日時:2005/01/26 14:35

省略したい引数のところだけ


Optional ByVal 引数() As String = Nothing

> 検索結果を格納するための変数ですので、
> 省略されたときには何の値も入っていなくて良いんです。
結果を返す必要がないときがあるというなら、上記の方法でOK。
配列のdefaultvalueはnothingしか指定できない


ただし、配列の要素に値が入っていなくてもかまわないという理由で「省略可能」といっているなら、それは不可です
    • good
    • 1
この回答へのお礼

有り難うございました。
おかげさまでエラーが出なくなりました。

なるほど。Nothingを指定するのですね。
一生懸命Nullを指定しようとしてました(^_^;)
エラーになりますが・・・。

>配列のdefaultvalueはnothingしか指定できない

なるほど。
・・・まだまだVBの常識というものが
覚えきれていないことを認識しました。

とても勉強になりました。
有り難うございました。

お礼日時:2005/01/25 13:20

>初期値って言っても、今回省略可能にしたい変数は、


>検索結果を格納するための変数ですので、
>省略されたときには何の値も入っていなくて良いんです。
配列変数は、参照型(ByRef)でないといけなくて、
しかも、それが、省略されることがある?
そんなことありえないのでは?(<勘違いだったらすみません)
参照されるべきものが、省略されているとしたら、その参照されるべき実体は、どこにあるのか?
仮に、実体を呼び出された側で作ったとして
省略されているのに、呼び出し元では、どうやって格納される検索結果を呼び出すのか?
とか、納得いきません。
少なくとも検索結果を格納すべき変数なら、省略できないと思います。
    • good
    • 0
この回答へのお礼

説明不足で申し訳ありません。

ByRef、ByValの違いがあんまり理解できていませんので、もしかしたらこれは逆かもしれないです。(ByRefは、呼び出された関数内で値を変えるための変数という認識でよいのでしょうか?)

そして検索結果を格納する変数についてですが、取得したい検索結果が3個あり、2つだけ取得したい場合と、3つ全部取得したい場合があります。

なので、最後の1個だけ省略可能にしたいのです。

お礼日時:2005/01/25 13:05

Public Overloads Function

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
勉強してみます。

お礼日時:2005/01/26 14:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

教えて!goo グレード

人気Q&Aランキング