C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
全過去ログを検索
ヒット / 4件
(1-4 を表示)
<<
0
>>
■66113
Re[9]: 64bitOS上でexeが動作しない件について
□投稿者/ howling -
(2013/04/02(Tue) 10:40:24)
■
No66111
(魔界の仮面弁士 さん) に返信
ご返信ありがとうございます。
なるほど、redistributeのredistなんですね…。
確かに再頒布するべき物ではないと思いますし、そもそもReleaseビルドで動作するようにすべきですね。
また何か関連のことで疑問点が解決しなかった場合に、こちらに書きこむこともあるかと思いますが、その折はしくお願い致します。
記事No.66099 のレス / END /過去ログ111より /
関連記事表示
削除チェック/
■86682
Re[2]: IDisposableインタフェースの応用について
□投稿者/ 麺スキー -
(2018/02/27(Tue) 16:03:26)
魔界の仮面弁士様、詳細な説明を頂き、誠にありがとうございました。
また、殆どの場合、Finalize部は不要とのこと、理解しました。
ところで、今回作成しようとしている一時ファイル管理クラスですが、
IDisposableが実装されているにもかかわらず、万が一、このクラスの使い手側がDispose()を忘れてしまった場合、
最悪、ガベージコレクションが働いたときに、Dispose()メソッドに記載したファイル削除が実行されるのでしょうか?
記事No.86673 のレス /過去ログ148より /
関連記事表示
削除チェック/
■86685
Re[3]: IDisposableインタフェースの応用について
□投稿者/ 魔界の仮面弁士 -
(2018/02/27(Tue) 17:04:16)
2018/02/27(Tue) 23:13:34 編集(投稿者)
■
No86682
(麺スキー さん) に返信
> IDisposableが実装されているにもかかわらず、万が一、このクラスの使い手側がDispose()を忘れてしまった場合、
> 最悪、ガベージコレクションが働いたときに、Dispose()メソッドに記載したファイル削除が実行されるのでしょうか?
されません。なのでそれを保証できない場合においては、
保険として Object.Finalize をオーバーライドせねばなりません。
言い方をかえると、アンマネージリソースを持ったクラスを作成するに当たり、
IDisposable を実装していなくクラスを Inherits する場合や、
Inherits 無しで(素の Object 型からの継承で)作る場合など、
IDisposable インターフェイスを直接 Implments する場合には、
Finalize からの Dispose 呼び出しを含める必要があります。
ただそのための実装は、暗黙的な実装ルールがありまして、
最近の Visual Studio では、自動的にそのテンプレートルールが
用意されるようになっています。
それが最初に提示頂いたコードで言うところの
『アンマネージ リソースを解放するコードがある場合にのみ、Finalize() をオーバーライドします。』
の部分に当たります。
このルールでは、IDisposable.Dispose を実装するのとは別に、
Boolean 型の引数を持った
NotInheritable なクラスの場合は、Private Sub Dispose(Boolean) メソッド
それ以外のクラスの場合は、Protected Sub Dispose(Boolean) メソッド
が用意するのが通例です。
最初に御自身が提示されたコードのテンプレートもそうなっていましたし、
System.IO.FileStream クラスや System.ComponentModel.Component を
継承した場合も、Sub Dispose(Boolean) なメソッドがあるはずです。
この実装ルール自体は慣習的なものですが、この実装ルールに
のっとったクラスでは、ベースクラスのファイナライザの中から
Dispose が呼ばれるように設計されていますので、継承先で追加の
ファイナライザの実装を用意する必要はありませんし、
実装すべきでもありません。
しかし、そのベースクラスそのものを実装するようなケースでは、
ファイナライザを実装しなければなりません。
とりあえず、FileStream を継承して実装するならこんな感じでしょうか。
Public Class TesClass
Inherits System.IO.FileStream
Private _FilePath As String
Public ReadOnly Property FilePath As String
Get
Return _FilePath
End Get
End Property
Public Sub New()
Me.New(System.IO.Path.GetTempFileName())
End Sub
Private Sub New(p As String)
MyBase.New(p, IO.FileMode.Open)
_FilePath = p
End Sub
Protected Overrides Sub Dispose(disposing As Boolean)
Try
System.IO.File.Delete(FilePath)
Catch
Finally
MyBase.Dispose(disposing)
End Try
End Sub
#Region "以下、Stream クラスのその他のオーバーライドが続く"
#End Region
End Class
> Public Class TesClass
> Implements IDisposable
他のクラスから継承して作るのではなく、上記のように
直接 Implements IDisposable する場合にはファイナライザが必要です。
ただその場合は、NotInheritable として実装した方が良いかも知れません。
NotInheritable としない場合は、Component や FileStream のように、
Dispose 実装をオーバーライドできるようにしておかないと、
継承先で扱い難いクラスになってしまうでしょう。
詳しい話は、先に紹介した URL を参照していただければと思いますが、
手順をざっくり並べると、こんな感じになります。
(1) Protected Overridable Sub Dispose(disposing As Boolean)
の中身を実装します。
「引数が True の時にアンマネージリソースを解放する処理」と
「引数が False の時にマネージリソースを解放する処理」が必要です。
Me.disposedValue は、Dispose が複数回呼ばれた場合に備えるための
処理済フラグとして利用してください。
(2) Protected Overrides Sub Finalize()
のコメントは解除します。テンプレートの中身は修正しなくて OK です。
これが呼ばれるタイミングでは、マネージリソースは解放済みなので、
「Dispose(False)」では引数は False 固定で呼び出すことになります。
継承元のファイナライザを呼び出すための「MyBase.Finalize()」も必須です。
(3) Public Sub Dispose() Implements IDisposable.Dispose
のテンプレートの中身も変更しなくて構いません。
明示的に Dispose された場合には、これを通じて「Dispose(True)」されますし、
Dispose し忘れでガベージコレクトされた場合は、(2) によって「Dispose(False)」されます。
また、Dispose(Boolean)が呼ばれた時点で、マネージリソースの解放は
終わっていますので、(2) が呼ばれないようにするために、
SuppressFinalize メソッドを呼び出して、ファイナライザが呼ばれないようにします。
繰り返しになりますが、上記は、自身で IDisposable を
実装する場合の手順です。
System.ComponentModel.Component クラスなどのように、
「IDisposable を実装したクラス」を継承する場合には、
ベースクラス側で (2) や (3) が実装済みであることが多いので、
ファイナライザの追加実装は不要となり、(1) のみの実装で十分です。
記事No.86673 のレス /過去ログ148より /
関連記事表示
削除チェック/
■94437
「アプリケーションはブレークモードになっています」が出現
□投稿者/ さき -
(2020/04/12(Sun) 18:12:37)
分類:[VB.NET/VB2005 以降]
以前はExcelでCSVファイルを開き、同じファイルをVBで開いた時にはその起因のエラーメッセージが出てたのですが、
今は何故か「アプリケーションはブレークモードになっています」のメッセージが出てもしまいます。
対処方法などお教えお願いします。
> アプリケーションはブレークモードになっています
>
> お使いのアプリはブレーク状態になりましたが、すべてのスレッドが外部コード (通常はシステム コードまたはフレームワーク コード) を実行していたため、表示されるコードはありません。
親記事 /過去ログ163より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-