お世話になっています。
.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()を省略可能にしたいのです。

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

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

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
    • 0
この回答へのお礼

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

なるほどです(笑)
今回は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
    • 0
この回答へのお礼

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

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

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

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

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


Optional ByVal 引数() As String = Nothing

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


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

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

なるほど。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で質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QAndroid / AsyncTaskの第1引数

■コード
Hoge hoge = new Hoge();
hoge.execute();

public class Hoge extends AsyncTask<Object, 第2引数, 第3引数> {

 protected List<Piyo> doInBackground(Object... params) {


■質問1
・executeで引数を渡していないに、なぜ引数を受け取れるのでしょうか?
(doInBackgroundメソッド引数として受け取っているで合っている?)
・処理の流れ的には、executeで渡した引数がdoInBackgroundメソッド引数となり、その型をAsyncTask第1引数で指定している?
・それとも、executeで渡す引数の型をAsyncTask第1引数で指定しているから、予め指定された型のみをdoInBackgroundメソッド引数として受け取れる?


■質問2
・リンク先に、下記主旨の記述があるのですが、「自分で好きに型を選択できる」とはどういう意味なのでしょうか?
>冒頭の型変数のParamsはdoInBackgroundメソッドの引数で、自分で好きに型を選択できる
>execute()メソッドの引数に渡されたものがこのdoInBackgroundのparamsとして渡ってくる
・paramsとして渡された型を、AsyncTask第1引数で宣言することで自由に変更できる?
・それとも、AsyncTask第1引数で指定することで、doInBackgroundのparamsとして渡されてくる型を制限(指定)できる?
http://d.hatena.ne.jp/Nagise/20120309/1331265123

■コード
Hoge hoge = new Hoge();
hoge.execute();

public class Hoge extends AsyncTask<Object, 第2引数, 第3引数> {

 protected List<Piyo> doInBackground(Object... params) {


■質問1
・executeで引数を渡していないに、なぜ引数を受け取れるのでしょうか?
(doInBackgroundメソッド引数として受け取っているで合っている?)
・処理の流れ的には、executeで渡した引数がdoInBackgroundメソッド引数となり、その型をAsyncTask第1引数で指定している?
・それとも、executeで渡す引数の型をAsyncTask第1引...続きを読む

Aベストアンサー

こんにちは
>executeで引数を渡していないに
executeの引数は可変長です。
つまり、引数なしでもいいですし、1個でも2個でも3個でもOKです。
http://developer.android.com/reference/android/os/AsyncTask.html
同様に、doInBackgroundの引数も可変長です。
つまり、executeで渡された引数と同じものが、そのままdoInBackgroundに渡される仕組みです。
ですから、
hoge.execute();
とした場合は、引数はありませんから、doInBackgroundでも何も受け取れません。

>・リンク先に、下記主旨の記述があるのですが、「自分で好きに型を選択できる」とはどういう意味なのでしょうか?
>・paramsとして渡された型を、AsyncTask第1引数で宣言することで自由に変更できる?
>・それとも、AsyncTask第1引数で指定することで、doInBackgroundのparamsとして渡されてくる型を制限(指定)できる?
どちらも違います。
「executeの引数として、好きな型を使用できる」ということですね。
もちろん、doInBackgroundで受け取れる型も同じ型になります。勝手に変更されたりはしません。
どんな型を使用するのかはクラスの定義時に指定します。質問者さんが、「AsyncTask第1引数」とおっしゃっている場所ですね。
正式には、引数ではないので、「第一引数」とは呼びません。
「ジェネリック」で調べると、いろいろ詳しいことがわかると思います。

こんにちは
>executeで引数を渡していないに
executeの引数は可変長です。
つまり、引数なしでもいいですし、1個でも2個でも3個でもOKです。
http://developer.android.com/reference/android/os/AsyncTask.html
同様に、doInBackgroundの引数も可変長です。
つまり、executeで渡された引数と同じものが、そのままdoInBackgroundに渡される仕組みです。
ですから、
hoge.execute();
とした場合は、引数はありませんから、doInBackgroundでも何も受け取れません。

>・リンク先に、下記主旨の記述があるのです...続きを読む

QString だと「 ByRef引数の型が一致しません 」というエラーが出ます。なぜ?

ここで「Kaplan-Meyer 生存分析に便利なソフトを教えて」と質問した shuu_01 です。ここで VisualBasic のソースのありかを教えて頂き、自分に使いやすいようソースを書き換えようと奮闘中です(それまで VisualBasic の経験がなく 無謀!と実感中です)。

元々のソースはグラフが1本だけだったので、肺癌だと「腺癌」「扁平上皮癌」「小細胞癌」、、といろんな癌の種類別にグラフを数本 書くのが目標です。そこで、

Sub km_test()
Dim nc As Integer, gr() As String
nc = 2
ReDim gr(nc)
gr(0) = "腺癌"
gr(1) = "扁平上皮癌"
gr(2) = "小細胞癌"
km_group_test nc, gr
End Sub

Sub km_group_test(nc As Integer, gr As String)

End Sub

というソースを書くと:

String の変数 gr の色が変わり、「 ByRef引数の型が一致しません 」というエラーが出ます。
Integer の変数 nc ではエラーが出ません。
きちんと型を一致させているつもりなのに、なぜ???

ここで「Kaplan-Meyer 生存分析に便利なソフトを教えて」と質問した shuu_01 です。ここで VisualBasic のソースのありかを教えて頂き、自分に使いやすいようソースを書き換えようと奮闘中です(それまで VisualBasic の経験がなく 無謀!と実感中です)。

元々のソースはグラフが1本だけだったので、肺癌だと「腺癌」「扁平上皮癌」「小細胞癌」、、といろんな癌の種類別にグラフを数本 書くのが目標です。そこで、

Sub km_test()
Dim nc As Integer, gr() As String
nc = 2
ReDim gr(nc)
...続きを読む

Aベストアンサー

関数の第2変数が文字列なのに、呼び出し側が文字列の配列を渡しているようです。

関数の呼び出し側を
km_group_test nc, gr(1)
とかにするか、関数を
Sub km_group_test(nc As Integer, gr() As String)
とかにしないと、型が違うと思います。

Q/proc/sys/net/ipv4/route/flushは無効な引数?

/proc/sys/net/ipv4/route/flush
というファイルをcatの引数に指定すると
「無効な引数です」と言われます。
普通、読めないファイルの場合は
「許可がありません」というメッセージなのに、
このファイルだけは「無効な引数です」と言われるのです。
エラーメッセージが異なるということは別のエラーということだと思うのですが、
「無効な引数です」というメッセージはどのような場合に表示されるものなのですか。

たとえばwcの引数に指定した場合、次のようにエラーメッセージと通常の結果の両方を表示します。
$ wc /proc/sys/net/ipv4/route/flush
wc: /proc/sys/net/ipv4/route/flush: 無効な引数です
0 0 0 /proc/sys/net/ipv4/route/flush

ですのでエラーメッセージをリダイレクトしてしまえば、何の問題もないように思えるのですが・・・
これでいいのかなぁ。

Aベストアンサー

Linux で /proc 以下のファイルは特殊なファイルです。/proc以下のファイルは、カーネルとのインターフェイスになっていて、ファイルとしての実体はありません(man 5 proc 参照)。カーネルの中に、/proc 以下のこのディレクトリにアクセスがあったら、こういう値を出力する(読み込みの場合)、その値をカーネルのこの変数に代入する(書き込みの場合)というようなプログラムが書かれています。

ということで、属性が変更できないのは当然です。ちなみに CentOS 4.4 では

$ ls -l /proc/sys/net/ipv4/route/flush
--w------- 1 root root 0 Nov 21 10:39 /proc/sys/net/ipv4/route/flush

となっています。これを

$ strace wc /proc/sys/net/ipv4/route/flush

とするとどこで、どういうエラーになったか分かります。CentOSの場合、沢山の出力の後、

....
open("/proc/sys/net/ipv4/route/flush", O_RDONLY|O_LARGEFILE) = -1 EACCES (Permission denied)
write(2, "wc:
....

となります。まあ、これはrootでないので当然の結果ですが。

Linux で /proc 以下のファイルは特殊なファイルです。/proc以下のファイルは、カーネルとのインターフェイスになっていて、ファイルとしての実体はありません(man 5 proc 参照)。カーネルの中に、/proc 以下のこのディレクトリにアクセスがあったら、こういう値を出力する(読み込みの場合)、その値をカーネルのこの変数に代入する(書き込みの場合)というようなプログラムが書かれています。

ということで、属性が変更できないのは当然です。ちなみに CentOS 4.4 では

$ ls -l /proc/sys/net/ipv4/rou...続きを読む

Q配列をループでたくさん宣言したいのですが、配列名や変数名を変数で宣言することはできませんか?

お世話になっております。
タイトル通りの質問です。

日付がファイル名になっているCSVファイルが複数あるのですが、
それをそのまま「array20071020」などという名前の配列に、それぞれ入れて行きたいと思います。ループ処理でなければ出来ないと思うのですが、ループ処理内で配列を宣言していく方法はあるでしょうか。

Aベストアンサー

dim array20071020 as string
dim array20071021 as string
dim array20071022 as string
...
みたいな事をプログラムでと言う事だと思うのですが、多分できないと思います。

で、excelにはcollectionと言う、名前も変数も文字にできるオブジェクトがあるので、
dim csv as new collection
csv.Add loadCsv("20071020"),"20071020"
csv.Add loadCsv("20071021"),"20071021"
csv.Add loadCsv("20071022"),"20071022"
(loadCsvはたとえばの関数です)
と追加しておけば、
str=csv("20071020")
で読み出せます。

collectionのアイテムは、文字とか変数だけではなく、配列やオブジェクトとかを、個々に指定できる点が便利です。
Dim hoge(1, 2) As Integer
hoge(1, 1) = 11
hoge(1, 2) = 12
Dim fumu As New Collection
fumu.Add 123, "20071020"
fumu.Add "abc", "20071021"
fumu.Add hoge, "20071022"
fumu.Add Range("A1:C5"), "20071023"
MsgBox fumu("20071020")
MsgBox fumu("20071021")
MsgBox fumu("20071022")(1, 1)
MsgBox fumu("20071022")(1, 2)
MsgBox fumu("20071023").Rows.Count
MsgBox fumu("20071023").Columns.Count

dim array20071020 as string
dim array20071021 as string
dim array20071022 as string
...
みたいな事をプログラムでと言う事だと思うのですが、多分できないと思います。

で、excelにはcollectionと言う、名前も変数も文字にできるオブジェクトがあるので、
dim csv as new collection
csv.Add loadCsv("20071020"),"20071020"
csv.Add loadCsv("20071021"),"20071021"
csv.Add loadCsv("20071022"),"20071022"
(loadCsvはたとえばの関数です)
と追加しておけば、
str=csv("20071020")
で読み...続きを読む

QPL/pgSQL 引数の数

PL/pgSQL を使用し更新処理を行いたいのですが、
パラメータの数が多すぎるのか
以下のエラーでデータベースにファンクションを定義出来ません。
ERROR: functions cannot have more than 100 arguments
SQLステート:54023

可変長引数で作成すると、データベースに定義は出来るのですが
ファンクション実行時に同様のエラーが発生し更新処理が行えません。

PL/pgSQL の引数を100以上使用出来る様にする設定等、存在するのであれば
教えて頂きたいです。

環境は以下の内容です。
CentOS-6.2-x86_64
Apache/2.2.15
PostgreSQL 9.1.3
PHP Version 5.3.3 (PDOを使用しています)

Aベストアンサー

100 以上の引数をもった関数を定義できるようにするには、ソースコードを修正してコンパイルしなおす必要があります。

ヘッダファイル src/include/pg_config_manual.h 内の定数 FUNC_MAX_ARGS を修正してください。ソースコードのコメントには約 600 まで増やせるということです。

100 以上の引数をもつ関数を定義すること自体、設計に何らかの問題がありそうなので、そちらを見なおしたほうがよいと思います。

あるいは、引数を配列や複合型で渡すことを考えたほうがいいかもしれません。

QVb.netのグローバル変数の宣言の仕方の質問

こんばんわ!
VB6.0からの移行でVB.net2012に挑戦中なんですが、グローバル変数の宣言の仕方で分からないことがあり質問しに着ました!

内容
モジュール内で
public hoge as string="aaa"
と宣言するのと

モジュール内で
public hoge as string
と宣言しておいて
フォーム起動時に
hoge="aaa"
と宣言するのにどのような違いがあるのでしょうか?

hogeの変数を変更したいのですが、上記の方法だと動いて、下記の方法だと動かないのですが・・・
まだ良く分かっていないので、程度の低い質問で申し訳ないのですが、アドバイスのほどよろしくお願いいたします。

Aベストアンサー

> グローバルで変数として一箇所のみで宣言しているのですが、それで別の変数になることはあるのでしょうか?
hoge が本当は text とかなら有り得ます。この場合、フォームの Text プロパティが変更されます。
別のクラスなどを Imports していて、そちらに同名の変数がある場合も有り得るかも知れません。
ただし、スコープが同じ変数が複数あると↓文法エラーが出るはず。
http://msdn.microsoft.com/ja-jp/library/856b0w3t(v=vs.110).aspx
http://msdn.microsoft.com/ja-jp/library/03x63w1z(v=vs.110).aspx

上記の現象の確認には、変数を使用している場所で右クリックメニューから「定義へ移動」で
その変数がどこで宣言されたものを参照しているか分かります。
変数のスコープが狭いものが優先して使用されるため、ローカル宣言や、自分が定義していなくとも
既に VB.NET で宣言されているものとかぶってはだめです。


>意味合い自体は同じであると認識しているのですが、あっていますか?
変数宣言は同じで、初期値が違います。…見たまんまだと思いますが。


>「 public hoge as string」と宣言したhoge
>動かないのは配列の項目数(例えば、hoge_arra(hoge)のように)使用しているのですが
配列の添字を文字列型にするなど話になりません。問題外です。
数値型にして下さい。

> グローバルで変数として一箇所のみで宣言しているのですが、それで別の変数になることはあるのでしょうか?
hoge が本当は text とかなら有り得ます。この場合、フォームの Text プロパティが変更されます。
別のクラスなどを Imports していて、そちらに同名の変数がある場合も有り得るかも知れません。
ただし、スコープが同じ変数が複数あると↓文法エラーが出るはず。
http://msdn.microsoft.com/ja-jp/library/856b0w3t(v=vs.110).aspx
http://msdn.microsoft.com/ja-jp/library/03x63w1z(v=vs.110).aspx
...続きを読む

QObjective-CのNSTaskの引数に全角/半角スペース及び日本

Objective-CのNSTaskの引数に全角/半角スペース及び日本語を含むパスが指定された場合に正常に処理が行えません。
どのように引数をしていすればいいのか、教えていただきたく投稿させていただきます。

実行するアプリはAutomatorで作成したアプリの為、openコマンドに引数-aを指定しています。

NSTask *tast = [[NSTask alloc]init];
NSString *Command = [NSStrign stringWithFormat:@"/usr/bin/open"];
NSArray *arguments = [NSArray arrayWithObjects:@"-a",
[NSMutableString stringWithFormat:@"%@",アプリのパス],
[NSMutableString strignWithFormat:@"%@",ファイルのパス],
nil];
[task setLaunchPath:Commadn];
[task setArguments:arguments];
[task launch];
[task waitUntilExit];
[task release];

引数配列のargumentsを途中で出力した場合にスペース部がバックスラッシュでエスケープ、日本語はエンコード?されていました。
ダブルクォーテーションで囲んでみたのですが、ダメでした。

どなたか、お分かりなられる方おられましたら、ご教授の程宜しくお願いします。

Objective-CのNSTaskの引数に全角/半角スペース及び日本語を含むパスが指定された場合に正常に処理が行えません。
どのように引数をしていすればいいのか、教えていただきたく投稿させていただきます。

実行するアプリはAutomatorで作成したアプリの為、openコマンドに引数-aを指定しています。

NSTask *tast = [[NSTask alloc]init];
NSString *Command = [NSStrign stringWithFormat:@"/usr/bin/open"];
NSArray *arguments = [NSArray arrayWithObjects:@"-a",
[NSMutableString stringWithFormat:@"%@",アプ...続きを読む

Aベストアンサー

こんちは。
NSTaskは使った事無いのですが、ファイルパス名をURLで指定してみてはいかがでしょう?

NSTaskはFoundationフレームワークのクラスなので、ファイルやディレクトリの場所は、
ファイルパス名/URLどちらでも指定できると思います。

で、URLはスペースや英数字以外の文字は使用できないので、UTF-8でテキストエンコーディングします。
NSStringクラスには、stringWithUTF8Stringみたいなエンコードメソッドが多数あるので試してみては?

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

QPL/SQLのFUNCTIONにおける引数について

PL/SQLで、FUNCTIONを作成しています。
そのFUNCTIONの引数に
StringList型の配列を受け取りたいのですが、
どのように書いたらよろしいのでしょうか?

申し訳ありませんが、教えて下さい。

Aベストアンサー

こんにちは。

>>StringList型の配列を受け取りたいのですが
何から?

FUNCTIONの引数にPL/SQL表などを使用するのなら、Packageにしてヘッダー部で型を宣言しないと・・・。

Q変数宣言(Dim)と定数宣言(Const)のメモリ使用量

VS2005で開発しています。
Constで定数宣言したものはソース上でカーソルを当てるとその場で内容を確認できますが、変数で宣言しておくことでメモリ使用量が少なくなると言われました。
そうするといちいち定義まで飛ばないと定数の中身が見れず不便に思っているのですが、本当にメモリ使用量が少なくなるのでしょうか?

Aベストアンサー

・Constはコンパイルしたときに消えるので、そもそもメモリを使っていない。

  Const A As Integer = 1
  Dim B As Integer = A

  コンパイルすると

  Dim B as Interger = 1

変数にするとメモリを使うので、むしろメモリ使用量が増える。

だだし、文字列を複数回使う場合は、Constより変数がいいかな。

  Const C As String = "***************************************************************"
  Dim D As String = C
  Dim E As String = D

  コンパイルすると

Dim D As String = "***************************************************************"
Dim E As String = "***************************************************************"

・Constはコンパイルしたときに消えるので、そもそもメモリを使っていない。

  Const A As Integer = 1
  Dim B As Integer = A

  コンパイルすると

  Dim B as Interger = 1

変数にするとメモリを使うので、むしろメモリ使用量が増える。

だだし、文字列を複数回使う場合は、Constより変数がいいかな。

  Const C As String = "***************************************************************"
  Dim D As String = C
  Dim E As String = D

  コンパイルすると

...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング