くだすれ.NET(超初心者向け)

このエントリーをはてなブックマークに追加
187181
はい、SQLで済む話なんですけど、
Viewに読み込んでる後なので、そのまま使えれば良いなと。

仕様であれば、仕方ありません。
私の勘違いでView+AndAlsoが使えてないのなら
勿体無いと思ったまでです。
188デフォルトの名無しさん:2007/11/18(日) 19:49:12
すいません、質問よろしいでしょうか?
現在、簡単なペイント系ツールを作成しています。
拡大縮小機能を実装するべく、
Graphics.DrawImage (Image, Rectangle, Rectangle, GraphicsUnit)
にて拡大したBitmapをPictureBox.Imageに代入していますが、
この方法だと、大きな画像を拡大した場合に非常に重くなり、
画像のスクロールもままならなくなってしまいます。
大きい画像を拡大しても重くならない実装方法がありましたら
ご教授お願いします。
189デフォルトの名無しさん:2007/11/18(日) 23:06:41
どれ位なのかしらないけどさ

PictureBoxのプロパティで元の比率を保ったまま自動でリサイズしてFitするように描画してくれるのあるじゃない?
あれじゃだめっすか?
190189:2007/11/18(日) 23:08:49
ごめ、読み違えてた

スクロールとかしてかつ拡大縮小っつうと以前VB.NETでやったときにAPI使ってやってた
それだとWin2000+P4 1.8G Mem512くらいのレベルのマシンでも十分快適に動いたよ
必要があるなら使ったAPIくらい書き込むけど?
191188:2007/11/19(月) 01:13:29
お願いします!
192デフォルトの名無しさん:2007/11/19(月) 02:29:59
>大きい画像を拡大しても重くならない実装方法

賢く実装
193デフォルトの名無しさん:2007/11/19(月) 02:37:20
あんま上級者じゃないから使ってるAPIとかイマイチかもしれないけど
CreateCompatibleDC
SelectObject
ReleaseDC
GetStretchBltMode
SetStretchBltMode
DeleteObject
DeleteDC
BitBlt
StretchBlt

基本は
CreateCompatibleDC
BitBlt
StretchBlt
使って描画関連を行っている感じ
これをクラスで独自ラップして適当にイベント出したりしてつかってたよ
194デフォルトの名無しさん:2007/11/19(月) 19:01:27
そんなややこしいことしなくても発想をちょっと変えるだけでしょ。
変えるというか、普通のWindowsの描画方法で普通にやるだけじゃん。

>>188のやり方がアブノーマルなんだよ。
何でわざわざビットマップに描画して、それをImageに指定するの。
考え方がヘンテコすぎるよw

コントロールのOnPaintをオーバライドするかPaintイベント捕まえて
普通にコントロールのDCに描画しろよ。
195188:2007/11/19(月) 19:57:44
ただいま帰りました。

>>193
ありがとうございます!参考にさせていただきます。

