VBプログラマ質問スレ(Ver.6.0 まで) part61
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/02/01(金) 21:20:49.96/ \
/ ⌒ ⌒ \ 論破くん↓必死だなー
/ (●) (●) \
| 、" ゙)(__人__)" ) ___________
\ 。` ⌒゚:j´ ,/ j゙~~| | | |
__/ \ |__| | | |
| | / , \n|| | | |
| | / / r. ( こ) | | |
| | | ⌒ ーnnn |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二 _|_|__|_
構造化例外処理ならこうだろ。 AがFinally、BがCatch、Cが処理
Sub A()
Dim objConnection As ADODB.connection
Set objConnection = New ADODB.connection
Call B(objConnection)
If objConnection.State <> adStateClosed Then
Call objConnection.Close
End If
End Sub
Sub B(ByVal objConnection As ADODB.connection)
On Error Resume Next
Call C(objConnection)
If Err.Number <> 0 Then
Debug.Print Err.Description
End If
End Sub
Sub C(ByVal objConnection As ADODB.connection)
Call objConnection.Open
End Sub
前スレ VBプログラマ質問スレ(Ver.6.0 まで) part60
http://toro.2ch.net/test/read.cgi/tech/1351327234/
0232デフォルトの名無しさん
2013/02/04(月) 15:43:09.97賛成
トランザクションの話をしよう。
「データベースを使った処理」と
「トランザクション」は分離していないといけない。
つまり、
データベースを使った処理開始
トランザクション開始
処理
トランザクション終了
終了
この形は良くない。なぜなら、データベースを使った処理
複数個を一つのトランザクションにまとめられないから。
だから「データベースを使った処理」の中にトランザクション処理は含めるべきではない。
0233デフォルトの名無しさん
2013/02/04(月) 15:43:35.21なぜダメなのか明確になるけどお前は考えてないからそれを明確に示すことは
できないのね。じゃあダメであることは不明確なままであり、現時点で俺のABC理論が
ベストプラクティスであることに変わりはない。はい論破。
0235デフォルトの名無しさん
2013/02/04(月) 15:45:02.45なぜなら、処理自体は同じでも別のデータベースに対して行うかもしれないから。
処理とコネクションが一体化されてしまうと柔軟性がなくなってしまう。
0236デフォルトの名無しさん
2013/02/04(月) 15:47:20.600237デフォルトの名無しさん
2013/02/04(月) 15:48:45.22戻り値をエラーに値として使ってはいけない。
これらのことを合わせると以下の様な構造になる。
Sub main
On Error Goto ErrHandler
コネクション作成
トランザクション開始
データベース処理
コミット
Exit Sub
ErrHandler:
エラー処理(ロールバック)
End Sub
0238前スレ何番か
2013/02/04(月) 15:50:29.48VB6では内部コードとしてUnicodeを使ってるから。
『転ばぬ先の文字コード入門(第4回)』
http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20010620/4/
0239デフォルトの名無しさん
2013/02/04(月) 15:51:12.78そうすることでいちいち引数でコネクション渡す必要はなくなるし、
それでいて複数のコネクションに対応できる。
Sub main
On Error Goto ErrHandler
コネクション作成
トランザクション開始
Set DB処理インスタンス1 = new クラス名(コネクション)
コミット
Exit Sub
ErrHandler:
エラー処理(ロールバック)
End Sub
0240デフォルトの名無しさん
2013/02/04(月) 15:51:58.53お前がAとBを隠蔽する場合のコードを提示してくれと言ったから
俺はAとBを隠蔽するコードを示してお前と同じようにはいきれいといって見せたわけであり、
お前がAとBを隠蔽するコードを要求したから俺がそれを示したわけであり、
Cが省略されているから意味がないというのはこれはひどいいいがかり。
>>234
うん、お前は目も当てられないほど見苦しいわ。俺が徳川八代将軍吉宗であったらいさぎよく
腹を切れと喝破して、峰打ちと称して心臓を一突きにしてやってるとこだわ。はい論破。
0242デフォルトの名無しさん
2013/02/04(月) 15:52:57.600243前スレ何番か
2013/02/04(月) 15:54:33.75これで君にするレスは最後ね。
前スレでA, B, Cという構造を見たとき、正直衝撃を受けたよ。
今まで考えたこともなかった構造だったから。
俺は、他の人と違ってばっさり切り捨てることはしない。
今後も折に触れて、ABC構造が適合するような場面があるのかないのか、個人的に考えていくよ。
じゃね。
0244デフォルトの名無しさん
2013/02/04(月) 15:55:29.31君のコードが根本的にダメなのは、コードのそのままぺたっと書こうとしている所
> Aを試みてエラーならB試みる。
> Bを試みてエラーならCを・・・
とやりたいことを書いているだろう?
そのとおり書けばいい。
A()
正常なら終了
B()
正常なら終了
C()
正常なら終了
0245デフォルトの名無しさん
2013/02/04(月) 15:58:40.30これならOn Error Resume Nextが便利
Sub Func
On Error Resume Next
Call A
If Err.Number = 0 Then Exit Sub
Call B
If Err.Number = 0 Then Exit Sub
Call C
If Err.Number = 0 Then Exit Sub
End Sub
AとBとCの内容は好きに書けばいい。
ただしエラーの時はErr.Raiseすること。
0246デフォルトの名無しさん
2013/02/04(月) 16:00:27.92その記事だとShift_JISが主流とか書いてあるけど日本国内PCって意味だよね?諸外国でもShift_JISが標準だったの?
0247デフォルトの名無しさん
2013/02/04(月) 16:05:04.56VBでは実装しにくいから関数オブジェクトにして
nantoka(new A(), new B(), new C())
A、B、Cはそれぞれrun(名前はなんでもいいけど)メソッドという
インターフェースを持ったクラス。
nantokaって関数は、エラーであれば次の引数のrunを呼ぶみたいな
コードを書けばいい。
A、B、Cそれぞれのクラスができるからちょっと面倒。
CallByName当たりを使えば一つのクラスで実装できるだろう。
0249デフォルトの名無しさん
2013/02/04(月) 16:07:35.26そこに肉付けしていくのではなく、
やりたいことを書いて、それだけで動くように
するにはどうするか?って考えるのがいい。
コードをシンプルに保つ秘訣だ。
0250デフォルトの名無しさん
2013/02/04(月) 16:15:52.60お前もVB6じゃないコードだって指摘できないから同罪。
0251デフォルトの名無しさん
2013/02/04(月) 16:26:47.05クラスでRecordsetを保持したらダメだと思ってんの?馬鹿はお前のほうだ。お前は疑いようのない馬鹿だ。はい論破。
0252デフォルトの名無しさん
2013/02/04(月) 16:48:24.53ABC理論だとこんなに簡潔にできる。敗北を知りたい。はい論破。
Sub A()
Dim objConnection As ADODB.Connection
Set objConnection = New ADODB.Connection
Call B(objConnection)
If objConnection.State <> ADODB.adStateClosed Then
Call objConnection.Close
End If
End Sub
Sub B(ByVal objConnection As ADODB.Connection)
On Error Resume Next
Call C(objConnection)
If Err.Number <> 0 Then
If objConnection.State = ADODB.adStateClosed Then
Call objConnection.RollbackTrans
End If
End If
End Sub
Sub C(ByVal objConnection As ADODB.Connection)
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
End Sub
0253220
2013/02/04(月) 17:11:29.13なるほど、On Error Resume NextにしてErr.Numberを調べれば良いのですね。
try{
A();
}catch(...){
try{
B();
}catch(...){
C();
}
}
のように書こうとして、ずっと悩んでおりました。
ありがとうございました。
0254デフォルトの名無しさん
2013/02/04(月) 17:12:09.88Dim objConnection As ADODB.Connection
Set objConnection = New ADODB.Connection
On Error Resume Next
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
If Err.Number <> 0 Then
If objConnection.State = ADODB.adStateClosed Then
Call objConnection.RollbackTrans
End If
End If
If objConnection.State <> ADODB.adStateClosed Then
Call objConnection.Close
End If
0255デフォルトの名無しさん
2013/02/04(月) 17:21:26.08try-catchのネストはやめたほうがいい
やりたくなったら構造が間違っていると考えたほうがいい。
ほんとうに必要な場合ってのは殆ど無いはずだ。
0256デフォルトの名無しさん
2013/02/04(月) 17:25:01.80それはやっちゃいけないパターンだ。
Resume NextだからOpenで例外が投げられたとしても
処理が継続されてBeginTransが実行されて例外が投げられて
Openの例外が消失してCommitTransが実行されてBeginTransの例外が
消失する。最低のパターン。ワーストケース。お前のおつむの程度が知れるな。はい論破。
0257デフォルトの名無しさん
2013/02/04(月) 17:28:14.19Dim objConnection As ADODB.Connection
Set objConnection = New ADODB.Connection
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
If Err.Number <> 0 Then
If objConnection.State = ADODB.adStateClosed Then
Call objConnection.RollbackTrans
End If
End If
If objConnection.State <> ADODB.adStateClosed Then
Call objConnection.Close
End If
0258デフォルトの名無しさん
2013/02/04(月) 17:28:43.98コネクションが閉じられたら、レコードセットが無効になるよ
0259デフォルトの名無しさん
2013/02/04(月) 17:30:12.07え、そうなの?じゃあコネクション閉じられないな。はい論破。
0260デフォルトの名無しさん
2013/02/04(月) 17:30:39.13そりゃそうだろw
0261デフォルトの名無しさん
2013/02/04(月) 17:34:08.32お前はバカすぎる。例外が発生した時点で処理が中断されるん
だからErr.NumberのチェックもConnection.Stateのチェックも
意味がなくなる。お前だけレベルが低すぎる。インターネットを
利用しちゃいけないレベル。回線切ってゴマでもすりつぶしてろ。はい論破。
0262デフォルトの名無しさん
2013/02/04(月) 17:34:11.21Sub foo()
On Error Goto ErrHandler
Dim objConnection As ADODB.Connection
Set objConnection = New ADODB.Connection
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
Exit Sub
ErrHandler:
If objConnection.State = ADODB.adStateClosed Then
Call objConnection.RollbackTrans
End If
If objConnection.State <> ADODB.adStateClosed Then
Call objConnection.Close
End If
End Sub
0263デフォルトの名無しさん
2013/02/04(月) 17:34:48.510264デフォルトの名無しさん
2013/02/04(月) 17:36:37.42さすがだ。たった3秒でそのレスをするとはな。
0265デフォルトの名無しさん
2013/02/04(月) 17:38:03.82いいわけあるか、例外が発生したときにErrHandlerに飛ばされるが、
Connection.Closeは例外が発生しなくても呼ばれなくてはいけない。
お前のようなさんしたは下手にアレンジしようとせずに俺が示したとおりに
記述するのがベストだ。なぜなら俺がベストを示したからだ。はい論破。
0267デフォルトの名無しさん
2013/02/04(月) 17:38:43.53Sub foo()
On Error Goto ErrHandler
Dim objConnection As ADODB.Connection
Set objConnection = New ADODB.Connection
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
ErrHandler:
If objConnection Is Nothing Then Exit Sub
If objConnection.State = ADODB.adStateClosed Then
Call objConnection.RollbackTrans
End If
If objConnection.State <> ADODB.adStateClosed Then
Call objConnection.Close
End If
End Sub
0268前スレ何番か
2013/02/04(月) 17:39:44.83catch内でリソースの解放が必要になるときに、その処理自体が例外を発生する可能性がある場合って
良くあることだと思うけど、俺だけなのか?
0269デフォルトの名無しさん
2013/02/04(月) 17:40:02.39完成されたコードになるのだろう。
黙ってみてよw
0270デフォルトの名無しさん
2013/02/04(月) 17:40:23.43閉じない様に気をつけるのか...頑張ってね...
0271デフォルトの名無しさん
2013/02/04(月) 17:42:25.99つまりこうしろってことですね?
Sub foo()
On Error Goto ErrHandler
Dim objConnection As ADODB.Connection
Set objConnection = New ADODB.Connection
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
ErrHandler:
If objConnection Is Nothing Then Exit Sub
If Err.Number <> 0 Then
If objConnection.State = ADODB.adStateClosed Then
Call objConnection.RollbackTrans
End If
End If
If objConnection.State <> ADODB.adStateClosed Then
Call objConnection.Close
End If
End Sub
0272デフォルトの名無しさん
2013/02/04(月) 17:42:59.490273デフォルトの名無しさん
2013/02/04(月) 17:47:16.87こういうのは共通クラスにまとめよう。
Sub foo()
On Error Goto ErrHandler
Dim objConnection As MyConnection
Set objConnection = New MyConnection
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
ErrHandler:
If Not objConnection Is Nothing Then
Call objConnection.CleanUp
End If
End Sub
0274デフォルトの名無しさん
2013/02/04(月) 17:48:02.36は? なに言ってんの? バーカ。はい論破。
>>267
正常時の処理と異常時の処理がごちゃまぜにされた劣化コードだな。
お前にはそれが限界だろうな。俺レベルになると構造化プログラミングの
真髄を示すことができるけどな。それが>>252。はい論破。
>>268
お前だけだろ。お前だけ。お・ま・え・だ・け。はい論破。
0275デフォルトの名無しさん
2013/02/04(月) 17:49:34.00Sub Foo()
On Error Goto ErrHandler
Dim objConnection As MyConnection
Set objConnection = New MyConnection
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
Exit Sub
ErrHandler:
ErrorLog(Err)
End Sub
0276デフォルトの名無しさん
2013/02/04(月) 17:50:20.41うわっ神。超シンプル。
感動した。
0277デフォルトの名無しさん
2013/02/04(月) 17:54:17.89それは臭いものにふたをするだけの詭弁コードだな。そんなことが許される
のであれば俺はこれでできることになる。はい論破。
Sub C(ByVal objConnection As ADODB.Connection)
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
End Sub
0278デフォルトの名無しさん
2013/02/04(月) 17:55:13.03コード減ってる。Newする所も書かないとダメだろう?
0279デフォルトの名無しさん
2013/02/04(月) 17:56:41.980280デフォルトの名無しさん
2013/02/04(月) 17:57:36.73Sub C()
On Error Goto ErrHandler
Dim objConnection As MyConnection
Set objConnection = New MyConnection
Call objConnection.Open
Call objConnection.BeginTrans
Call objConnection.CommitTrans
Exit Sub
ErrHandler:
ErrorLog(Err)
End Sub
よし。これでOKだ
0281デフォルトの名無しさん
2013/02/04(月) 17:58:18.88俺はMyConnectionの実装を示さないお前と同じことをやってみせただけのことだ。
お前は都合の悪いところは隠せばいいという隠蔽体質を恥じらいもなく見せた
厚顔無恥であることを自覚しろ。正々堂々と勝負している俺の敵ではない。はい論破。
0282デフォルトの名無しさん
2013/02/04(月) 18:11:37.17MyConnectionにはすくなくともOpen、BeginTrans、CommitTransのメソッドを
用意しなければならず、それは内部のConnectionオブジェクトに処理を委譲する
だけのだっさい実装になってる。お前はコードを書きまくってそれを表に出さず、
きれいになりましたといってる恥知らず。厚顔無恥どころかその汚れまくった精神構造は
睾丸無知と呼ばれるにふさわしい。もうただのキンタマ。はい論破。
0283デフォルトの名無しさん
2013/02/04(月) 18:25:23.37キンタマコードが示されただけだった。
それもそのはずでベストプラクティスは俺の手によってすでに
示されているわけ。俺への不合理な反発、心理的リアクタンスから
俺のABC理論に逆らっているだけだったから結末は目に見えていた。
もっとこう合理的にこれがいいと示すことができる骨のあるやつはいないのか。
ここはいつからこんなにレベルの低い連中のたまり場になったんだ。はい論破。
0284デフォルトの名無しさん
2013/02/04(月) 20:17:24.900285デフォルトの名無しさん
2013/02/04(月) 20:20:16.870286デフォルトの名無しさん
2013/02/04(月) 20:22:12.53ぐぬぬ・・・となってるだけだろ。はい論破。
0287デフォルトの名無しさん
2013/02/04(月) 21:47:44.16Sub F1(ByVal inValue, ByRef outValue)
とか?
プリフィックス付けなかったらメンバー変数とか関数とかと
被ったりしてなんかいやだろ。どうしてる?
0288デフォルトの名無しさん
2013/02/04(月) 21:54:57.440289デフォルトの名無しさん
2013/02/04(月) 22:10:34.76何でググってみないの?バカなの?死ぬの?
0290デフォルトの名無しさん
2013/02/04(月) 22:22:56.39メンバ変数にプリフィクス付けてるから
引数はあまり気にしない
小文字で始めれば関数との被りは気にしなくて良い
0291デフォルトの名無しさん
2013/02/04(月) 22:31:12.58関数と被るときあるじゃん。メンバー変数にプリフィックスつけたら外部から
呼び出すときなんか嫌じゃない?
0292デフォルトの名無しさん
2013/02/04(月) 22:34:50.12> 小文字で始めれば関数との被りは気にしなくて良い
関数の名前に名詞を使ってるの?
それとも変数に動詞を使ってるの?
0293デフォルトの名無しさん
2013/02/04(月) 22:34:58.30モジュール内変数 m
引数 a
0294デフォルトの名無しさん
2013/02/04(月) 22:54:33.83メンバー変数なんて全てプライベートだから、外部から直接呼び出したりしない
そもそも、なんのための「Property」やねんと...
0295デフォルトの名無しさん
2013/02/04(月) 23:04:28.69外部から変更可能なものならプロパティにする意味ないじゃん。
プロパティにしてもプリフィックスつけなきゃ被ることになるじゃん。
0296デフォルトの名無しさん
2013/02/04(月) 23:07:12.60被りは気にしなくて良い
0297デフォルトの名無しさん
2013/02/04(月) 23:09:49.46名詞が変数
なのでかぶることはない。
それにかぶったとしても
たいして問題にならない。
関数か変数かなんて大した問題ではない。
0298デフォルトの名無しさん
2013/02/04(月) 23:11:36.880299デフォルトの名無しさん
2013/02/04(月) 23:13:35.62えーそれありえなーい。コンパイラは大文字小文字を区別しないし、
If Value < value Then
比較するときこんなことになるよ。大文字小文字で見分けてたら見にくくない?
ミスを誘発するために地雷埋めてるようなもんじゃん。それって嫌じゃない?
0300デフォルトの名無しさん
2013/02/04(月) 23:14:28.91大丈夫だ、問題ない。
0301デフォルトの名無しさん
2013/02/04(月) 23:15:10.840302デフォルトの名無しさん
2013/02/04(月) 23:21:00.19「Property」には、「Get」「Let」「Set」の三種類があり、それぞれ名前を重複させる事ができるから、基本的に被る心配なんてない
0303デフォルトの名無しさん
2013/02/04(月) 23:24:53.22引数と被ることあるじゃん。
Sub Func(ByVal value As String)
'なんかこれ嫌じゃない?
End Sub
Property Get Value() As String
End Property
0304デフォルトの名無しさん
2013/02/04(月) 23:25:57.670305デフォルトの名無しさん
2013/02/04(月) 23:31:12.50引数にもっと適切な名前をつけましょう。
0306デフォルトの名無しさん
2013/02/04(月) 23:31:58.81何が嫌なの?
Funcから、PropertyのValueにアクセスしたければ、Me.Valueでアクセスできるだろ?
0307デフォルトの名無しさん
2013/02/04(月) 23:33:32.04この安価の付け合いのレス合戦は台本通りの自作自演か?
0308デフォルトの名無しさん
2013/02/04(月) 23:34:33.08だからさ、みんな引数のプリフィックスどうしてるのかなーと思って。
>>306
う、うん、そりゃできるけどさ。Me付けるタイプ?ふーん。
0309デフォルトの名無しさん
2013/02/04(月) 23:35:46.10レスどれよ?まともなこと書いてないんだろ。
0310デフォルトの名無しさん
2013/02/04(月) 23:38:54.53プリフィックスなんか付けない。
適切な変数名をつけていればかぶらない。
0311デフォルトの名無しさん
2013/02/04(月) 23:42:18.63Meを付けなければならない時は付けるし、付ける必要が無いときは付けない
ただ、それだけ
そもそも、メソッドにPublicなSubが必要なのか?
Propertyに押し込めるんじゃないのか?
0312デフォルトの名無しさん
2013/02/04(月) 23:42:39.59じゃあたとえば二分木のNodeクラスのValueに適切な
引数名てどういうの?
0313デフォルトの名無しさん
2013/02/04(月) 23:57:43.230314デフォルトの名無しさん
2013/02/04(月) 23:59:15.57それプリフィックスじゃん。
0315デフォルトの名無しさん
2013/02/05(火) 00:00:06.54は? 単語を二つくっつけただけだろ
0316デフォルトの名無しさん
2013/02/05(火) 00:01:53.10クラス名を変数の前に付けるんでしょ。単語を二つくっつけることと
プリフィックスは同時に成立することだよ。クラス名を付けるってことね。
0317デフォルトの名無しさん
2013/02/05(火) 00:29:28.80Value そのものか、あるいはメンバである事を表すプリフィクスを付けただけのものが
最も分かりやすい
それ以外の変数名は逆にややこしい
クラス名はプリフィクスとしてはあり得ない部類
クラスが違えばプリフィクスも変わるとか保守し辛い
0318デフォルトの名無しさん
2013/02/05(火) 00:30:50.70ここはVBスレだからvalueでもダメだったわ
VBならプリフィクス一択だな
0319デフォルトの名無しさん
2013/02/05(火) 09:41:06.10フォームAからvbModalでフォームBをShowさせたとき、blnIsEntをTrueに設定しアンロードした。
再度フォームAからvbModalでフォームBをShowさせたとき、なぜかblnIsEntがTrueになったままになっている。
まるでフォームBがアンロードされていないかのようにふるまう。
そこで、フォームAのvbModalでフォームBをShowさせる次のコードに Set frmB = Nothing を記述すると
再度フォームAからvbModalでフォームBをShowさせたとき、blnIsEntがFalseになった。
これはVB6.0の仕様なのか、俺が何かフォームBをアンロードできないような事をしてしまったのだろうか?
0320デフォルトの名無しさん
2013/02/05(火) 09:49:52.510321デフォルトの名無しさん
2013/02/05(火) 10:23:50.49Terminateイベントを早期に発生させる目的でオブジェクトの使用終了時にNothingを代入するプログラマーは多いですよ?
0322デフォルトの名無しさん
2013/02/05(火) 11:29:48.67> クラス名を変数の前に付けるんでしょ。単語を二つくっつけることと
クラス名を全部につけたら結局一緒だろw
そもそもnodeという単語であってNodeとくクラス名じゃないし
お前馬鹿なんじゃないの?
0323デフォルトの名無しさん
2013/02/05(火) 11:54:36.24> まるでフォームBがアンロードされていないかのようにふるまう。
アンロードされた=メモリ上から破棄された
というのが勘違い
0324デフォルトの名無しさん
2013/02/05(火) 12:21:21.17ガーページコレクションなんたらかんたらでNothingせずともメモリー上から破棄されるって言い切ってたような気が汁
素人論破集団怖すぎw
0325デフォルトの名無しさん
2013/02/05(火) 12:42:28.78その他オブジェクトは、Nothingの代入はいらないよ
0326デフォルトの名無しさん
2013/02/05(火) 12:46:21.94間違いではない。スコープから抜けて参照がどこからもなくなれば、とメモリから破壊される。
だがフォームの場合は「参照がどこからもなくなれば」という条件が
ややこしいのだ。Unloadは参照がどこからの亡くなるための条件の一つだが
それだけではない。
0327デフォルトの名無しさん
2013/02/05(火) 12:50:29.88実際のコードを見ないとなんとも言えない。
そのフォームAとかBというのがどういうフォーム名で
どのような変数名で呼び出して、どのような使い方をしているのか
書かないとわからない。
一般的にフォームのアンロードは、フォームをなくすための条件の一つであるが
アンロードされているだけで、フォームは消えない。
そもそもアンロードは、フォームを消す命令ではないからだ。
0328デフォルトの名無しさん
2013/02/05(火) 12:51:48.87単にStatic変数がメモリ上に保持されているというだけ。
フォームそのものはアンロードされている。
0329デフォルトの名無しさん
2013/02/05(火) 12:52:02.39> VB6ではNothingの代入は不要だって論破自慢してた人がいたが、実際には明らかに挙動が異なる局面があるじゃんw
それはインスタンスを削除するのにNothingは不要ってことでしょ?
代入してもしなくても挙動が全く同じなんて誰も言ってないですよ。
0330デフォルトの名無しさん
2013/02/05(火) 12:54:23.29> ガーページコレクションなんたらかんたらでNothingせずともメモリー上から破棄されるって言い切ってたような気が汁
うん、そうだね。
今は、アンロードの話をしている。
アンロードとNothingは別のものだ。Unload、Nothing 単語違うだろ?
0331デフォルトの名無しさん
2013/02/05(火) 12:55:48.98> 静的変数はプロシージャの終了後も存在し続け、最後に設定された値を保持します。
> 次回、コードからそのプロシージャを呼び出したとき、変数は初期化し直されることなく、
> 最後に割り当てられた値をそのまま保持します。
■ このスレッドは過去ログ倉庫に格納されています