>>194
すいません、Windowsプログラミング&C#ともに初めてでして・・・。
出直してきます。
196デフォルトの名無しさん:2007/11/20(火) 23:15:47
VB2005のWebBrowserコントロールについてなんですが
例えば、WebBrowser1.Navigate("C:\")とすると
フォルダの中身が一覧表示されますよね。
この時、表示スタイル(縮小版、並べて表示etc)を、
右クリックのコンテキストメニューで指定するのではなく、
プログラム内部で制御したいのですが、方法がどうしてもわかりません。
ヘルプのメンバ一覧を見てもそれらしきプロパティやメソッドは無かったです。
出来ればWindowsエクスプローラのファイル表示方法をフォルダ毎に取得して、
表示スタイルを同期出来ればベストなんですが、WebBrowserコントロールでは
そういう事は不可能なんでしょうか?
197デフォルトの名無しさん:2007/11/21(水) 00:42:49
>>196
どこかでも同じ質問してたね。
WebBrowserのメンバにそういうプロパティやメソッドがあるかと思うような人だから
説明してもどうかと思うけど、一応書いてみる。

簡単な方法
ネイティブListViewコントロール(SysListView32)のウィンドウハンドルを探して
LVM_GETVIEW / LVM_SETVIEWをSendMessage

面倒くさい方法
リフレクションを使ってWebBrowserのインスタンスからaxIWebBrowser2という名前で
IWebBrowser2インターフェイスを取得。
→IServiceProviderにキャスト
→IShellBrowserをIServiceProvider.QueryService経由で取得
→IShellViewやIFolderViewをIShellBrowser.QueryActiveShellView経由で取得
→いじり放題

いずれにせよ、エクスプローラの設定を読み込んで同期するのは骨でしょう
198デフォルトの名無しさん:2007/11/21(水) 01:42:04
>>197
マルチですみません。

プログラム内で制御するとなると、結構大変そうですね。
APIやReflectionはほとんど使った事が無いので勉強して試行錯誤してみます。

ありがとうございました。
199デフォルトの名無しさん:2007/11/29(木) 01:47:01
C++/CLIを使っていて、AxWindowsMediaPlayerコントロール上にD&Dでのファイル読み込みを実装したいのですが、
AllowDropプロパティはあるのに、DragEnter, DragDropイベントがありません。
Win32APIではDragQueryFile()等で実装できましたが、.NET Frameworkではどのようにすれば実現できますか?
200デフォルトの名無しさん:2007/12/11(火) 01:42:40
すいませんお分かりになる方がいらっしゃればこちらも答えていただけませんか?

VB.NET質問スレ
http://pc11.2ch.net/test/read.cgi/tech/1189038267/958
201デフォルトの名無しさん:2007/12/15(土) 16:31:27
.NET2.0でTrayMeter(ネットワーク送受信速度をトレイに表示)作ろうと思います
IPV4なんたら使用してそれらしきものは出来たのですが、どうも要らないものまでカウントしているようなのです
ローカルエリア接続アイコンが光らない時でも何か受信している様子
もしかして非ユニキャストとか言うものがやって来てるのでしょうか
もしそうなら、非ユニキャストの「バイト数」を取ってくる方法を教えてください
非ユニキャストのパケットサイズでもいいです
または、ローカルエリア接続のプロパティに出て来る受信バイト数でも構いません
よろしくおねがいします
202デフォルトの名無しさん:2007/12/15(土) 16:42:57
.NET2.0で非ユニキャストパケットのサイズを知る方法はありますか?
または非ユニキャスト総バイト数でもいいです
ローカルエリア接続のプロパティの受信バイト数が直接取れればベストなんですが
IPV4なんたらのは違うようなので
203201=202:2007/12/15(土) 17:10:20
ありゃ
投稿後のリロードで出てこなかったから蹴られたかと思ったorz
201=202=自分です
申し訳ない
204デフォルトの名無しさん:2007/12/20(木) 22:33:29
教えてください。
VS2005 C#を使ってます。

タブコントロールですがCtrl+Tabでタブが切り替わるのですが、これを禁止する方法はありますか?

よろしくお願いします
205デフォルトの名無しさん:2007/12/21(金) 16:49:44
継承して以下のメソッドをオーバーライドでどよ。

protected override bool ProcessCmdKey( ref Message msg, Keys keyData )
{
    if( ( keyData == ( Keys.Control | Keys.Tab ) ) || keyData == ( Keys.Control | Keys.Shift | Keys.Tab ) )
    {
        return true;
    }

    return base.ProcessCmdKey( ref msg, keyData );
}
206デフォルトの名無しさん:2007/12/21(金) 19:33:44
ワタクシも教えて下さい。

VS2005 VBですが、
テーブルレイアウトパネルのサイズを動的に変更したり、
場合によってラジオボタンorチェックボックスの表示を切り替えたりすると
画面描画が遅いのが目立ちます。

PC性能アップ以外に早くなる方法があれば教えて下さい。
C#にすると早くなったりしますか?
207デフォルトの名無しさん:2007/12/21(金) 19:48:03
詳しくは知らないけど.NET使ってれば同じじゃね?
俺はVBからVC++に乗り換えたけど.NET使ってプログラム組んでるやつはそんなに速度変わらないよ
208デフォルトの名無しさん:2007/12/21(金) 20:31:33
色々いぢくった後に纏めてRefresh()とかやれば多少はマシになるんでないか
実験してないが
209デフォルトの名無しさん:2007/12/21(金) 21:00:48
>>206
IDEで実行して言ってないよね?w
Releaseのバイナリを直接動かしてみた?
210CeleronM 1.5G:2007/12/22(土) 10:35:13
>>207-209
ありがとうございます。

描画速度だからC#でも同じですかね。
ちょっと検討してみます。
バイナリ直接でも遅いです。

未だVB詳しくないもんで、特別に何か巧い手があるかなと思ったんですが。
冗長コーディングとかして速さ追求してみます。
211デフォルトの名無しさん:2008/01/04(金) 23:43:37
Matrixについての質問なんですが、指定した点(アンカーポイント)についてのスケール変更
ってどのようにするのでしょうか?一度原点を移動してからスケールを変更しても
原点移動しないでスケール変更したのと同じになってしまいます。
回転や平行移動などは原点の移動で指定した点についての変形ができるのですが、
どうしてもスケール変更だけは上手くいきません。
なぜでしょうか?
212デフォルトの名無しさん:2008/01/04(金) 23:44:34
ギャァァァァァァァァァ
すいません、ageてしまいました。
吊ってきます orz
213デフォルトの名無しさん:2008/01/15(火) 02:29:45
VS2005 VB で質問です。

条件分岐でファイルがある場合は読み込み、
無い場合は作る。といった感じの動きをしたいんですが、
ファイルが無い場合に、else以下の処理でファイルを作った後に
上に戻ってファイルを読む動きをしてしまいます。

ソースをどこまで書けばいいのか分からなかったのですが、
下記がif文の中身です。勉強がてら2chブラウザを作っていまして。
exit subを入れても動作は同じでした。どこで戻るのか全く分かりません…
よろしくお願いします。
214デフォルトの名無しさん:2008/01/15(火) 02:30:34
If System.IO.File.Exists(CurDir & "\" & MyBordNunber & ".dat") = True Then
'取得データがある場合
Dim MydownFile As StreamReader
Dim Mytext As String
Dim MyLine As Integer = 1

MydownFile = New StreamReader(CurDir & "\" & MyBordNunber & ".dat", Encoding.Default)

'改行コード数
Do While -1
Mytext = MydownFile.ReadLine()
If Mytext Is Nothing Then
Exit Do
End If
MyLine += 1
Loop

RichTextBox1.Text = MyLine

215デフォルトの名無しさん:2008/01/15(火) 02:31:04
Else

'取得データが無い場合

MyHead = "GET /" & MyBordKey & "/dat/" & MyBordNunber & ".dat HTTP/1.0" & vbCrLf & "Host: " & MyHost & vbCrLf & "User-Agent: Monazilla/1.00" & vbCrLf & "Connection: close"

'送受信
MyWrite.WriteLine(MyHead)
MyWrite.WriteLine("")
Mydat = MyReader.ReadToEnd
MySocket.Close()

'レスポンス判定
If Mydat.Substring(9, 3) = 200 Then

'dat保存
Dim MyLasttime As String
MyLasttime = 1
RichTextBox1.Text = Mydat

TextFlag = Mydat.IndexOf(vbCrLf + vbCrLf) + 4
Mydat = Mydat.Substring(TextFlag, Mydat.Length - TextFlag)
Dim MydatWrite As New StreamWriter(CurDir & "\" & MyBordNunber & ".dat")
MydatWrite.Write(Mydat)
MydatWrite.Close()

Else
RichTextBox1.Text = "見つかりません"

End If
End If
216デフォルトの名無しさん:2008/01/15(火) 02:33:43
貼り付けたらネストが…
217デフォルトの名無しさん:2008/01/15(火) 03:25:22
ごめんなさい。
Handles Button1.Click, Button1.Click
と繰り返してました…
スレ汚し申し訳ないです。
218デフォルトの名無しさん:2008/01/15(火) 12:45:32
生兵法は怪我の元。
マジメに基礎から勉強せえや、としかいいようがないと思うけど。。
219デフォルトの名無しさん:2008/01/15(火) 23:38:00
みなさん ''' とか /// 使ってます?
220デフォルトの名無しさん:2008/01/15(火) 23:56:48
使ってる
221デフォルトの名無しさん:2008/01/16(水) 11:23:46
使うてる
222デフォルトの名無しさん:2008/01/16(水) 11:58:00
使っとう
223デフォルトの名無しさん:2008/01/17(木) 08:53:30
ファイルあるかな?
if (なかった)
{
 ファイルを作る
}
ファイルを開く
ファイルを読む
ファイルを閉じる
224デフォルトの名無しさん:2008/01/17(木) 09:51:14
>>223
作ったばかりのファイルから一体何を読むんだい
225デフォルトの名無しさん:2008/01/17(木) 13:43:09
どうか教えてくださいお願いします。

1.
.NETの文字列型(String)の内部コードってUTF-16ですよね?
以下にそう書いてあるし。
http://msdn2.microsoft.com/ja-jp/library/1w71hb4e(VS.80).aspx

2.
それと以下にはASP.NETでは入出力にUTF-8が使われると書いてありますが、
これはあくまで入出力の問題であって、.NETのString型の内部コードとは無関係ですよね?
http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet16/aspnet16_04.html

3.
そこで気になっているのが、
プロパーから提供されたソースに以下の様なコードがあってですね、
"^[ -~。-゚]+$"
これは正規表現の文字列なのですが、
半角文字のみで構成されている文字列の時にOKとしたい様なのです。
内部コードがUTF-16の場合にこれで上手く行くのか不安です。
.NETのStringの内部コードがUTF-16ならば、正規表現もUTF-16で動く筈ですよね?

#今UTF-16のコードページを見ていたら、半角片仮名の並びがShift_JISと同じでした。
#これはこれで上手く動きそうです。
#ですが、正規表現の内部コードについて知りたいのでお願いいたします。

自分はVB.NET 2005とASP.NETを使ってwebアプリ開発をやっています。
OSはクライアントはWinXPSP2、サーバーはWin2003SP?です。
226デフォルトの名無しさん:2008/01/17(木) 21:34:54
コード云々より、その正規表現エンジンの仕様を調べる方が先だろう
227デフォルトの名無しさん:2008/01/17(木) 22:41:32
正規表現エンジンは.NET純正のコレです。
http://msdn2.microsoft.com/ja-jp/library/4edbef7e(VS.80).aspx
ココを見るとUTF-16(UCS2?)としか思えないんですけどね…。
228デフォルトの名無しさん:2008/01/17(木) 22:47:27
>>225
危ない橋を渡るより、文字数とSJISのEncodingのバイト数が一致するかどうかを調べる
確実な方法に変えた方がいいと思う。

>>226
何いってんだコイツ?
229デフォルトの名無しさん:2008/01/18(金) 01:45:44
それは確実なのか?
230デフォルトの名無しさん:2008/01/18(金) 09:10:14
U+FF61-U+FF64: Halfwidth CJK punctuation
U+FF65-U+FF9F: Halfwidth Katakana variants
231デフォルトの名無しさん:2008/01/20(日) 12:33:59
難読化するにはDotfuscatorしかないのかな?買おうとするとやたら高い。

Dotfuscatorの入手手段は、いまのところVisualStudio購入するとついてくるCommunity版か、
販売されてるProfessional版の2択であってる?
232デフォルトの名無しさん:2008/01/20(日) 18:25:50
フリーで何かあったはず
名前忘れたけど
ついでに.NET2.0以降に対応してるかも不明
見つけた時は.NET1.1しかなかったから
233デフォルトの名無しさん:2008/01/20(日) 23:31:33
フリーのあるのかと思い .NET 難読化 フリー でググったら、
NanDoKu っていうのが見つかった。
更新もされていていま.NET2.0でも使えるらしい。
これ良さそうだね。ありがとう。
234デフォルトの名無しさん:2008/01/21(月) 02:44:24
フォームをモードレスで表示するけれど、フォームを閉じるまでは呼び出し側を終了しないって言う風にするにはどうすればいいですか?
235234:2008/01/21(月) 04:12:07
あ、丁度適当なスレを見つけたので移動します。失礼しました。
236お願いします:2008/01/25(金) 18:52:04
フォームAの開くボタンから別フォームをモードレスで表示して
同じくフォームAの閉じるボタンから別フォームを閉じるにはどうしたらいいですか?
237デフォルトの名無しさん:2008/01/25(金) 18:58:32
お手軽にやるなら new FormB().Show(this)
238デフォルトの名無しさん:2008/01/25(金) 19:41:14
いやいやいやいや
239デフォルトの名無しさん:2008/01/28(月) 23:56:45
Win32APIまじりの質問になって申しわけありません。

現在C++/CLIを使用して.NETからWin32APIでの非同期IOを行っています。
非同期IOの完了通知にSystem.Threading.Overlappedクラスを使っています。
非同期での書き込みは完了し、待機イベントもシグナルを受信するのですが、
Overlapped.Packメソッドに渡したコールバックデリゲートが呼ばれなくて困っています。

1 Overlappedをインスタンス化する。(hEventは手動リセットイベントオブジェクト asyncはIAsyncResultを実装したクラス
Overlapped ^ overlapped = gcnew Overlapped(0 , 0 , IntPtr(hEvent) , async);
2 Packする。
NativeOverlapped * nativeOverlapped = overlapped->Pack(callback , buffer);
3 非同期IOを行う
WriteFile(hIO ,Marshal::UnsafeAddrOfPinnedArrayElement(buffer,0).ToPointer() , buffer->Length , NULL , (LPOVERLAPPED)nativeOverlapped);

4 完了通知を受け取った(hEventがシグナルを受信)あとにリソースを開放する
Overlapped ^ overlapped = Overlapped::Unpack(nativeOverlapped);
Overlapped::Free(nativeOverlapped);

で間違いありませんよね?
hIOはFILE_FLAG_OVERLAPPEDを設定して開いてあります。

コールバックデリゲートを呼び出すには何か他の操作が必要なのでしょうか?
240デフォルトの名無しさん:2008/01/29(火) 03:47:49
>>239
スレ選ぼうね
241デフォルトの名無しさん:2008/02/02(土) 17:20:25
VS2008 Expressがダウンロードできない。
各製品のWebインストールもできない。

単に休日で混んでるのか、メンテナンス中なの?
242デフォルトの名無しさん:2008/02/03(日) 01:36:59
嫌われてるんだよ
243デフォルトの名無しさん:2008/02/03(日) 01:37:56
ワンピーススレって伸びないよね
244デフォルトの名無しさん:2008/02/03(日) 21:10:45
.NETアセンブリのDLLをネイティブなオブジェクトファイルと静的リンクする場合、
どの段階でアプリケーションドメインが初期化されるのでしょうか。

ole32などを一緒にリンクすると起動時にプロセスの初期化エラーが出るので、
DllMainで何か悪さをしているような気がしてならないのです。
245デフォルトの名無しさん:2008/02/03(日) 21:30:53
.netでC言語をやりたいですが、どこからDLすればいいですか?
246デフォルトの名無しさん:2008/02/03(日) 21:51:08
.NETフレームワーク向けのCってのはあまり聞かないな
C++拡張でいいのならC++/CLIがあるが
247デフォルトの名無しさん:2008/02/04(月) 00:12:37
C.net

なんか新鮮
つーか質問者はC#のことを言っていると思うが
248一応ある:2008/02/04(月) 10:27:17
C# & C対応
ttp://www.gnu.org/projects/dotgnu/pnet.html
C対応
ttp://www.cs.princeton.edu/software/lcc/

最新の.NETFramework上で動くかどうかは未検証。
249デフォルトの名無しさん:2008/02/07(木) 18:15:19
CLIのMSによるWindowsへの実装がCLRですよね。
.NETというのは具体的に何を指すんでしょうか?
それとも、具体的なものでなく、MSの考える一連の共通な基盤を挿す包括的・抽象的な概念なんでしょうか?
250デフォルトの名無しさん:2008/02/07(木) 19:24:36
.NET FxはCLRにWPFやWCFなどのライブラリを加えたもの。
251デフォルトの名無しさん:2008/02/07(木) 20:46:21
嘘です
252249:2008/02/07(木) 23:44:11
>>250
↓を見る限り、やはり一連の「アプリ開発・実行環境」全体を指す、ってことでしょうかね?
http://ja.wikipedia.org/wiki/.NET_Framework
253デフォルトの名無しさん:2008/02/08(金) 13:58:33
すいません、.net2003で
ボタンを押してフォームを開く処理で
呼び出し側は操作できるようにしときたいのですが
何回ボタンを押しても1画面以上開かないようにしたいです。

Public frmList As Form

public sub openForm()
  If IsNothing(frmList) Then
frmGamen = New frmDataGamen
Call frmGamen .Show()
End If
End Sub

それで上記のように作ったのですが
これだとcloseした後2度と開けなくなってしまいます。
254デフォルトの名無しさん:2008/02/08(金) 13:59:14
間違えて途中で送信してしまいました。すいません。
255デフォルトの名無しさん:2008/02/08(金) 14:05:22
何度も間違えてすいません。
ソースも間違ってました。

Public frmList As Form

public sub openForm()
  If IsNothing(frmList) Then
   frmList = New frmDataGamen
   Call frmDataGamen.Show()
  End If
End Sub

これで
ttp://dobon.net/vb/dotnet/form/closeform.html

>補足:Closeメソッドでフォームを閉じた時は、その後このフォームを表示することはできません。もしフォームを一時的に非表示にするだけであれば、Hideメソッドを呼び出したり・・・
とありますがこれを回避する方法ってありますでしょうか?

何回もすれ汚してすいませんでした。
256デフォルトの名無しさん:2008/02/08(金) 14:29:08
>>250
.NET Fx=.NET Frameworkの略ですか?
FrameworkをFxと略すのって発音的にちょっと変な気が・・・複数形のFrameworksだったらいいんだけど
257デフォルトの名無しさん:2008/02/08(金) 15:11:03
>>256
.NET Freamwork FX は開発コードで Feature X の意味だったような・・
製品化された後の名称が.NET .Freamwork 3.0
258デフォルトの名無しさん:2008/02/08(金) 15:15:10
>>255
>Call frmDataGamen.Show() 

frmList.Show()
の間違いと考えていい?
それからクラス名は大文字で始める。frmのようなハンガリ記法は避ける。
この場合はFromDataGamenとするのが推奨。
259デフォルトの名無しさん:2008/02/08(金) 15:16:44
>>257
あれ、WinFXが.NEW Framework 3.0になったと記憶してましたが・・・?
もしかしてその名残で.NET Fxって言うのかなぁ
260デフォルトの名無しさん:2008/02/08(金) 15:20:56
>>250 は単純にWinFXのタイポだろ?
実際 3.0 = 2.0 + WPF + WCF + WF なんだから
261デフォルトの名無しさん:2008/02/08(金) 15:37:22
>>258
>それからクラス名は大文字で始める。frmのようなハンガリ記法は避ける。
ここまでは格好良かったのに…!!

>この場合はFromDataGamenとするのが推奨。
Fromだと!?

しかし目から鱗だ。
frmとかlblとかtxtとか普通に使っちゃってるよ。
辞めた方がいいのかな。
262デフォルトの名無しさん:2008/02/08(金) 15:44:48
ご指摘ありがとうございます。
frmList.Show()の間違いでした。
また自己解決できました。

If IsNothing(frmList) Thenを
If IsNothing(frmList) OrElse frmList.IsDisposed then

で再表示させることができました。
ありがとうございました
263デフォルトの名無しさん:2008/02/08(金) 15:49:02
>>261
privateなら別にいいんじゃね
264デフォルトの名無しさん:2008/02/08(金) 15:56:11
>>260
そうですよね。
>実際 3.0 = 2.0 + WPF + WCF + WF なんだから
あとWCS(Windows CardSpace)もですね。

ところでクラスライブラリやCLRは2.0から「全く」変わってないんでしたっけ?
265デフォルトの名無しさん:2008/02/08(金) 16:00:00
うん
266デフォルトの名無しさん:2008/02/08(金) 18:05:56
>>256
.NET Fxって略称はMSFTの人とかが時々使ってるね。
スライドとかで目にすることがある。
267デフォルトの名無しさん:2008/02/08(金) 18:07:06
>>264
実際のところはバグフィックスとか入ってるらしいから、
全く同じかというとそうでもないかもしれない。
268デフォルトの名無しさん:2008/02/08(金) 18:10:50
.NET Framework 3.5では既存部分 (2.0, 3.0)にも手が入っていて、
それぞれSP1として公開されている。
269デフォルトの名無しさん:2008/02/10(日) 00:07:01
ふと思ったんですが
どこからも参照されなくなったインスタンスを、GCに回収される前に裏技など使ってとっ捕まえる方法ってあるんですか?それとも原理的に不可能?
270デフォルトの名無しさん:2008/02/10(日) 00:15:54
っ Finalizeメソッド
271269:2008/02/10(日) 00:47:35
>>270
あ、Finalizeも定義してない場合です。
なんというか、完全に.NETのメモリ管理領域(マネージヒープ?)に漂ってる場合です
272デフォルトの名無しさん:2008/02/10(日) 01:51:44
>どこからも参照されなくなったインスタンス
273269:2008/02/10(日) 02:13:02
忘れることにしますw
こういう馬鹿なこと考えるのはちゃんと.NETを勉強してからにしよう。
274デフォルトの名無しさん:2008/02/10(日) 13:05:59
>>269
インスタンスメソッドへのデリゲートを握られることって参照を握られることに
なるんだっけ?

もしそうでないなら不可能じゃないと思うんだけど、まあそんなことはないよな。
275デフォルトの名無しさん:2008/02/10(日) 13:26:32
>>269
WeakReference
276デフォルトの名無しさん:2008/02/10(日) 17:17:59
どこからも参照されなくなったら、WeakReferenceもクリアされるかと
277デフォルトの名無しさん:2008/02/10(日) 19:07:03
参照を持っとくことはできるけどGCをフックできない。
278デフォルトの名無しさん:2008/02/10(日) 20:00:41
長い弱い参照のWeakReference(object, true)というのはどういうとき使うのだろ。
279デフォルトの名無しさん:2008/02/10(日) 21:08:35
時々しか必要にならないオブジェクトがあるとして、
そいつのインスタンスをずっと保持してるとメモリが無駄になるし、
かといって必要な都度作成するようにするとパフォーマンスが犠牲になる。

こういう場合の「いいとこどり」狙いでしょ。違ったっけ?

ちなみに>>275はナンセンスだよねw
なんでこういう一行レス専門の奴ってアホなんでしょw
280デフォルトの名無しさん:2008/02/10(日) 21:14:22
>>279
そういう目的に弱い参照を使うなとMSDNに書いてあったと思うよ。
281デフォルトの名無しさん:2008/02/10(日) 21:17:49
>>279
「長い」弱い参照の意味わかってるかね?
282デフォルトの名無しさん:2008/02/10(日) 21:20:27
はっきり言って弱参照はなかなか活用しにくい。
javaにある、なんていったかな、ソフト参照だっけかな(違ったかも)?
そういうのなら活用できそうなんだがね〜

大抵すぐに思いつく、キャッシュ方面に用途には、
少なくとも単純には使えない(実質うまく動かない)。
283デフォルトの名無しさん:2008/02/10(日) 22:38:21
>>269 の言ってることを文字通り受け取ればWeakReferenceは違うのだろうけど、
もしオブジェクトの状態を試験的に追跡したいだけなら、
別スレッドからでIsAliveでポーリングすればいいわけだからあながち間違いとも思えない。

「長い」弱い参照については目的はわからないが確認できた動作は
デストラクタが呼び出された後から確保されたメモリが消失するまでの間も
IsAliveがtrueということだった。
「短い」方はデストラクタが呼び出されたときにIsAliveがfalse。
284デフォルトの名無しさん:2008/02/10(日) 22:44:01
それはきっとファイナライザのことだよね。
285デフォルトの名無しさん:2008/02/10(日) 22:52:26
>>284
おっと.NETスレだった。C#の用語で書いてしまった。
C#のデストラクタ=ファイナライザということで。C++/CLIだと違うのだよな。
286デフォルトの名無しさん:2008/02/10(日) 23:49:13
「復活」させた場合でも追跡したい場合に使うのが「長い」弱い参照。
でも復活自体まず使う機会がない。
287デフォルトの名無しさん:2008/02/11(月) 00:00:30
>>285
C#も2.0からファイナライザという言葉を使うようになりました。