ふらっとC#,C♯,C#(初心者用) Part38
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/03/01(日) 08:45:30「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part37
http://pc11.2ch.net/test/read.cgi/tech/1234017654/
0002デフォルトの名無しさん
2009/03/01(日) 08:45:43http://pc11.2ch.net/test/read.cgi/tech/1233757615/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/
初心者のためのプログラミング言語ガイド Part13
http://pc11.2ch.net/test/read.cgi/tech/1232286278/
0003デフォルトの名無しさん
2009/03/01(日) 08:45:53http://www.google.co.jp/
http://msdn.microsoft.com/ja-jp/library/default.aspx
http://homepage3.nifty.com/midori_no_bike/CS/
http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html
http://dobon.net/vb/dotnet/
http://jeanne.wankuma.com/tips/
http://www.labasp.net/CsharpNote/
0004デフォルトの名無しさん
2009/03/01(日) 09:26:32> 例えばゲームなんかだとそれぞれに独立したカウンタなんかを持たせたい時に必要です。
> それすらも別クラスにわけろというなら著しく生産性が落ちまくります。
OOPL的には”それぞれ”はオブジェクトなので,「独立したカウンタ」をするオブジェクトがあればいいと思うんだけど.
あと,内部的に完全に隠蔽されている変数って,なんかとてもキモいんだがその辺はどうやって折り合いつけるの?
(外から初期化したいときとか,値を変更したいときとか)
0005デフォルトの名無しさん
2009/03/01(日) 10:55:180006デフォルトの名無しさん
2009/03/01(日) 11:00:54変数は意味が広い。フィールドもローカル変数も変数と呼ばれることもある
0007デフォルトの名無しさん
2009/03/01(日) 11:52:55優先順を設定する方法はありますか?
0008デフォルトの名無しさん
2009/03/01(日) 12:28:52右クリックから前にとか後ろにとか
あとControlsのSetChildIndex
0009デフォルトの名無しさん
2009/03/01(日) 12:43:33> メソッドの中でしか使わないけど値を保持しておきたいローカル変数ってたまにありますけど、
これは正しいよ。
なぜかC#しかやってない人は頑なに否定する傾向があるようだけど。
例えばこれが可能だと、シングルトンパターンとか、IDisposable.Disposeを実装したときありがちな
2回目以降の呼び出しはスルーする処理が綺麗に安全に書ける。
0010デフォルトの名無しさん
2009/03/01(日) 12:46:25インスタンスフィールドでFAじゃ・・・ないの?
綺麗?安全?だからか
0011デフォルトの名無しさん
2009/03/01(日) 12:47:10もともと過去の名残で残ってるだけだし
0012デフォルトの名無しさん
2009/03/01(日) 13:56:08JavaScriptみたいに匿名メソッドを返す匿名メソッドを実行する形で
メンバ変数のdelegateを初期化すれば実現できると思うけどコンパイルが通らない。
こんな感じになると思うのだけど。
public static Func<int> TestFunc = (() => {int i = 0; return (() => i++);})();
0013デフォルトの名無しさん
2009/03/01(日) 14:04:24適当にActionとかヒント与えたら通る
0014デフォルトの名無しさん
2009/03/01(日) 14:06:55public static Func<int> TestFunc = new Func<Func<int>>(() => { int i = 0; return new Func<int>(() => i++); })();
こうだな
0015デフォルトの名無しさん
2009/03/01(日) 14:25:13あるよって言うのは半分同意せんでもないが、使っているとこに
手を入れるときにメンバに直すこともかなりの割合で経験上
発生するので実質いらんと思う。
否定する人ですが、こういったらいいですかね?C# だけしか
やっていなくて否定している人ばかりではないですよと
ちなみにお前が挙げた例で、IDisposable.Dispose の例、その
フラグを後で他から参照したくなることは多くて結局 IsDisposed
実装したりだとかな(というか ObjectDisposedException どうする
んだよそれしたら)。
つまり、乱用もよく見かけるってことか。なので初めからメンバに
持ってろと。
0016デフォルトの名無しさん
2009/03/01(日) 14:28:39「こういう場合は」必要だ、って主張の反論に「こういう場合」と違う場面を
挙げてそれって反論として成立してると思ってるのかな。
0017デフォルトの名無しさん
2009/03/01(日) 14:33:310018デフォルトの名無しさん
2009/03/01(日) 14:33:34意図的に捨てたんだから無いもんは無い
0019デフォルトの名無しさん
2009/03/01(日) 14:36:33JavaをやってたC#初心者には難しいですか?
Webの入門サイトだけじゃなく、手元に本が欲しくなってしまって
0020デフォルトの名無しさん
2009/03/01(日) 14:42:540021デフォルトの名無しさん
2009/03/01(日) 14:47:34パラパラと見ただけなんだけど印象としては、
説明が親切なつもりなんだろうけど回りっくどいだけで全然分りやすくない。
あと冒頭で同性愛をカミングアウトするのはいらないと思った。
誰も著者の私生活になんて興味ないのに。
0022デフォルトの名無しさん
2009/03/01(日) 14:48:17気分害した、解りにくいなら謝りますが、本旨は「挙げた例にすら乱用してる
っぽい感じのものがあるよ」って話です。
これで「たまに」のラインが変わってくるのですよ
0023デフォルトの名無しさん
2009/03/01(日) 14:58:52過剰反応だったかなごめん。
まあ確かにそんなに有用な場面が多いわけではないのは俺も認めるところ。
あった方がいいとは思うけどなくてもそんなに困らないのは確か。
0024デフォルトの名無しさん
2009/03/01(日) 14:59:340025デフォルトの名無しさん
2009/03/01(日) 15:05:03フィールドにしとくのが定石なんじゃないの?
http://msdn2.microsoft.com/en-us/library/fs2xkftw.aspx
0026デフォルトの名無しさん
2009/03/01(日) 15:14:26さらにいえばなんつーかな、C++ とかだと時間を経るごとにこういう
ので見えるところ消えていくんだよなぁってのがあり。楽する機能として
使っているところな。テンプレートライブラリやらマクロやらではどうして
も必要なときがあってそういうのは残るけども。
そして突っ込んでいくと、後から考えるに明らかに乱用だったなぁと思う
わけだが、事前にこれを予測するのは難しかったなぁってことで結局
状態単位が class スコープに絞るほうが混乱がなくていい気がするんだよ
もちろん単純に経験からくる感覚なので常に正しいとは言わないが
0027デフォルトの名無しさん
2009/03/01(日) 15:14:31プロパティで変えるのは出来ますが、起動中に変えたいのです
普通に考えてform1.text=だと思ってたんですがそれだといかんようで。。。
0028デフォルトの名無しさん
2009/03/01(日) 15:21:25インスタンスじゃねえだろ
0029デフォルトの名無しさん
2009/03/01(日) 15:24:24ヒントはthisそして省略
0030デフォルトの名無しさん
2009/03/01(日) 15:54:230031デフォルトの名無しさん
2009/03/01(日) 16:14:57外から初期化したり変更出来ないメンバ変数なんて普通にあると思うけど。
特定のメソッドからしか参照できないメンバ変数って革命的じゃない?
宣言だけ明確にしてれば変数名に悩む必要ない!
0032デフォルトの名無しさん
2009/03/01(日) 16:19:20Sub f() ' VB クラス内の関数
Static anonimous As Integer = 0; // インスタンス変数
void f() { // c++ クラス内のメンバー関数
static int anonimous_static = 0; // クラス変数
実装は結局、匿名のメンバーまたはスタティックメンバーを追加するだけなのだろうけど。
int f_anonimous = 0;
static int f_anonimous_static = 0;
void f() {
f_anonimous++;
f_anonimous_static++;
0033デフォルトの名無しさん
2009/03/01(日) 16:22:59クラス分けすれば済むんじゃないか。
そんな変な機能は迷惑
0034デフォルトの名無しさん
2009/03/01(日) 16:47:43staticだとオブジェクトを複数生成した時困るよ。
>>33
糖衣構文だよ。
匿名型とかラムダ式だってクラスわけすれば済むけどもっと手軽に書けるようになったじゃん。
0035デフォルトの名無しさん
2009/03/01(日) 16:57:01そろそろすれ違いだこの辺にしよう。
0036デフォルトの名無しさん
2009/03/01(日) 17:32:29やはり省略できないのか。
もうちょい型推論頑張ってくれと思うけど仕方がないか。
0037デフォルトの名無しさん
2009/03/01(日) 17:45:15marshalとか必要になってくるかな?
C#ってそんなに重くない?
0038デフォルトの名無しさん
2009/03/01(日) 17:48:48重くない
0039デフォルトの名無しさん
2009/03/01(日) 17:54:1500401
2009/03/01(日) 18:01:370041デフォルトの名無しさん
2009/03/01(日) 18:03:450042デフォルトの名無しさん
2009/03/01(日) 18:04:01ペッ
0043デフォルトの名無しさん
2009/03/01(日) 18:07:24死ね
0044デフォルトの名無しさん
2009/03/01(日) 19:14:530046デフォルトの名無しさん
2009/03/01(日) 21:06:06その状態をきちんとマークしておけば、わざわざフラグなんか持つには及ばないと思うんだ。
たとえば、内部的に何かのWin32ハンドルを使っているとすれば、↓こんな感じで。
if (_hProc != IntPtr.Zero)
{
bool success = CloseHandle(_hProc);
if (success)
{
_hProc = IntPtr.Zero;
}
else
{
throw new Win32Exception();
}
}
0047デフォルトの名無しさん
2009/03/01(日) 21:12:36ディスク容量不足の時のFileStreamみたいな悲惨なことになるぞ。
0048デフォルトの名無しさん
2009/03/01(日) 21:47:48Penオブジェクトやらを用意して、Form上に描画しないとならないのでしょうか。
0049デフォルトの名無しさん
2009/03/01(日) 21:55:03where T : struct
>>48
標準の方法はありません
0050デフォルトの名無しさん
2009/03/01(日) 21:57:18http://www.atmarkit.co.jp/fdotnet/dotnettips/310linecontrol/linecontrol.html
0051デフォルトの名無しさん
2009/03/01(日) 22:06:04Win95のころからある手法なのに知らない人多いのかな
0052デフォルトの名無しさん
2009/03/01(日) 22:11:13工エエェェ(´д`)ェェエエ工工
>>50
ありがとうございます。便利だけど関係ないtextboxがあるのは、なんかいやですね・・
>>51
不便ですね。直接描画できると良いのに。
0053デフォルトの名無しさん
2009/03/01(日) 22:18:170054デフォルトの名無しさん
2009/03/01(日) 22:19:56直接描画したいのなら最初からそうすりゃいいじゃんw
言ってること意味不明だよ。
0055デフォルトの名無しさん
2009/03/01(日) 22:24:020056デフォルトの名無しさん
2009/03/01(日) 22:24:17Visual Basic Power PacksにLineShapeコントロールがあるよ。
0057デフォルトの名無しさん
2009/03/01(日) 22:26:080058デフォルトの名無しさん
2009/03/01(日) 22:30:32http://www.atmarkit.co.jp/fdotnet/dotnettips/781winlineshape/winlineshape.html
0059デフォルトの名無しさん
2009/03/02(月) 00:13:24>>49 で出てるけど where T : struct。
細かい話をすると同時に new() 制約フラグとか valuetype 制約フラグ
とか必要といった話になるので直接 ValueType から継承なクラス指定は
しない。
>>46
根っこはな。Component も IEnumerator<T> も実装していたりする
ので一概に言えるものじゃない。
0060デフォルトの名無しさん
2009/03/02(月) 00:35:392005でも追加でインストールすれば使えなかったっけ?
0061デフォルトの名無しさん
2009/03/02(月) 01:15:35でもC++/CLIだとSystem.ValueTypeだけを指定ってのもできるんだよな
0062デフォルトの名無しさん
2009/03/02(月) 01:25:43それ、C# だと struct 制約のことなんでは。
C# で
class GenericTest<T> where T: struct {}
をコンパイルして逆アセすると、
.class private auto ansi beforefieldinit GenericTest`1<valuetype .ctor ([mscorlib]System.ValueType) T>
になる。
0063デフォルトの名無しさん
2009/03/02(月) 03:27:02OpenFileDialogやSaveFileDialogをフォームデザイナから追加したのですが、最後に検索したフォルダの位置を記憶しているようなのです。
もしかしてレジストリとかに最後のフォルダの位置とか記憶してたりするのでしょうか?
0064デフォルトの名無しさん
2009/03/02(月) 03:53:43インスタンスのプロパティで設定できる。
詳しくはMSDN読め
0065デフォルトの名無しさん
2009/03/02(月) 03:56:060066デフォルトの名無しさん
2009/03/02(月) 03:58:450067デフォルトの名無しさん
2009/03/02(月) 04:34:25そしてRestoreDirectoryを少なくともデザイナからの変更した状態では、何も変わっていないような気もして凄く気味が悪いです。
0068デフォルトの名無しさん
2009/03/02(月) 04:59:21>>64>>66
バーカバーカ
0069デフォルトの名無しさん
2009/03/02(月) 05:30:54まさかfalseにして変わらないとか言ってないだろうね
0070デフォルトの名無しさん
2009/03/02(月) 07:42:260071デフォルトの名無しさん
2009/03/02(月) 09:03:10C++/CLIでValueType制約にすると <([mscorlib]System.ValueType) T>
これだとValueTypeを継承しただけの参照型(C#では作れない)でも可
デフォルトコンストラクタ制約もない
C++/CLIでvalue class制約にすると <valuetype .ctor T>
これだとValueTypeを継承してなくても値型ならなんでも可(C#では作れない)
C#のstruct制約と同じにするにはwhere T : ValueType, value classにする
0072デフォルトの名無しさん
2009/03/02(月) 12:42:43あー理解しました、ありがとうございます。
カレントディレクトリとFileDialogが固有に保存するディレクトリ位置をごっちゃにしてました。
ただこうなるとFileDialogが固有の値がどこに保存してるかホントにわかりませんね
0073デフォルトの名無しさん
2009/03/02(月) 12:49:050074デフォルトの名無しさん
2009/03/02(月) 14:03:59固有の値ってなんじぇすか?
0075デフォルトの名無しさん
2009/03/02(月) 14:05:560076デフォルトの名無しさん
2009/03/02(月) 14:48:38そんなのがあるんだ。
0077デフォルトの名無しさん
2009/03/02(月) 15:21:50System.IO.Directory.GetCurrentDirectory()静的メソッドで取得できるのがカレントディレクトリ。通常は起動したアプリの位置。
以下さっき確認した方法をば。
1、WindowsFormAppricationを新規作成
2、フォームデザイナ表示して、ツールボックス>適当にOpenFileDialogを追加。
3、フォームのクライアント領域をフォーカスして、適当にプロパティ>Clickイベントを追加。ハンドラでダイアログをShowDialogる。
4、ShowDialog()の前後をMessageBoxでカレントディレクトリ情報を表示。
5、ダイアログのRestoreDirectoryプロパティがtrueとfalseのときの挙動を見比べる。
0078デフォルトの名無しさん
2009/03/02(月) 19:15:08ちょっと長くなるのでテキストファイルにして上げました。
一度見てもらえれば幸いです。よろしくお願いします。
http://uproda.2ch-library.com/1103101x4/lib110310.txt
表示できない場合はしたのURLからお願いします。DLキーはそのまま「1」です。
http://uproda.2ch-library.com/lib110310.txt.shtml
0079デフォルトの名無しさん
2009/03/02(月) 20:03:39System.Windows.Forms.WebBrowserコントロールで
Navigate("url string") でHtml表示できますが、
Proxyサーバを経由するときはどうしたらいいのですか?
Proxyプロパティを持っているWebClientを使用して
試しにyahoo.co.jpを
WebClientからDownloadData⇒byte[]をstreamに変換
DocumentStreamにセット
DownloadString⇒DocumentTextにセット
とかやってみたんですがスクリプト関係が読み込めないようです。
0080デフォルトの名無しさん
2009/03/02(月) 20:12:310081デフォルトの名無しさん
2009/03/02(月) 21:05:22test1.xml
はどんな出力になっているの?
008278
2009/03/02(月) 21:41:32ファイルの中身でしょうか?このようになっています。
※改行規制に引っかかったので適当に改行しました。
ちなみに、暗号化されていると思われる部分は毎回内容が違っています。
<root>
<EncryptedData Id="EncryptedElement1" Type="http://www.w3.org/2001/04/xmlen
c#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"><EncryptionMethod Algorith
m="http://www.w3.org/2001/04/xmlenc#aes256-cbc" /><CipherData><CipherValue>ZdxQ
9vVJIP9l94JL5p+Y8Wth3TZpgPnn/5Ta48lKRBdhsaL87ywnN8lVPcSZYm5emTnWChPk5IiL2iIqClD
tvxzv84ko/9XsbHtj4cv7yLYLH4MZUmX3ds3AEiDIondHwst9EPk7YK5UUERaIPx8rEksIKcOpc8dJb
vB3celcTw=</CipherValue></CipherData></EncryptedData>
</root>
0083デフォルトの名無しさん
2009/03/02(月) 21:54:06http://msdn.microsoft.com/ja-jp/library/ms229919(VS.80).aspx
には、
><EncryptedData> 要素の <EncryptedKey> 要素に格納されたセッション キーを
>復号化します。次に、セッション キーを使用して XML 要素を復号化します。
って書いてあるけれど、<EncryptedKey> 要素がないよね?
暗号化は出来ているようだ、って書いてあったけど、その認識が多分誤り
なんじゃないかな。長いのでチェックしきりれないんだけど、多分間違いが
あるのはEncryptメソッドの方だと思う。
0084デフォルトの名無しさん
2009/03/02(月) 22:02:26初期化ベクタと共通キーで、共有鍵暗号のはずなのに。
008583
2009/03/02(月) 22:07:36いや、セッションキーはAESなんだけど、それをRSAで暗号化してXMLに埋め込むって
コードのはずが、上手く行っていないって話のようです。
008683
2009/03/02(月) 22:15:06edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));
の後に
edElement.KeyInfo = new KeyInfo();
なのって凄くおかしくない?
008783
2009/03/02(月) 22:43:53edElement.KeyInfo = new KeyInfo();
// Add the encrypted key to the
// EncryptedData object.
edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));
この順序にしたら、出力が
<root>
<EncryptedData Id="EncryptedElement1" ほにゃらら>
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
<KeyInfo ほにゃらら>
<EncryptedKey ほにゃらら>
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo ほにゃらら>
<KeyName>rsaKey</KeyName>
</KeyInfo>
<CipherData><CipherValue>ほにゃらら</CipherValue></CipherData>
<ReferenceList>
<DataReference URI="#EncryptedElement1" />
</ReferenceList>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>ほにゃらら</CipherValue>
</CipherData>
</EncryptedData>
</root>
ってなった。これで、キーが埋め込まれたっぽくない?
0088デフォルトの名無しさん
2009/03/02(月) 22:46:15項目を自分で暗号化してxmlに保存するでもいいけど、
一括して暗号化してくれるなら、ライブラリ化しとけば後で便利そうだな
0089デフォルトの名無しさん
2009/03/02(月) 22:49:39#MSDNのコードって、何故か、バグはあってもビルドだけはばっちり通るんだよなあ。
0090デフォルトの名無しさん
2009/03/02(月) 23:14:48そうなのか
C++/CLIでできることをC#では禁止する理由がわからんな
0092デフォルトの名無しさん
2009/03/02(月) 23:24:22できたところで全く意味がない
混乱を生むだけ
CILではできるのにC++/CLIではできないことだって当然いくらでもある
009387
2009/03/02(月) 23:32:05バグがあるとかいう以前にそもそもヘルプに直書きしてテストしていないような
雰囲気のコードが多い。
0094デフォルトの名無しさん
2009/03/02(月) 23:35:17一言で言うとややこしかったり仕様にあわなかったり意味が
なかったり。
C# 内の制約は何つーかすごい色々な理由が複雑に絡まり
あってさまざまに制限がかけられている。必要のないパターン
だったり、扱えないものだったり、推論上の問題だったり。
例えば、class ([mscorlib] System.ValueType) なんて制約は
実はありでこれはValueType と Enum だけ OK とか
valuetype ([mscorlib]System.ValueType) と
([mscorlib]System.ValueType) だけの違いは Nullable<T> が
入るかどうかとか。
ちなみに >>71 の説明ちょっと変?というか valuetype special
constraint は Nullable<T> 「構造体」の存在が大きい。
この special constraint で大雑把に言って Nullable<T> が
含まれるのか除外されるのかが決まる
0095デフォルトの名無しさん
2009/03/02(月) 23:43:06SQLの結果で例えばある列に特定の値があった場合は、その行を表示しないという事をやりたいのですが
どのようにしたら良いでしょうか?
rowdataboundイベントで値のチェックをして
e.row.cells[0].remove()とかを全部の列にやっても小さい枠が残っちゃうんですよね。
0096デフォルトの名無しさん
2009/03/02(月) 23:44:48もしくはDataTable.Select("", "");を使う
0097デフォルトの名無しさん
2009/03/03(火) 00:04:04普段windows認証でsql serverにつないでるのですが
今回sql server接続にチャレンジしたのですが、つながりません・・・・
「ユーザーhogeは接続できませんでした。このユーザーはsql serverの信頼関係接続と関連づけられてません」と帰ってくるのですが
hogeに問題があると思うのですが、通常hogeは何なんでしょう?
ぎ・・・ギブ 日本語・・おkだな
0098デフォルトの名無しさん
2009/03/03(火) 00:10:010099デフォルトの名無しさん
2009/03/03(火) 00:12:22・・・ということは
SQLマネージメントスタジオで設定するんですか?^^;ひー
0100デフォルトの名無しさん
2009/03/03(火) 00:14:030101デフォルトの名無しさん
2009/03/03(火) 00:19:45SQL Server構成マネージャのことですか?
試行錯誤中
0102デフォルトの名無しさん
2009/03/03(火) 00:24:42IL1命令だけで取れるはずなのに
ILを直接書くか,
static class RuntimeTypeHandles<T> {
public static readonly RuntimeTypeHandle Value = typeof(T).TypeHandle; }
くらい?
0104デフォルトの名無しさん
2009/03/03(火) 01:00:470105デフォルトの名無しさん
2009/03/03(火) 01:08:53ヴァーチャルPc越しに下記コネクションを利用して開こうとしたんですけど
つながりません・・・
C:\を\\にしたり
\SQLEXPRESS;を\\SQLEXPRESS;
にしたけどダメでした
C# Express Editionじゃだめなんでしょうか?
connStr = @"
Data Source = .\SQLEXPRESS;
AttachDbFilename = C:\hoge\hoge.mdf;
Integrated Security = True;
User Instance = True;";
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open(); // コネクションのオープン
}
0106デフォルトの名無しさん
2009/03/03(火) 01:16:38それじゃ自分自身のインスタンスになってんじゃないの?
バーチャルPCに対してならIPアドレスか、バーチャルPCのドメインとか、
PC名で指定する必要があるんじゃないか?
0107デフォルトの名無しさん
2009/03/03(火) 01:24:02むむむ
しらべてあす報告します
ありがとうです
0108デフォルトの名無しさん
2009/03/03(火) 02:34:16string s = Convert.ToString(c);
string s = c.Tostring();
上ができないのは何でなんだぜ?
0109デフォルトの名無しさん
2009/03/03(火) 02:37:560110デフォルトの名無しさん
2009/03/03(火) 02:52:00エラーになるのは下だけでしょ
Convertには ToString(char) のクラスメソッドがあるけど、
Charには ToString() のインスタンスメソッドがないから
0111デフォルトの名無しさん
2009/03/03(火) 02:52:33さすがアルカイダの友達の友達だ
0112108
2009/03/03(火) 02:56:20char c = 'a';
↓はできるけど
string s = Convert.ToString(c);
string s = c.Tostring();
↓はできない
string s = (string)c;
0113108
2009/03/03(火) 03:00:400114デフォルトの名無しさん
2009/03/03(火) 03:07:38根本的に勘違いしてるんじゃないかなあ
0115デフォルトの名無しさん
2009/03/03(火) 03:46:32Object.ToString()
0116デフォルトの名無しさん
2009/03/03(火) 04:03:43ごめん、そりゃそうだ
エラーになると思い込んでたのでorz
0117デフォルトの名無しさん
2009/03/03(火) 04:06:18ちなみに(int)cは出来る。
といった辺りから考えてみてくださいな。
0118デフォルトの名無しさん
2009/03/03(火) 04:27:16stringはcharの配列だけどcharは値型、stringは参照型だからキャストできないってこと?
charは16bitのUnicodeだし
0119デフォルトの名無しさん
2009/03/03(火) 08:03:13値型とか幅とか何も関係ない
0120デフォルトの名無しさん
2009/03/03(火) 09:25:56できたからといって別におかしいことはない
できるようにされてないだけ
0121デフォルトの名無しさん
2009/03/03(火) 09:58:26拡張子ではなく中身でテキストファイルかバイナリファイルかを
判別する方法ってありますか?
0122デフォルトの名無しさん
2009/03/03(火) 10:01:330123デフォルトの名無しさん
2009/03/03(火) 10:04:090124デフォルトの名無しさん
2009/03/03(火) 10:05:020125デフォルトの名無しさん
2009/03/03(火) 13:06:42まぁテキストかバイナリかを見分けると言われれば>>122が正しいんだが
ちょっとエスパーしてみた
ttp://dobon.net/vb/dotnet/string/detectcode.html
0126デフォルトの名無しさん
2009/03/03(火) 14:04:570127デフォルトの名無しさん
2009/03/03(火) 14:10:53NAMEフィールドをコンボボックスに表示したいと思っています。
その時にNAMEフィールドのデータに紐付くIDフィールドも保持して
コンボボックスを操作した際に、IDフィールドも同時に制御するような処理を作りたいのですが
どのように作ればいいのでしょうか?
コンボボックスを2つ用意して片方を非表示にして制御する方法しか思いつきませんでした
宜しくお願い致します
0128デフォルトの名無しさん
2009/03/03(火) 14:25:20つコレクション
0129デフォルトの名無しさん
2009/03/03(火) 14:45:210130デフォルトの名無しさん
2009/03/03(火) 15:30:300131デフォルトの名無しさん
2009/03/03(火) 15:30:54DisplayMemberにName
ValueMemberにID
SelectedChanged(で合ってるのかな)イベントにハンドラ追加して
ComboBox.SelectedValueでIDが取得できるんじゃね?
データバインドのときに限るが。
それかEntityクラス作って ToStringメソッドをオーバーライドして
ToStringでNameを返すようにする。
Entityクラスのオブジェクトをコンボにセットすれば
ToString()したときの文字列がコンボに表示される。
あとはSelectedChangedで(Entity)キャストしてオブジェクトを取り出す。
0132デフォルトの名無しさん
2009/03/03(火) 20:07:59List1(0〜25)とList2(25〜50)に分割するにはどうやったらいいのでしょうか?
0133デフォルトの名無しさん
2009/03/03(火) 20:16:130134デフォルトの名無しさん
2009/03/03(火) 20:22:03GetRangeなら出来そうですね
やってみます
0135デフォルトの名無しさん
2009/03/03(火) 20:27:140136デフォルトの名無しさん
2009/03/03(火) 21:01:10それは違うだろ。値じゃなく添え字で分けたいんだから。
0137デフォルトの名無しさん
2009/03/03(火) 21:12:140138デフォルトの名無しさん
2009/03/03(火) 21:12:46すまん、そのとおりだ。
長くなるけどこっちで。
list.Select((value, index) => new { value, index }).GroupBy(t => t.index <= 25, t => t.value);
0139デフォルトの名無しさん
2009/03/03(火) 22:59:25指定した日付の時の年齢を返すようなのってどうやりますか?
0140デフォルトの名無しさん
2009/03/03(火) 23:00:250141デフォルトの名無しさん
2009/03/03(火) 23:08:45あんま需要ないのか?
0142デフォルトの名無しさん
2009/03/03(火) 23:18:03でやるべきじゃないのかな
0143デフォルトの名無しさん
2009/03/03(火) 23:18:56正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。
0144デフォルトの名無しさん
2009/03/03(火) 23:19:310145デフォルトの名無しさん
2009/03/03(火) 23:21:32豆知識
0146デフォルトの名無しさん
2009/03/03(火) 23:23:55法律的に年利計算は閏年の翌日?前日?
0147デフォルトの名無しさん
2009/03/03(火) 23:30:11?
0148デフォルトの名無しさん
2009/03/03(火) 23:35:42一意に定まるものじゃないものな。
結局場合分けして引き算するしかなさそうだ。
ちなみに、年齢が変わるのは「誕生日の前日の午後12時」なので、誕生日が来たら年齢が変わると考えておk。
// DateTime d1 = 指定日付, d2 = 誕生日
int age;
if (d1 < d2)
{
// 何かしらエラー処理する
}
else if (d1.Month > d2.Month || (d1.Month == d2.Month && d1.Day >= d2.Day))
{
age = d1.Year - d2.Year;
}
else
{
age = d1.Year - d2.Year - 1;
}
0149デフォルトの名無しさん
2009/03/03(火) 23:36:04誕生日の前日に年取るのは閏日生まれの為だし
0150デフォルトの名無しさん
2009/03/03(火) 23:42:56詳しく!
ヘルプミー
今日で約1週間!俺はアホなのかー♪;;
0151デフォルトの名無しさん
2009/03/03(火) 23:48:42これじゃ不正確
民法の試験じゃ×になる
0152デフォルトの名無しさん
2009/03/03(火) 23:50:260153デフォルトの名無しさん
2009/03/03(火) 23:52:06応援してね
0154デフォルトの名無しさん
2009/03/03(火) 23:54:27(´・ω・`)
(つ夢と)
`u―u´
あなたの後ろに落ちてたこれを、
∧__,,∧ ∧__,,∧
(`・ω・ ) ミ (`・ω・´)
( つ ⌒ヽ と ,u、つ
`u―u' 夢 `u´夢
YY⌒Y
こうして、 こうして、
∧__,,∧
_ (ω・´ )
夢 三ニ ☆ __,( )つ
 ̄ `ー―‐u'
こうだ !
0155デフォルトの名無しさん
2009/03/04(水) 00:01:14Data Source=***.***.***.***,????;Initial Catalog=++++;Persist Security Info=True;User ID=--;Password=\\\\
***.***.***.*** ipaddress
+++ データベース名
-- 接続するユーザ名
\\\\ 接続するユーザ名のパスワード
で接続できた。インスタンスは規定のインスタンスだから指定なし
0156デフォルトの名無しさん
2009/03/04(水) 00:02:31んでシステム上ではどうするのが正解なんだい
0157デフォルトの名無しさん
2009/03/04(水) 00:03:39????はポート
0158デフォルトの名無しさん
2009/03/04(水) 00:18:44(´・ω・`)
(つ夢と)
`u―u´
回収!!
0159デフォルトの名無しさん
2009/03/04(水) 00:20:33ありがとう
0160デフォルトの名無しさん
2009/03/04(水) 00:20:54( ・∀・)
と )シュッ
Y しノ彡 -=ニ三 夢
ヽ )
0161デフォルトの名無しさん
2009/03/04(水) 00:29:25(´・ω・`)
(つ夢と)
`u―u´
もう離すものか!!
だれにも渡さない!
0162デフォルトの名無しさん
2009/03/04(水) 00:31:26∧_(∀゚ ; )
( ・∀・) つ
(っ夢⊂≡て ヽ よこせ
して_)_ノw (_)
∧_∧
( ・∀・)
と ) シュッ
Y しノ彡 -=ニ三 夢
ヽ )
0163デフォルトの名無しさん
2009/03/04(水) 00:35:28精神年齢が幼稚園時代で止まってるのか?
本気で理解できんよ。
0164デフォルトの名無しさん
2009/03/04(水) 00:37:570165デフォルトの名無しさん
2009/03/04(水) 00:40:47(´・ω・`)
(つポート
`u―u´
ポートとは何ぞや!
0166デフォルトの名無しさん
2009/03/04(水) 00:41:350167デフォルトの名無しさん
2009/03/04(水) 00:42:42×マジレス
○キチガイレス
だわ
0168デフォルトの名無しさん
2009/03/04(水) 00:44:2225が重複してるが、当分割と仮定して、
var list1 = list.Take(25).ToList();
var list2 = list.Skip(25).Take(25).ToList();
>>139
int age = target.Year - birth.Year;
if(target < birth.AddYears(age)) age--;
0169デフォルトの名無しさん
2009/03/04(水) 00:45:07お絵かき楽しいだろ。
素直になれよ。
0170デフォルトの名無しさん
2009/03/04(水) 09:49:54特別な事情がない限りSQL Serverのポート番号はデフォルトの1433なので省略可能。
ので接続先のマシンがたとえば192.168.1.1でインスタンス名がSQLEXPRESSなら
Data Source=192.168.1.1\SQLEXPRESS
だし、既定のインスタンスに接続するならインスタンス名も省略できて
Data Source=192.168.1.1
で、特別な事情(SQL Server 2000/2005/2008を共存させてるとか)があって別のポート(たとえば11433)を使っているなら
Data Source=192.168.1.1,11433\OTHERINSTANCE
それでもつなげないなら接続先のファイアウォールが邪魔してると思われる。
0171デフォルトの名無しさん
2009/03/04(水) 10:12:340172デフォルトの名無しさん
2009/03/04(水) 10:46:18>>171も言ってるように、SSMSとかサーバーエクスプローラとかで接続してみるのが先だな。
てか、TCP接続ってデフォルトでOFFじゃなかったか?
それにしても斬新な区切り方だな>>171
0173デフォルトの名無しさん
2009/03/04(水) 11:39:32起きます。C#でスタック領域を広げるにはどうすればいいのですか?
0174デフォルトの名無しさん
2009/03/04(水) 11:55:25それとも、普通にInt32なりInt64なりを使っていて、再帰が
深くなりすぎてスタックが足りなくなってるの?
後者だとしたら、どうせ計算可能な部分はめちゃめちゃ限られているので、
アッカーマン関数の値を計算していく順序を工夫すべきだと思う。
http://www.google.co.jp/search?q=アッカーマン関数&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
これ見ると分かるけど、m=3以降に関しては、頑張っても報われないよ?
0175デフォルトの名無しさん
2009/03/04(水) 11:59:52>>174で答えが出てるけど、どうしてもスタック領域を広げたいという話であれば
Threadクラスのコンストラクタで指定できるらしい。試してないけど。
http://msdn.microsoft.com/ja-jp/library/system.threading.thread.thread.aspx
0176デフォルトの名無しさん
2009/03/04(水) 12:01:22再帰が深くなりすぎます
>>175
具体的にはどのようなコードを書けば良いのでしょうか?さっぱりわかりません
0177デフォルトの名無しさん
2009/03/04(水) 12:02:40広げる方法を知っておきたいのです。C/C++ならリンカオプションで
簡単に出来るのですがC#では何かよくわかりません
0178デフォルトの名無しさん
2009/03/04(水) 12:06:580179デフォルトの名無しさん
2009/03/04(水) 12:07:08再帰はスタックサイズの変更よりループに展開することを考えた方がいい
0180デフォルトの名無しさん
2009/03/04(水) 12:07:47それはヘルプを見て確認していますが、使い方がわからないのです
短いコードで良いので具体的な使い方を教えていただきたいのです
0181デフォルトの名無しさん
2009/03/04(水) 12:09:45C# スレッド でググれ
0182デフォルトの名無しさん
2009/03/04(水) 12:10:34もちろん既にぐぐっていますがよくわからないのです
0183デフォルトの名無しさん
2009/03/04(水) 12:12:09スタックサイズとか変なこと考える前に基礎をやれとしか
0184デフォルトの名無しさん
2009/03/04(水) 12:17:16using System.Threading;
class Program
{
static void Main()
{
int maxStackSize = 1 * 1024 * 1024 * 1024;
Thread th = new Thread(DoWork, maxStackSize);
th.Start();
}
static void DoWork()
{
//...
}
}
0185デフォルトの名無しさん
2009/03/04(水) 12:27:24ありがとうございます
助かりました
これを参考に作り直してみます
0186デフォルトの名無しさん
2009/03/04(水) 12:31:13>このコンストラクタのオーバーロードを使用しないでください。
だし
0187デフォルトの名無しさん
2009/03/04(水) 12:53:12Stack<long> stack = new Stack<long>();
stack.Push(m); stack.Push(n);
while (1 < stack.Count) {
n = stack.Pop(); m = stack.Pop();
if (m == 0) { stack.Push(n + 1); }
else if (n == 0) { stack.Push(m - 1); stack.Push(1); }
else { stack.Push(m - 1); stack.Push(m); stack.Push(n - 1); }
}
return stack.Pop();
0188デフォルトの名無しさん
2009/03/04(水) 14:12:0620090304 - 19870305 = 219999
これを10000で割った商が年齢になる。
別にうるう年とか全然関係ない。
このスレは算数もできない文系プログラマばっかりなのか?
0189デフォルトの名無しさん
2009/03/04(水) 14:20:49ともかくそれで正確な答えが出るんだったら便利だな
0190デフォルトの名無しさん
2009/03/04(水) 14:41:44すげーw
おまえ天才だなw
0191デフォルトの名無しさん
2009/03/04(水) 15:04:330192デフォルトの名無しさん
2009/03/04(水) 15:11:11何を言っているんだ?
0193デフォルトの名無しさん
2009/03/04(水) 15:13:56レベルが低すぎる
日曜プログラマならぬなんちゃってぷry
0194デフォルトの名無しさん
2009/03/04(水) 15:23:20int ydiff = dt1.Year - dt2.Year;
if (dt1.AddYears(-ydiff).CompareTo(dt2) < 0) { ydiff--; }
0195デフォルトの名無しさん
2009/03/04(水) 15:24:52極論を言えば、
1+2+4+8+16+32+.................+1024を求めるときに、
思考を放棄している人間はそのまま足していくか諦める。
思考する人間は、
S=1+2+..........+1024とおいて、
2*S = 2+4+........+2048との差を求めることで和を得る。
これは別に学校で等比級数の公式を習ったかどうかという問題ではない。
>>140で答えが出ているのに、>>143みたいな思考を放棄したプログラマは考えもせずただ
>正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。
こんなことを言い出す始末。
これは上の問題で言えばそのまま足していく人間だと言うことだよ。
プログラマだったら便利なメソッドが用意されてなかったら自分で考えて作るくらいのアタマが欲しいところだ。
0196174
2009/03/04(水) 15:42:06・同じ行では左側(nが小さい方)しかか参照しない
・上(mが小さい方)の列程計算可能な行(n)は多い
なので、再帰を使わずに、表の参照と捉えた方が良い。
そうしないと、同じ枡を何度も無駄に計算する事になる。
List<List<int>> Ack = new List<List<int>>();
とか作って、
const int maxN = 100000;
int m = 0, n = 0;
while (true) {
Ack.Add(new List<int>());
n = 0;
while (true) {
try {
if (n > maxN) throw new Exception();
if (m == 0) {
Ack[m].Add(n + 1);
} else if (n == 0) {
Ack[m].Add(Ack[m - 1][1]);
} else {
Ack[m].Add(Ack[m - 1][Ack[m][n - 1]]);
}
n++;
0197デフォルトの名無しさん
2009/03/04(水) 15:42:47Console.WriteLine("for m=" + m.ToString("0")+ " calculation is terminated at n=" + n.ToString("0") + ".");
break;
}
}
if (Ack[m].Count == 0) break;
m++;
}
ってやれば、再帰は必要ない。再帰ではなく、表の参照だと考えて、
各枡の値を計算するにはどの枡の情報が必要かを考える。
環境によってmaxNを色々変えるとベンチマークにもなるかも。
0198デフォルトの名無しさん
2009/03/04(水) 16:06:39構造上、比較の優先順構造が桁の上下に投射されているだけだという話だろ
0199デフォルトの名無しさん
2009/03/04(水) 16:14:13Default.aspxが呼ばれたときに
それがWebClientからの要求かブラウザからの要求かを
見極める方法はありますか?
WebClientからの要求がTrueでその他はFalseと判断したいです。
ブラウザプロパティを見てみると
WebCleintの場合は"Unknown"と出るんですが、
新しいブラウザが開発されたらUnknownになるかなと思ったんです。
QueryStringによる判断は不可です。
ブラウザで直打ちされたらtrueになるので。
どなたかよろしくお願いします。
0200デフォルトの名無しさん
2009/03/04(水) 16:33:000201デフォルトの名無しさん
2009/03/04(水) 16:36:26言ってることはわかるし、凄いとも思うんだが、C#のコードで表現すると
さほどシンプルでもないんじゃね。
int age = ((today.Year * 10000 + today.Month * 100 + today.Day)
- (birthday.Year * 10000 + birthday.Month * 100 + birthday.Day)) / 10000;
0202デフォルトの名無しさん
2009/03/04(水) 16:41:10「引き算」と書かれてそれを鵜呑みに信じることこそが、真の思考を放棄していないプログラマなんだな。
楽だな。
0203デフォルトの名無しさん
2009/03/04(水) 16:44:54>>188はyyyyMMddを引き算すればいいじゃんってことを言っているわけで
わざわざ>>201みたいなコード書く必要ないよ、ってことだよ。
どう考えても>>188がシンプルで >>188の勝ちであることは否めない。
君の負け。
0204デフォルトの名無しさん
2009/03/04(水) 16:46:16年未満の線形性を切り捨てる代わり、うるう年を考えなくてもいいというのが利点
0205デフォルトの名無しさん
2009/03/04(水) 16:48:170206デフォルトの名無しさん
2009/03/04(水) 16:48:46yyyyMMddをどこから持ってくるかという話でしょ。
intで定義されてるなら>201みたいな操作が必要だし、
Stringでとるならそれでもいいし。
0207デフォルトの名無しさん
2009/03/04(水) 16:53:17そんな悪態ついてないで素直になれよ。
最も合理的な解決策を見つけるのもプログラマの仕事ってことを言ってるんだろ。
それが積もってパフォーマンスに影響してくるんだからさ。
悔しいのは分かるけど、プライドでプログラムやるもんじゃない。
0208デフォルトの名無しさん
2009/03/04(水) 16:57:00int.Parse(DateTime.ToString("yyyyMMdd"))
とかでいいじゃん。Convert.ToInt32でもいいよ。
0209デフォルトの名無しさん
2009/03/04(水) 16:57:31で、コードは?
0210188
2009/03/04(水) 16:57:41なんだその糞コードは・・・
int nToday = int.Parse(today.ToString("yyyyMMdd"));
int nBirthday = int.Parse(birthday.ToString("yyyyMMdd"));
int age = nToday - nBirthday;
どうみてもシンプルだと思うが。。。
スレ住人のセンスを疑うな・・・
0211デフォルトの名無しさん
2009/03/04(水) 16:59:500212デフォルトの名無しさん
2009/03/04(水) 16:59:51そんなコードも考えられないようなお前の脳みそを疑うよ・・・
0213デフォルトの名無しさん
2009/03/04(水) 17:00:21「引き算」と言われて何も疑わず信じることが思考停止でなくてなんなんだ?
0214デフォルトの名無しさん
2009/03/04(水) 17:01:59完全にトドネト脳だな
0215デフォルトの名無しさん
2009/03/04(水) 17:02:07これだけの操作の裏で、どれだけ複雑な操作が行われているか想像できない方が
プログラマとして不適格だろ。
0216デフォルトの名無しさん
2009/03/04(水) 17:04:18必死だなお前w
「引き算」と言われて、>>143みたいに
「引き算だとうるう年とかあるからダメだぜ?分かってねぇなあ。俺みたいにきちんとやるのが正しいんだよ!」
というような、
自分のやり方が一番正しいとして他人の意見をくみ取りもしないことが思考停止って言ってんの。
0217デフォルトの名無しさん
2009/03/04(水) 17:06:43>正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。
と
>20090304 - 19870305 = 219999
はやり方が違うだけで言ってることは同じ。
下4桁の引き算がif (d1.Month > d2.Month || (d1.Month == d2.Month && d1.Day >= d2.Day)) にあたり、
その結果、単に引くだけか、-1するかの違いだからな。
0218デフォルトの名無しさん
2009/03/04(水) 17:07:490219デフォルトの名無しさん
2009/03/04(水) 17:08:04気になったら後でリファクタリングすればいい
まあある程度の規模になるなら、線形性がないという問題を抱え込んだままにしておくのは怖いが。
0220デフォルトの名無しさん
2009/03/04(水) 17:08:100221デフォルトの名無しさん
2009/03/04(水) 17:09:45だからその結果が正しいかどうかを疑わず信じろというのは思考停止だろ?
本当にそれで可能かどうか検討もせず受け入れるのが思考停止でなくてなんなんだ?
0222デフォルトの名無しさん
2009/03/04(水) 17:11:12頭悪すぎるぞこいつ・・・。
0224デフォルトの名無しさん
2009/03/04(水) 17:13:12>結果が正しいかどうかはデバッグすればわかるだろ・・・
この時点で正しいかどうか疑ってるからデバッグするわけだろ?
思考停止じゃないじゃん。
0225デフォルトの名無しさん
2009/03/04(水) 17:14:51盲目的に受け入れるほうがおかしい。
0226デフォルトの名無しさん
2009/03/04(水) 17:15:30>>194のほうがシンプルじゃないかい?
そのままだと2月29日と2月28日を比較したときに、
2月29日の時刻が比較対象より前だと間違いになるので、
(そもそも時刻成分を考慮する必要がない気がするけど念のため)
ちょっと修正して:
int ydiff = dt1.Year - dt2.Year;
if (dt1.AddYears(-ydiff).Date.CompareTo(dt2.Date) <
0) { ydiff--; }
0227デフォルトの名無しさん
2009/03/04(水) 17:18:32>年齢計算で、閏年はどうなるんだ?と考えるのは当然だよな。
うん
>盲目的に受け入れるほうがおかしい。
うん、だから「閏年を考慮したら引き算ではつじつまが合わなくなる」という
自分の意見が正しいという意見を盲目的に信じるのはおかしいよな?
0228デフォルトの名無しさん
2009/03/04(水) 17:20:16return (hoge(to) - hoge(from)) / 10000;
Func<DateTime, int> hoge = (x) => x.Year * 1000 + x.Month * 100 + x.Day;
return (hoge(to) - hoge(from)) / 10000;
たいしてかわらん。
0229デフォルトの名無しさん
2009/03/04(水) 17:21:18そこから検算してああ正しいんだなと理解すれば問題ないじゃんw
言われてはいそうですかじゃアホだろ
0230デフォルトの名無しさん
2009/03/04(水) 17:23:29初心者スレで言い合いすんなよガキだな
0231デフォルトの名無しさん
2009/03/04(水) 17:24:570232デフォルトの名無しさん
2009/03/04(水) 17:27:15計算方法が違うだけで意味はどちらも同じ
0233デフォルトの名無しさん
2009/03/04(水) 17:34:10今話題になっているのはコードの美しさと可読性だろ?
俺は少なくとも>>148と>>228みたいなコードを見比べたら、
>>228の方がデキるプログラマって感じがするけどな。
0234デフォルトの名無しさん
2009/03/04(水) 17:36:56>>148が文系プログラマ、>>228が理系プログラマですね、わかります。
0235デフォルトの名無しさん
2009/03/04(水) 17:38:55美しいなら勉強するよ!
0236228
2009/03/04(水) 17:40:31○ x.Year * 10000
プギャー(AAry
0237デフォルトの名無しさん
2009/03/04(水) 17:46:46ぼちぼち美しい
0238デフォルトの名無しさん
2009/03/04(水) 17:54:00>>228のケースでは意味がないな。違いはメソッドより効率が悪いこと。
長くなるのを避けてるだけだと思う。
0239デフォルトの名無しさん
2009/03/04(水) 18:06:02まあ>228レベルならC的関数定義の別の書式に等しい。
マ的には現代的関数型言語みたいに、ラムダ計算後にインライン化とか末尾最適化が言語で保障されているなら嬉しいけど。
0240デフォルトの名無しさん
2009/03/04(水) 18:18:54だめだこりゃ
関数がいやならC#やるな
0241デフォルトの名無しさん
2009/03/04(水) 18:31:110242デフォルトの名無しさん
2009/03/04(水) 18:48:320243デフォルトの名無しさん
2009/03/04(水) 18:54:430244174
2009/03/04(水) 18:56:15>>174のコードだと、m=0, n=int.MaxValue-1みたいなケースが計算できない
のが嫌だ。ていうかそもそもの問題は多分アッカーマン関数の表を一気に計算する
コードじゃなくって、与えられたm,nに対してアッカーマン関数の値を計算するコード。
なので、>>187のスタック使ってヒープを使って再帰する方法と、ハッシュ使って
計算済みの値を再利用する方法を組み合わせたアプローチにしてみた。値を再利用
するので、表を生成する用途でも有効。
うちの環境(メモリ1GB)では
m=0でn=int.MaxValue-1まで
m=1でn=10000000くらいまで
m=2でn=5000000くらいまで
m=3でn=20まで
m=4でn=1まで
計算できた。
スレの空気読まずにコードアップするぜ!
static Dictionary<int, Dictionary<int, int>> Ack
= new Dictionary<int Dictionary<int, int>>();
static Stack<int> argM = new Stack<int>();
static Stack<int> argN = new Stack<int>();
static int Ackermann(int m, int n)
{
argM.Clear();
argN.Clear();
argM.Push(m);
argN.Push(n);
while (argM.Count>0) {
0245174
2009/03/04(水) 18:57:14if (Ack[argM.Peek()].ContainsKey(argN.Peek())) {
argM.Pop();
argN.Pop();
continue;
} else {
int value;
if (argM.Peek() == 0) {
value = checked(argN.Peek() + 1);
} else if (argN.Peek() == 0) {
if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(1)) {
value = Ack[argM.Peek() - 1][1];
} else {
argM.Push(argM.Peek() - 1);
argN.Push(1);
continue;
}
} else {
0246デフォルトの名無しさん
2009/03/04(水) 18:58:250247174
2009/03/04(水) 19:00:46if (Ack.ContainsKey(argM.Peek()) && Ack[argM.Peek()].ContainsKey(argN.Peek() - 1)) {
n_ = Ack[argM.Peek()][argN.Peek() - 1];
} else {
argM.Push(argM.Peek());
argN.Push(argN.Peek() - 1);
continue;
}
if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(n_)) {
value = Ack[argM.Peek() - 1][ n_];
} else {
argM.Push(argM.Peek() - 1);
argN.Push(n_);
continue;
}
}
0248デフォルトの名無しさん
2009/03/04(水) 19:01:34continue;
}
}
return Ack[m][n];
}
終わり。Ackermann(3,20);あたりで速さが実感できるぜ!。
あと、>>244の「>>174のコード」ってところ、アンカーミスで>>196のコードね。
>>246
>>173を思い出してあげてください。
0249デフォルトの名無しさん
2009/03/04(水) 19:08:28struct Key { public int M; public int N; public override int GetHashCode() { return M ^ N } }
こういうのをキーにしたらDictionary<Key, int>で済むのに
0250デフォルトの名無しさん
2009/03/04(水) 19:15:09一般にはそうだろうけど、そもそも話題がアッカーマン関数だから、
mはどうせ0から5くらいまでしかとらないんだよね。だから別に
これでかまわないんじゃないかな。
あと、ハッシュ値の衝突って詳しくないんだけど、そういう衝突しまくる
ハッシュ関数って効率はどうなっているの?
0251デフォルトの名無しさん
2009/03/04(水) 20:49:39その結果の出力(文字列)を別ウィンドウに表示したいのですが、どうやればいいですか?
ファイル選択まではいいのですが、別のプログラムを起動してそいつに引数を
渡すにはどうすればよいですか?
0252デフォルトの名無しさん
2009/03/04(水) 20:51:320253デフォルトの名無しさん
2009/03/04(水) 20:52:30Process のヘルプをじっくり見る。
0254デフォルトの名無しさん
2009/03/04(水) 21:12:300255デフォルトの名無しさん
2009/03/04(水) 21:22:08別にメソッドと比べて効率悪くならないよ。
モノホンのラムダ式であるリスト構造に基づく関数定義から
実行時に動的にメソッドを生成する、なんて事は行われていない。
匿名メソッドの名前どおり、コンパイル時にコンパイラが勝手な
メソッド名を割り当ててメソッドを作る。自分でメソッド定義する
のと何も違いはない。
0256デフォルトの名無しさん
2009/03/04(水) 21:27:19最適化もできなくなるから使い方にもよるけど多かれ少なかれ確実に遅くはなる
その小さい差の意味は置いといて
0257デフォルトの名無しさん
2009/03/04(水) 21:31:18として最適化されるんじゃなくて.Invokeされちゃうの?
ちょっとリフレクタで確かめてみる。
0258デフォルトの名無しさん
2009/03/04(水) 21:39:14にアクセスできる素性の良いマクロとして利用する事がたびたびあったから、
ちょっとショック。
0259デフォルトの名無しさん
2009/03/04(水) 21:52:18P/Invokeを駆使して共有メモリ経由でやりとりする。
{Tcp,Http,Ipc}Channelクラスを使って通信する。
特定の位置にファイル作って監視させる。
アプリケーション構成ファイルを動的に書き換えて起動する。
ProcessStartInfo.Argumentsを設定してProcessオブジェクトのStartを呼ぶ。
Process.Start(string,string)を呼ぶ。
0260デフォルトの名無しさん
2009/03/04(水) 23:01:02何故難しい順に書く・・・
0261デフォルトの名無しさん
2009/03/04(水) 23:06:210262デフォルトの名無しさん
2009/03/04(水) 23:10:490263デフォルトの名無しさん
2009/03/04(水) 23:15:38C#3.0とかになっちゃうの?
今まで2005で作ったプログラムって2008でも修正可能なんでしょうか?
.NET2.0用で作ってたのが.NET3.5になっても無問題?
0264デフォルトの名無しさん
2009/03/04(水) 23:18:25> VS2005を使っているのですが2008にすると
> C#3.0とかになっちゃうの?
も、使える
> 今まで2005で作ったプログラムって2008でも修正可能なんでしょうか?
可能
> .NET2.0用で作ってたのが.NET3.5になっても無問題?
没問題
というか、.NET 3.5 って、.NET 2.0 上で動作する拡張なだけだから。
0265デフォルトの名無しさん
2009/03/04(水) 23:19:44C# 3.0 になる。
2005 → 2008 へのプロジェクトのアップグレードで失敗したって話は見たことも聞いたこともない。
.NET 2.0 が 3.5 になっても問題ない。
0266デフォルトの名無しさん
2009/03/04(水) 23:34:30今夜も試行錯誤:
Windows認証で
環境(Vista アルティメット) <= (ヴァーチャルPC Xp home)
Data Source=192.168.1.1\SQLEXPRESS
これでも
11433\OTHERINSTANCE
これでもダメでしたが
SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、
SQL Server の既定の設定がリモート接続を許可しないようになっていることが
エラーの原因である可能性があります。
(provider: TCP プロバイダ, error: 0 - 対象のコンピュータによって拒否されたため、接続できませんでした。)
セキュリティー構成は、サービスと接続のセキュリティ構成−リモート接続−ローカル及びリモート接続
●TCP/IP および名前付きパイプ・・・
にチェックは言っているんですけどねー
まだまだ頑張る・・・応援よろしく
0267デフォルトの名無しさん
2009/03/04(水) 23:49:24ただ、Windows2000は.Net2.0までしか入らないから
その辺のサポートするならVS2008にしても.Net2.0で作り続ける必要がある。
プロパティ打つのがたるいし型推論も使えない。。orz
0268デフォルトの名無しさん
2009/03/04(水) 23:53:50まず、MSSQLSMSEで、IPアドレスで接続できるかどうか試してみれよ
サーバ名にIPアドレス、認証はSQL認証で、設定したアカウントを設定しれ。
0269デフォルトの名無しさん
2009/03/05(木) 00:03:50まだまだ ど素人だな俺って・・・
0270デフォルトの名無しさん
2009/03/05(木) 00:06:210271デフォルトの名無しさん
2009/03/05(木) 00:15:47Accessとかもありじゃないでしょうか
おいらはAccess買えない貧乏仕様
定額給付でSqlServer2008でも買うか…
0272デフォルトの名無しさん
2009/03/05(木) 00:18:020273デフォルトの名無しさん
2009/03/05(木) 00:22:44無料だし、商用にも使えるし
0274デフォルトの名無しさん
2009/03/05(木) 00:23:510275デフォルトの名無しさん
2009/03/05(木) 00:25:34.NETとC#のバージョンがごっちゃになってないか?
0276デフォルトの名無しさん
2009/03/05(木) 00:29:01varはコンパイラの機能だから.NET Framework 2.0対象でも使えるはずだよ。
0277デフォルトの名無しさん
2009/03/05(木) 00:33:50なんかちょっとわかった!^^進展してないけど明日チャレンジします
ね・・・ねむけが
0278267
2009/03/05(木) 00:38:45LINQが参照できなくて色々できないあたりから
色々思考停止してる。さんくす!
0279デフォルトの名無しさん
2009/03/05(木) 00:42:06使っているかどうかだけが問題なのだと思う。
Linq to ObjectはSystem.Linq.Enumerableクラスの拡張メソッドだから
.NET3.5専用。
でも、拡張メソッド機能自体は、.NET2.0でも使える(多分)、など。
型推論も自動プロパティも匿名メソッドも全部.NET2.0で使えるんじゃないかな(未確認)。
0280デフォルトの名無しさん
2009/03/05(木) 00:46:27ラムちゃんは?
0281デフォルトの名無しさん
2009/03/05(木) 00:50:26拡張メソッドは構文糖じゃないし、専用のアトリビュートが必要なのでダメでせう
0282デフォルトの名無しさん
2009/03/05(木) 00:55:110283デフォルトの名無しさん
2009/03/05(木) 00:58:43糖衣というより、コンパイラが提供する機能と言った方が適切じゃないのか
0284デフォルトの名無しさん
2009/03/05(木) 00:58:56ありがとうございます。出来たのですが、コマンドプロンプト内に表示される出力内容を
取得できません。どうやればいいですか?
0285デフォルトの名無しさん
2009/03/05(木) 00:59:02delegate int delTest(int i);
static void Main(string[] args)
{
delTest a = i => i + 1;
Console.WriteLine(a(3).ToString());
}
は2.0で通った。
あと、Func<T>(というかSystem.Core.dll)は3.5だけどAction<T>は2.0かららしい。
0286267
2009/03/05(木) 01:02:19×var
×配列の暗黙的な初期化
○自動プロパティ
○コレクションの初期化
ラムダは試すまでもなく。
それでも.Net2.0のまま短縮できる表記が増えた!感謝!
0287285
2009/03/05(木) 01:03:39foo(this IEnumerable boo){
}
は
foo([System.Runtime.CompilerServices.ExtensionAttribute] IEnumerable boo){
}
と等価で、System.Runtime.CompilerServices.ExtensionAttributeは
3.5からなんだね。
0288デフォルトの名無しさん
2009/03/05(木) 01:07:030289デフォルトの名無しさん
2009/03/05(木) 01:07:550290285
2009/03/05(木) 01:07:58static void Main(string[] args)
{
List<int> a=new List<int>(){1,2,3,4,5};
foreach (var i in a) {
Console.WriteLine(i.ToString());
}
}
は通ったけど。
自分、279ですが、やっぱ基本的な基準は>>279でしょう。
0291267
2009/03/05(木) 01:18:45そもそもvarがローカル変数のみに有効ということを知らなかった。
メンバで試してエラーが出たのでダメと判断してた。
色々勉強になった、ありがとう。
0292デフォルトの名無しさん
2009/03/05(木) 01:21:36型推論によって型を明示しなくてもコンパイラがわかってくれるという
場合にだけ有効。
0293デフォルトの名無しさん
2009/03/05(木) 01:25:05紙で見てる分にはvarじゃ何の変数だかわからんので困らんのかな
0294デフォルトの名無しさん
2009/03/05(木) 01:30:490295デフォルトの名無しさん
2009/03/05(木) 01:31:12まあ、var にして型が何か分かりにくくなるようならやっぱ使わない方がいいと思う。
0296デフォルトの名無しさん
2009/03/05(木) 01:35:320297デフォルトの名無しさん
2009/03/05(木) 01:41:08推論型、匿名型, 暗黙型付け配列
コレクションのイニシャライザ、オブジェクトのイニシャライザ
パーシャルクラス、パーシャルメソッド
自動プロパティ、ラムダ式
.NET3.xが必要になる機能
ラムダ式でFunc<>, Expression<>を使用
LINQクエリ式他
拡張メソッド
>>281
拡張メソッドが使えないのはExtensionAttributeが3.5に含まれるから。
という事で、System.Runtime.CompilerServices.ExtensionAttributeを自分で定義してやれば2.0でも使える。
インテリセンスにゃ出ないけど、まぁそのくらいは我慢できるだろう。
0298デフォルトの名無しさん
2009/03/05(木) 01:45:39ぶっちゃけSystem.Core.dllをローカルコピー=trueにして参照しちゃえば良いんじゃ・・・
0299デフォルトの名無しさん
2009/03/05(木) 02:01:05なんで必死なのかわからない
0300デフォルトの名無しさん
2009/03/05(木) 02:10:52なんで必死なのかわからない
0301デフォルトの名無しさん
2009/03/05(木) 02:16:06>>300
これだから文系は
0302デフォルトの名無しさん
2009/03/05(木) 02:22:34なんで必死なのかわからない
0303デフォルトの名無しさん
2009/03/05(木) 02:34:480304デフォルトの名無しさん
2009/03/05(木) 02:36:070305デフォルトの名無しさん
2009/03/05(木) 02:41:100306デフォルトの名無しさん
2009/03/05(木) 02:41:58なんで必死なのかわからない
0307デフォルトの名無しさん
2009/03/05(木) 02:51:15これだから文系は
0308デフォルトの名無しさん
2009/03/05(木) 02:51:58なんで必死なのかわからない
0309デフォルトの名無しさん
2009/03/05(木) 02:53:10↓文系
0310デフォルトの名無しさん
2009/03/05(木) 02:59:54なんで必死なのかわからない
0311デフォルトの名無しさん
2009/03/05(木) 03:00:42ファイルのパス名に空白が含まれるときは、どうすればいいですか?
0312デフォルトの名無しさん
2009/03/05(木) 03:08:23ダブルクォーテーション?
↓文系
0313デフォルトの名無しさん
2009/03/05(木) 03:09:15なんで必死なのかわからない
0314デフォルトの名無しさん
2009/03/05(木) 03:15:02こんな感じ。
String s = OpenFileDialog.FileName;
ProcesStartInfo.Arguments = s;
こうやって、ProcessをStartすると、ファイル名のパスに空白があるとそこで引数が終わりと判断されてしまいます。
0315デフォルトの名無しさん
2009/03/05(木) 03:24:460316デフォルトの名無しさん
2009/03/05(木) 03:26:11なんで必死なのかわからない
0317デフォルトの名無しさん
2009/03/05(木) 03:27:350318デフォルトの名無しさん
2009/03/05(木) 03:28:59やってみたら、Visual Studioの作業ディレクトリ+"s"というファイル名
をオープンしようとして失敗する、という結果でした。
0319デフォルトの名無しさん
2009/03/05(木) 03:30:49>>317のように、文字列として括れってこと
0320デフォルトの名無しさん
2009/03/05(木) 03:31:21なんで必死なのかわからない
0321デフォルトの名無しさん
2009/03/05(木) 03:31:28できました!
なるほど、そうやるんですか。
ありがとうございました。
0322デフォルトの名無しさん
2009/03/05(木) 03:34:040323デフォルトの名無しさん
2009/03/05(木) 03:35:05なんで荒らしがわいてんのかわからない
0324デフォルトの名無しさん
2009/03/05(木) 03:36:49自称エレガントな解法を示したつもりが、
誰にも相手にされなかった可哀想な一般人らしい
0325デフォルトの名無しさん
2009/03/05(木) 03:38:30なんで必死なのかわからない
0326デフォルトの名無しさん
2009/03/05(木) 03:41:02とりあえずNG登録だな
番号飛ぶけど
0327デフォルトの名無しさん
2009/03/05(木) 03:42:190328デフォルトの名無しさん
2009/03/05(木) 03:44:140329デフォルトの名無しさん
2009/03/05(木) 03:45:51>>326
>>327
>>328
これだから文系は
0330デフォルトの名無しさん
2009/03/05(木) 03:48:550331デフォルトの名無しさん
2009/03/05(木) 03:51:500332デフォルトの名無しさん
2009/03/05(木) 07:26:57どうしたらいいのですか?
0333デフォルトの名無しさん
2009/03/05(木) 09:37:280334デフォルトの名無しさん
2009/03/05(木) 10:08:16というかクリックして閉じないとか・・・どうやって閉じるんだ?
Windowsライクな実装の方が使い手も違和感ないと思うんだけど?
0335デフォルトの名無しさん
2009/03/05(木) 11:03:210336デフォルトの名無しさん
2009/03/05(木) 11:23:00DataTableの更新が終わるまで描画処理を止めたいのですが、
ListBoxで言うところのBeginUpdate()のようなメソッドってありますか?
0337デフォルトの名無しさん
2009/03/05(木) 11:43:50RaiseListChangedEventsプロパティで一時的にイベント通知無効化して
最後にResetBindingsで更新
0338デフォルトの名無しさん
2009/03/05(木) 11:56:13ありがとうございます。試してみます。
0339デフォルトの名無しさん
2009/03/05(木) 11:58:30varの最強の用途は、コレクションの要素の型が分かりづらい場合だろう。
例えば、Dictionaryはキーとアイテムの型パラメタ<foo,bar>をとるけど、
要素型はKeyValuePair<foo, bar>。
そこで、まず、
foreach(var a in dic){
}
って書いてvarにマウスポインタを当てる。すると、ツールチップでaの型が
出てくる。この場合KeyValuePair<foo,bar>。それを書き写して
foreach(KeyValuePair<foo,bar> a in dic){
}
とする。これが最強。
varの存在意義を語って存在意義を否定してしまった。
0340デフォルトの名無しさん
2009/03/05(木) 12:00:30あれって良し悪しだよな・・・・
0341デフォルトの名無しさん
2009/03/05(木) 12:02:580342デフォルトの名無しさん
2009/03/05(木) 12:04:14グッドアイデア!
0343デフォルトの名無しさん
2009/03/05(木) 12:05:150344デフォルトの名無しさん
2009/03/05(木) 12:05:530345デフォルトの名無しさん
2009/03/05(木) 12:08:210346デフォルトの名無しさん
2009/03/05(木) 12:10:28? total = 0m;
という入力を許可し、;を入力した段階でIDEが?を推論した型に置き換える。
上の例だと、自動的に
decimal total = 0m;
に置き換わる。駄目?
0347デフォルトの名無しさん
2009/03/05(木) 12:14:06その場に応じて使い分けるというのがどうしてもしづらいんだよな
var total : decimal = 0m;
はじめからこういうスタイルにしとけば型を省略しても誰も違和感を抱かなかった
今作り直したらこうなりそう
0348デフォルトの名無しさん
2009/03/05(木) 12:16:44で、:を入力した時点でInteliSenseが働くと。
でも、そこを弄ったらもう、"C"#じゃないんじゃ。
0349デフォルトの名無しさん
2009/03/05(木) 12:20:23IDEの入力支援頼みでコードを英語の文章に近付けるのが流行だから、
var total as decimal=10m;
で行こう。あれ?どっかで見たことあるぞ。
0350デフォルトの名無しさん
2009/03/05(木) 12:23:23閣下、我々の陰謀は成功を収めつつあります。
0351デフォルトの名無しさん
2009/03/05(木) 12:24:48CスタイルのメリットはCやJavaと同じであることくらい
0352デフォルトの名無しさん
2009/03/05(木) 12:29:11って、
Animal dog;
でしょ?どう考えても英文法的におかしい。やっぱり、英文との類似性
よりも構文の単純さやキーワードの短さが尊ばれた時代の名残だよね。
0353デフォルトの名無しさん
2009/03/05(木) 12:33:53英単語的には怪しかったりする。やっぱキーワードはvarで。
0354デフォルトの名無しさん
2009/03/05(木) 12:36:43今はIDEがあるのだからvarもvariableにするべきだ
0355デフォルトの名無しさん
2009/03/05(木) 12:40:500356デフォルトの名無しさん
2009/03/05(木) 12:47:220357デフォルトの名無しさん
2009/03/05(木) 12:50:52let the name of the dog be "ポチ".
0358デフォルトの名無しさん
2009/03/05(木) 12:50:54dear my computer
0359デフォルトの名無しさん
2009/03/05(木) 12:57:28myDog.name="ポチ";
と以下が等価ってわけですね。こんなのの入力もIDEの支援で余裕だぜ!
Dear my computer. Can you please define a variable myDog
which is an Animal and let it be a new instance of Animal
whose speciesName is "dog". And then please let the name
of the myDog be "ポチ".
0360デフォルトの名無しさん
2009/03/05(木) 13:03:34a d = n a("d")
d.n = "ポ"
0361デフォルトの名無しさん
2009/03/05(木) 16:10:120362デフォルトの名無しさん
2009/03/05(木) 16:28:10とても一種とはいえない
0363デフォルトの名無しさん
2009/03/05(木) 16:36:58ないと思う。とりあえず、C++のサブセットでもスーパーセットでもない。
シンタックスがC由来の別物言語と捉えるべき。
それに、Cを拡張して言語仕様を肥大化させてオブジェクト指向を取り入れる
C++的なアプローチとは違い、JAVAを意識した自由度より構造性を優先させた
言語になっている。そのために、JAVA的な、やりたい事に対して解法が唯一つ的
な部分がある。
のわりに、P/Invokeなど泥臭いアプローチをしてでも自由度を確保する貪欲さもあって、
やりたい事ができないという事態も滅多に生じないようになっている。
良い所だけ挙げるならば、こんな感じでバランスの取れた構造的な言語。
プリプロセッサで変態マクロが定義できるC++なんか、もう見たくもないやい。
0364デフォルトの名無しさん
2009/03/05(木) 16:53:350365デフォルトの名無しさん
2009/03/05(木) 16:55:21名前空間で分けたらそれでも衝突して、調べて見たらマクロ定義
だった時の憤りといったら・・・
0366デフォルトの名無しさん
2009/03/05(木) 16:57:390367デフォルトの名無しさん
2009/03/05(木) 18:34:260368デフォルトの名無しさん
2009/03/05(木) 18:38:310369デフォルトの名無しさん
2009/03/05(木) 18:39:260370デフォルトの名無しさん
2009/03/05(木) 19:01:25y= Math.Ceiling (x / 10) * 10;
と書いてるんですが他にいい書き方とかありますか
括弧の使い方とかなんか不安なんですが・・・
0371デフォルトの名無しさん
2009/03/05(木) 19:29:09>>210をリスペクトして
y = Int32.Parse(String.Format("{0:d}0", (x + 9) / 10));
とか。
(ごめん、冗談だ、念のため。別に>>370の通りで問題ないよ)
0372デフォルトの名無しさん
2009/03/05(木) 19:35:17っていうか整数なら9足すだけなんだけど。。
さて質問。
Windows Form のOnLoadとか適当な場所に
DayOfWeek[] ar = (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek));
listBox1.DataSource = ar;
comboBox1.DataSource = ar;
のようなコードを書くと、コンボボックスとリストボックスの選択が相互に
連動するんだけど、この仕組みと、こういう仕様の意図が知りたい。
0373デフォルトの名無しさん
2009/03/05(木) 19:46:27GUIなんてデータ表示するだけなんだからわざわざTextだのItemsだの使うより
データを汎用的な形で関連付けられた方がいいよねという考え
カレント行の共有はCurrencyManager使ってコントロールの親子関係に基づいて行われる
0374デフォルトの名無しさん
2009/03/05(木) 19:54:30ごめん、その思想自体はよくわかるんだけど、知りたいのは
2つのまったく無関係のコントロールの選択されているアイテムが連動する仕組みと、
そのような仕様にしてある意図なんだ。
0375デフォルトの名無しさん
2009/03/05(木) 19:56:20WPFの場合
DayOfWeek[] ar = (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek));
list1.DataContext = ar;
list1.SetBinding(ListBox.ItemsSourceProperty, "");
list2.DataContext = ar;
list2.SetBinding(ListBox.ItemsSourceProperty, "");
だと選択行は共有されないね。
0376デフォルトの名無しさん
2009/03/05(木) 22:41:17>varを右クリックして「実際の型名に置換」とかできたら、バリバリ使っちゃう。
それ似たのがReSharperにあるよ。
0377デフォルトの名無しさん
2009/03/05(木) 22:42:44僕らはC#に汚染されているんだ!
0378デフォルトの名無しさん
2009/03/05(木) 22:46:21ReSharperはVS用のアドインだよ。確か。
まあこちとら趣味プログラマのexpress edition使い。
たっかいツールなんか使う機会なんざねーんだけどね。
0379デフォルトの名無しさん
2009/03/06(金) 00:03:40ダメポ 続きは明日・・・・
0380デフォルトの名無しさん
2009/03/06(金) 00:09:08C:\Program Files\Microsoft SQL Serverの配下ですか?
自分で作ったC:\aaaみたいなフォルダでもいいんですかね・・・・
0381デフォルトの名無しさん
2009/03/06(金) 00:21:34SQLサーバが自分のPCとは異なるPCにある場合、
c:\とか、ファイルを直接指定することはないよ。
接続する側→(LAN)→接続されるSQLServer
という関係で接続しているとき、
接続する側は、単に接続されるSQLServerのIPアドレス(とインスタンスと接続するDB名)を指定するだけ。
実際の物理ファイルのパス指定は接続されるSQLServerのほうで指定するので、
ConnectionStringでパスを指定することはない。
少なくとも自分が経験したスタンドアロンのSQLではそんな感じ。
0382デフォルトの名無しさん
2009/03/06(金) 00:24:32Web画面上にあるボタンをクリックするとクリックイベントが走りますよね。
でもWebだとクリックイベントの前にPage_Loadイベントが実行されますよね。
ちょくせつクリックイベントに飛ばす方法はないのでしょうか?
またPage_Loadイベントの処理の中で、Page_Loadイベントを抜けたら
次はクリックイベントが走るよというのを知る方法はありますか?
0383デフォルトの名無しさん
2009/03/06(金) 00:52:34初期化したいのに、PostBackしたときもPage_Loadが呼ばれるから、
ボタンを押した時はPage_Loadは呼んで欲しくないということだろうけど、
そのためのIsPostBackだから、それで判断すればいいのでは?
ASP.NETの場合は、表示するたびに、そのページの新しいインスタンスが生成される。
これはwebという仕組み上仕方のないことなので、Page_Loadを実行せずに
インスタンスが生成する方法は基本的にはない。
クリックイベントが発生するということは、IsPostBackが必ずTrueだから、
それで判断すれば?
・・という意味でなかったら、contextとかみれば、イベントがあるかどうか
わかったほうほうがあるはず・・
0384デフォルトの名無しさん
2009/03/06(金) 10:01:27無関係じゃないよ。同じ親コントロールに属して同じデータソースを参照してるじゃん。
無関係だと主張したいなら明示的にしないとだめ(Control.BindingContextプロパティ)。
仕組みはCurrencyManagerとかBindingManagerBaseとか調べれ。
意図? MSの人じゃないから答えられん。
まあ親とデータソースが同じなら現在行共有できた方が便利じゃねと思ったんじゃない?
.NET 2.0になってBindingSourceが追加されてデータソース主導になったけどな。
0385デフォルトの名無しさん
2009/03/06(金) 11:57:01ダウンロードする前に知りたいのです。
0386デフォルトの名無しさん
2009/03/06(金) 12:00:40取得方法はそのファイルがどういうプロトコルで公開されているのかによるからなんとも
サイズ情報が公開されているかどうかはサーバ次第だからなんとも
0387デフォルトの名無しさん
2009/03/06(金) 12:04:250388デフォルトの名無しさん
2009/03/06(金) 15:00:26駄目な場合もあるけど
0389デフォルトの名無しさん
2009/03/06(金) 17:33:22うまいこと使用している例や、より利点がわかりやすく紹介されている
サイトがあったら教えてください教えてください。
0390デフォルトの名無しさん
2009/03/06(金) 17:43:46宿題?
0391デフォルトの名無しさん
2009/03/06(金) 17:49:540392デフォルトの名無しさん
2009/03/06(金) 18:06:45定義に使うけど、推奨はできないなあ。
Button1.Click+=delegate{MessageBox.Show("Clicked!");};
とか。
処理の一部をカスタムできるメソッドを作るために使う例を
示せれば良いんだけど、できるだけLINQとか標準機能に落とし
込むようにしているので良い例がない。
ジェネリクスはやっぱり、独自のコレクションを作るとかが
多いんじゃない?
あと、幾つかデータの種類があって、それらのデータが更新された
時に更新値を受け取るコールバックを登録するメソッドが、
データの型をパラメタにとるジェネリックメソッドになっていた
のを見た事ある。でもこの場合、データの種類毎にメソッドを
用意するのと比べた場合の利点がさっぱり分からないコードだった。
0393デフォルトの名無しさん
2009/03/06(金) 18:17:460394デフォルトの名無しさん
2009/03/06(金) 19:08:52宿題ではないです。
>>391
MSDNではサンプルが少ないのと、こういう時に使うと便利というのが、
イマイチよくわからないので。イベント的なコールバック用途というのは
意味はわかります。
>>392
ありがとうございます。
なるほど。自分も匿名メソッドにあまり利点を見いだせない一人です。
そのためサンプルがみたいと思ったのですが、
いいものがないということで残念です。
ジェネリクスもやはり独自コレクションがメインですか・・
コレクション以外の便利な使い方がイマイチ思いつかないので、
サンプルをお聞きしました。
0395デフォルトの名無しさん
2009/03/06(金) 19:30:11それは特殊でかつ有用な使い方なんじゃないかな。
0396デフォルトの名無しさん
2009/03/06(金) 20:34:37必要に迫られたら使えばいい程度のものじゃないかね
0397デフォルトの名無しさん
2009/03/06(金) 21:38:25結局はコレクション操作だから微妙だけどな
くだらない例だけどEventHandler<TEventArgs>とか
0398デフォルトの名無しさん
2009/03/06(金) 21:49:34//aを使った固有の処理
共通の後処理(a);
こういうのが各所に出てきたから
void 共通の処理(Action<Hoge> action) { Hoge a = 共通の前処理(); action(a); 共通の後処理(a); }
こんなメソッドを定義して
共通の処理(a => { /*aを使った固有の処理*/ });みたいにしたことがある
0399デフォルトの名無しさん
2009/03/06(金) 21:56:13・とくめいめそっど
Win Forms やら WPF の非同期部分で大活躍?
・じぇねりくす
基本、型を爆発させないためにある。これを踏まえると
Func<T> とかなかなかに便利な使い方じゃないか?
0400デフォルトの名無しさん
2009/03/06(金) 22:02:27これだけで型ごとに対応するインスタンスのキャッシュが作れる
Dictionary<Type, Hoge>使うよりも遥かに効率がいい
Comparer<T>.DefaultやEqualityComparer<T>.Defaultなどで使われてるパターン
0401デフォルトの名無しさん
2009/03/06(金) 22:19:30こういう使い方って何でするんですか?
デザイン画面でボタンをダブルクリックするとクリックイベントのソースが出てきますが
そこにMessageBox.Show("Clicked");って記述すればいいと思っちゃうんだけど
わざわざこのように書く理由を教えてください。
0402デフォルトの名無しさん
2009/03/06(金) 22:21:190403デフォルトの名無しさん
2009/03/06(金) 22:21:480404デフォルトの名無しさん
2009/03/06(金) 22:22:190405デフォルトの名無しさん
2009/03/06(金) 22:24:25何でこんな機能つけたんだ。
0406デフォルトの名無しさん
2009/03/06(金) 22:26:37ラムダ式で同じことがもっと簡潔に書けるから匿名メソッドは不要になった
そのうち非推奨だとコンパイラが警告出すようになってもおかしくない
0407デフォルトの名無しさん
2009/03/06(金) 22:28:19状態をどこかのメンバ変数に保存して、同じメソッド内でメンバ変数の値によって分岐させるより、
処理そのものを差し替える感じ。
特に汎用できて処理を委譲できる場合なら尚更。
0408デフォルトの名無しさん
2009/03/06(金) 22:30:25Click += (sender, e) => { MessageBox.Show("Clicked!") };
と書くべき
匿名メソッドと違って引数省略できないのが時々不便に感じるけど
0409デフォルトの名無しさん
2009/03/06(金) 22:52:26感じに使うのかわかる気もするが…あえてイベントハンドラなら
一時オブジェクトに使う。WebClient とか
0410デフォルトの名無しさん
2009/03/06(金) 22:55:40デバッグ用途で一時的に作ったようなボタンなんかだと、
それ用のイベントハンドラも短くなりがちになる。そこで、
Loadedイベントハンドラだけはxamlエディタで定義&割り当て
をしてもらって、そのLoadedイベントハンドラの中で
Button1.Click+=delegate{MessageBox.Show("Clicked!");};
って書いた方がゴミメソッドが増えなくて見やすいんだよね。
まあでも、書いたとおり、推奨はできない。
ただ、ある程度複雑なプログラムを書くと、デザイナもxamlも
あまり頼りにならなくて、コードでGUIをアレコレする必要が
出てくる場面は頻繁にある。特に動的な処理が必要な場合。
例えば、StackPanel1の子にButton1がなっているとして、
Button1のClickイベントハンドラで
Button1.IsEnabled = false;
Button Button2 = new Button() { Content = "Click Me!" };
Button2.Click += delegate {
Button1.IsEnabled = true;
StackPanel1.Children.Remove(Button2);
};
StackPanel1.Children.Add(Button2);
こんなの。これだと、Button2のVisiblityなりIsEnabledなり
をいじるイベントハンドラを書く方が自然なのでちょっと
人為的かな。
0411デフォルトの名無しさん
2009/03/06(金) 22:59:54初心者が混乱するよ
0412410
2009/03/06(金) 23:06:04むしろ、その引数を省略できるという性質があるために、
引数を必要としないイベントハンドラの定義にはdelegate{}を
使っている。推奨はしない。あんまり、
void foo(object sender, EventArgs e){...}
みたいなのが増えるの好きじゃないんだよね、個人的に。
そんなわけだからイベントハンドラをメソッドとして作る場合にも
void Button1_Clicked(){
MessageBox.Show("Clicked!");
}
と引数なしのメソッドを書いて
Loadedイベントハンドラの中とかで
Button1.Click+=delegate{Button1_Clicked();};
とか書く事すらある。これも推奨はできない。
0413410
2009/03/06(金) 23:08:40void 処理1(){
ほにゃらら
}
void 処理2(){
ほにゃらら
}
みたいな処理の単位であるメソッドがあって、それをボタンから
呼び出させる場合。
Button1.Click+=delegate{処理1();処理2();};
みたいに書く。
VBでもWindows FormsでもWPFでも、
入門書に書いてある事を実践すると、イベントハンドラに
何でも書くスタイルを身に着けてしまう人が多いけれど、
本来は処理を適当な粒度で分割したメソッドを定義して、
イベントハンドラはそれらを呼び出すだけの簡潔なもので
あるべき。
Model-Viewスタイルとか良くは知らない趣味プログラマだけど、
こんな感覚でやっています。
0414デフォルトの名無しさん
2009/03/06(金) 23:10:40デザイナでイベントハンドラ追加するのがちょっとだけ面倒だったり
動的にコントロールを追加することが多かったり
基底クラスのイベントでもオーバーライドじゃなくてイベントハンドラ使うことが多かったりするから
Button1.Click+=delegateみたいなことは比較的よくやる
0415410
2009/03/06(金) 23:18:53を用いて処理を委譲する時の一番の利点は文句なしに「継続」だった。
でも、LINQ以外でうまい例を作れないや。
とりあえず、
void Sum10(){
int s=0;
for(int i=1;i<=10;i++){
s+=i;
}
Button1.Click+=delegate{
MessageBox.Show(s.ToString());
}
}
ってやって、どこかでSum10()を呼び出すと、Sum10からは
ちゃんと処理が戻るんだけど、その後Button1をクリックすると
sの値55が表示される、って事を知っておいて。
匿名メソッドで一番重要なのはこれなんだけど、脇に逸れ過ぎた。
非同期処理なんかをする場合には超超超〜重要なはずなので
誰か例を書いてくれ。
0416デフォルトの名無しさん
2009/03/06(金) 23:29:48>>415の中でs++したりするとわけがわからなくなる(サンプルとしては面白いけどね)
ローカル変数を取り込めるメリットは,>>398のようなパターンが自然に使えること
0417デフォルトの名無しさん
2009/03/06(金) 23:36:52一カ所直すのにも不要なものが目に付いて頭がグワングワンしてきます。
プロパティ、イベント、その他のメソッドという分類でファイル分割しようと思ってるんだけど、君らはどうしてるの?
0418デフォルトの名無しさん
2009/03/06(金) 23:40:420419410
2009/03/06(金) 23:45:31とりあえずUIの話の続きとして「継続」の利点を書いておくと
UI以外のスレッドで何か計算して、その結果を用いてUIを更新する場合、
匿名メソッドを使うのが一番素直に書ける。コードの流れがぶった切ら
れない的な意味で。
例えば
//UIと別スレッド
while(円周率の計算精度>閾値){
円周率の計算の途中経過をtempPiに代入
Window1.Dispatcher.Invoke((MethodInvoker)()=>{
Window1.Label1.Content=tempPo.ToString();
});
}
こういう場合にメソッド定義とInvokeの引数ありバージョンを使っていたら
訳がわからなくなる。
>>417
自分の場合は#region-#endregionで
・変数定義とコンストラクタ
・プライベートメソッド
・パブリックなメソッドとプロパティ
・(あれば)カスタム可能なメソッド、プロパティ
と分けている。Ctrl+M-M, Ctrl+M-O等のショートカットは知っておくと吉。
0420デフォルトの名無しさん
2009/03/06(金) 23:51:42> 本来は処理を適当な粒度で分割したメソッドを定義して、
> イベントハンドラはそれらを呼び出すだけの簡潔なもので
> あるべき。
理念的にはその通りだと思うんだけど、若干反発も感じるのは
その基本に忠実な書き方をすると、ベタにイベントハンドラに書いた場合と比べて
「その処理」がイベントハンドラからのみ実行される処理だという明示性が
失われるんだよね。
0421デフォルトの名無しさん
2009/03/06(金) 23:59:16多分、その、”「その処理」がイベントハンドラからのみ実行される”
という事を前提としたコーディングが、設計の柔軟な変更などを将来的に
阻害してしまう、っていうのが、Model-View-Controlerモデルとか
その派生系とかが繰り返し提案される理由なんじゃないかな。
シンプルなプログラムだと却って変な事になってしまう事が多いのも
確かだと思うけど。
0422419
2009/03/07(土) 00:09:11てみた。あと、MethodInvokerはWindows Formsのだから(デリゲート
だからシグネチャが正しいので通るけど)よくなかったのでActionにして
みた。このコードは、はじめのお題の、匿名メソッドの利用例としては、
”良い”利用例だと思う。他の方法だとめちゃめちゃごちゃごちゃになる。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Thread sum100Thread = new Thread(new ThreadStart(sum100));
sum100Thread.Start();
}
private void sum100()
{
int s = 0;
for (int i = 1; i <= 100; i++) {
s += i;
this.Dispatcher.Invoke((Action)delegate{
this.Label1.Content = s.ToString("0000");
});
}
}
xamlは
<Window x:Class="WpfApplication1.Window1" ほにゃらら
Loaded="Window_Loaded">
<Label Name="Label1"/>
</Window>
だけ。
0423デフォルトの名無しさん
2009/03/07(土) 00:30:280424423
2009/03/07(土) 00:33:360425423
2009/03/07(土) 00:52:09匿名メソッドは現在のスコープの変数そのものを取り込むんだ
ループ内で生成される全ての匿名メソッドが同一のsを参照してるから
ただ一つのsのインスタンスを共有することになる
ループの中でint ss = s;みたいに宣言し直してそっちを取り込むようにしないとだめ
0426デフォルトの名無しさん
2009/03/07(土) 00:56:32コンピュータが速過ぎるんじゃない?
こういう、継続を必要とするデリゲートの場合
インナークラスが暗黙に定義されて、それがメソッドと
フィールドを持っている。デリゲートのインスタンス作成時には
このインナークラスのインスタンスが作成されて、フィールドに
必要な変数がコピーされる。これが参照型だと話がまたややこしく
なるけれど、値型ならば問題はないはず。
0427デフォルトの名無しさん
2009/03/07(土) 01:02:18一つしか作られないよ。IL見ればわかる。
何でうまくいくのかは知らないけど意味的には確実に間違ってる。
0428デフォルトの名無しさん
2009/03/07(土) 01:12:10なんじゃこのオチ。
0429デフォルトの名無しさん
2009/03/07(土) 01:24:190430428
2009/03/07(土) 01:45:16private void sum100()
{
int s = 0;
for (int i = 1; i <= 100; i++) {
s += i;
int s_ = s;
this.Dispatcher.BeginInvoke((Action)delegate{
this.Label1.Content = s_.ToString("0000");
});
Thread.Sleep(0);
}
}
としてみたら希望通りの動作になったんだが、
Thread.Sleep(0);
をコメントアウントすると、最後の5050しか表示されないんだけど、
ディスパッチャスレッドの優先度って低いの?
0431デフォルトの名無しさん
2009/03/07(土) 02:02:540432デフォルトの名無しさん
2009/03/07(土) 02:03:06ループもっと長くしろよ
0433デフォルトの名無しさん
2009/03/07(土) 02:06:09ところで>>155さんのIPアドレスってつなぎたいSQL SERVERのPcでコマンドプロンプトIPCONFIGででる
IP アドレスですか?
おれは一体何週間これをやってるんだろうか
いろんなスレ放浪して迷惑掛けまくりで
>>170 SQL Serverのポート番号は Express Edition場合動的で コンフィグレイションマネージャーで固定する遺体です
0434デフォルトの名無しさん
2009/03/07(土) 02:12:48まず、SQLSMSEで接続できるのか確かめなさいってば。
できた?
0435デフォルトの名無しさん
2009/03/07(土) 02:17:550436デフォルトの名無しさん
2009/03/07(土) 02:19:38SQLServer認証で、
設定したログイン名とパスワードで接続できる?
0437デフォルトの名無しさん
2009/03/07(土) 02:28:35ファイル−オブジェクトエクスプローラで接続を選択
サーバー名を
コマンドプロンプトipconfigで得たipV4のアドレスを入れる
認証を:SQL Server認証する
ログイン:コントロールパネルのシステムにでてるフルコンピュータ名
パスワード:パソコンにログインするパスワード
でやったら・・・だめでした・・・
どこが違うのでしょう?
0438デフォルトの名無しさん
2009/03/07(土) 02:31:240439デフォルトの名無しさん
2009/03/07(土) 02:33:17同じバイナリを実行したときにwindows XPでは透明部分をクリックするとその背後にある別のアプリケーションをクリックすることができます。
windows vistaでは透明な部分をクリックするとそのフォームをクリックします。
vistaでxpと同様にするためにはどうすればいいでしょうか?
0440デフォルトの名無しさん
2009/03/07(土) 02:34:25SQL Server認証は、SQL Server自体に設定する、
Windows認証(パソコンのコンピュータ名と、パソコンにログインするパスワード)とは別。
SQL ServerにSQL Server認証用のアカウントを別途設定して、
そのアカウントでログインする必要がある。
Windows認証でログインするのは、なんていうのかな、
アクティブディレクトリとか組んで、社内のネットワークに接続するのに必要な認証のことで、
それを認証の変わりと見なすってこと。
(SQLとネットワークの両方で認証したら面倒だから、ネットワークにログインする認証を
ユーザとして認めるっていうこと。Windows認証で今自分のアカウントで接続できるのはそういうこと。)
今は普通に家で勉強しているような感じだと思うので、
ネットワーク越しに接続するのにはWindows認証は関係ない。
0441デフォルトの名無しさん
2009/03/07(土) 02:43:13MS server management studio expressで設定するのでしょうか?
0442デフォルトの名無しさん
2009/03/07(土) 02:45:14付きあわえて申し訳ない
もう少しググッテみます
でわっ
0443デフォルトの名無しさん
2009/03/07(土) 02:45:52和を取るの100000までににしてみたら、ずっとマウスポインタが砂時計に
なって、最後の結果だけが表示された。
タイムスライスってそんなに長いの?数10ms単位で切り替わるんじゃないの?
0444デフォルトの名無しさん
2009/03/07(土) 02:48:48SQL SMSEの左ペインのツリービューで、セキュリティ−ログインから設定する。
ログインを右クリして、新しいログインを作って、ログイン名を入力して、
SQL Server認証を選択して、パスワードを設定する。
さっきのリモートでのSMSEの接続には、ここで設定したSQL Server認証の
ログイン名とパスワードを設定すると接続できるということ。
バーチャルPCは、あなたのPCとは別のPCだから、
あなたのPCにログインするアカウントで、バーチャルPC内のSQLに接続はできないということ。
ただし、あなたのPCにインストされてるSQLServerは、あなたのPCにログインしているユーザを
SQLServerのユーザとしても認める設定をしているので、自分のPCのアカウントでも
ログインできましたってこと。
0445デフォルトの名無しさん
2009/03/07(土) 03:03:59Ipv6じゃないと だめなのかな?
0446デフォルトの名無しさん
2009/03/07(土) 03:07:40V4V6同様に下記エラー
Microsoft SQL Server、エラー: 18452
444さんの通り新しいログイン作ったんですが
ミスったかな
試行錯誤してきます
0447デフォルトの名無しさん
2009/03/07(土) 03:09:37SQL Server認証で通らないのなら、なんかの設定がおかしいんでしょ
バーチャルPCのファイアーウォール機能が働いていて、そもそも接続できないとか、
SQLの設定でTCP/IPの接続をそもそも許可していないとか、考えるときりがない。
0448デフォルトの名無しさん
2009/03/07(土) 03:11:16その前にバーチャルPC上のSMSEで、そのSQLServerのアカウントでログインできる?
サーバ名に、そのバーチャルPCに割り当てられたIPアドレスを入力して。
0449デフォルトの名無しさん
2009/03/07(土) 03:14:55>>448 ハイ ちょいとおまちを
0450デフォルトの名無しさん
2009/03/07(土) 03:21:14ごめん
0451デフォルトの名無しさん
2009/03/07(土) 03:23:03どうやってアカウントを設定できるんだ?
0452デフォルトの名無しさん
2009/03/07(土) 03:29:38環境(Vista アルティメット(SMSEあり) <= (ヴァーチャルPC Xp home (SMSEなし))
0453デフォルトの名無しさん
2009/03/07(土) 03:35:08UltimetのSMSEから接続できないでしょうよ
VirtualPCは、まったく別のところにあるPCだと思わなきゃだめよ
0454デフォルトの名無しさん
2009/03/07(土) 03:44:49VirtualPCのPGからUltimetのフォルダにあるMDFにコネクトしたいので・・・
うーん
VirtualPC側にアカウント必要なんですか?
0455デフォルトの名無しさん
2009/03/07(土) 03:46:06もう少し頑張る気力がわきました
0456デフォルトの名無しさん
2009/03/07(土) 04:00:160457デフォルトの名無しさん
2009/03/07(土) 04:01:38SMSEをクライアントにみかけて、
TCP/IP経由でSQLServerに接続するテストをしてみなっていってるわけだから、
その例で言えば、VirtualPCのSMSEでUltimetのSQLServerに接続するってこと。
だから、設定用のSMSEと、接続実験用のSMSEの両方ないとだめでしょうよ。
UltimetにだけしかSMSEがないということは、UltimetのSQLServerにアカウント設定してたわけで、
それでUltimetからVirtualPCのSQLServerに接続できるわけないでしょ。
やってることが、どうもちぐはぐだな。
0458443
2009/03/07(土) 04:35:32ディスパッチャのノーマルプライオリティのキューが一杯になってしまって、
和を取っているスレッドの処理が終わってからようやくキュー内の処理が
全て完了する、という形になっていたためでした。ディスパッチャスレッド
での処理の優先順位を下げる事で、ディスパッチャがキュー内の処理を全部
やっつけようとせず、順次こなしていくようになりました。
ディスパッチャスレッドでの処理の優先順位を上げなければならないと
全く逆に勘違いして大はまりしてしまった。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Thread sum100Thread = new Thread(new ThreadStart(sum100));
sum100Thread.Start();
}
private void sum100()
{
int s = 0;
for (int i = 1; i <= 100; i++) {
s += i;
int s_ = s;
this.Dispatcher.BeginInvoke((Action)delegate {
this.Label1.Content = s_.ToString("0");
}, DispatcherPriority.Background, null);
}
}
これでようやく、UIを非同期的に更新する処理を匿名メソッドの
「継続」の利点を生かして簡潔に書く例になりました。
0459デフォルトの名無しさん
2009/03/07(土) 04:39:04切り替わっても Dispatcher キュー処理するほうが時間かかってる
だけだろそれ。WPF は基本保持モード
0460デフォルトの名無しさん
2009/03/07(土) 05:36:38そうです。マウスポインタが砂時計に変わることから、ようやく、
これ、UIスレッドの方が滞っているんじゃん、と気が付けました。
0461デフォルトの名無しさん
2009/03/07(土) 06:27:10引数いらないなら、こっちの方が良いんじゃないか。(インテリセンスに出ないけど)
Dispatcher.BeginInvoke(DispatcherPriority, Delegate)
あと、DispatcherExtensions クラスにある拡張メソッド使うと、
Dispatcher.BeginInvoke(Action, DispatcherPriority)
が使えるらしい。(型推論が効く)
0462デフォルトの名無しさん
2009/03/07(土) 08:23:330463デフォルトの名無しさん
2009/03/07(土) 10:19:21知らんかった。
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
になっているBeginInvokeがあるのね。
public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method);
public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method, object arg);
public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method, object arg, params object[] args);
と三つも。なんでこんな事になっているんだ?
0464デフォルトの名無しさん
2009/03/07(土) 16:22:37EventHandler、MethodInvoker、WaitCallback みたいに、
特別扱いされてるデリゲートは無いのかな
今夜にでもソース読んでみるか
0465デフォルトの名無しさん
2009/03/07(土) 16:41:02まず、ジェネリクスに関しては、ある本でこんな例を見つけた(わりと一般的?)
タブベースのUIで、そのタブの中身はそれぞれ異なるビューであるときのベース。
namespace ContactManager.Presenters
{
public class PresenterBase<T> : Notifier
{
private readonly string _tabHeaderPath;
private readonly T _view;
public PresenterBase(T view)
{
_view = view;
}
public PresenterBase(T view, string tabHeaderPath)
{
_view = view;
_tabHeaderPath = tabHeaderPath;
}
public T View
{
get { return _view; }
}
public string TabHeaderPath
{
get { return _tabHeaderPath; }
}
}
}
0466デフォルトの名無しさん
2009/03/07(土) 16:46:03メインのUIのサムネールを更新する例として(これはいままで議論されてたのと
基本的に同等のものだが)
Application.Current.Dispatcher.Invoke(
DispatcherPriority.Normal,
(Action)delegate { OnPropertyChanged("Thumbnail"); }
0467デフォルトの名無しさん
2009/03/07(土) 17:19:16SMSEインスト完了 く^^
アカウント作れない・・・
このバージョンの Microsoft Windows では、MUST_CHANGE オプションはサポートされません。
がーん
0468デフォルトの名無しさん
2009/03/07(土) 17:21:160469デフォルトの名無しさん
2009/03/07(土) 18:51:15>>468
むむむ諦めていたところに
良意見
試行錯誤中
0470デフォルトの名無しさん
2009/03/07(土) 19:05:470471デフォルトの名無しさん
2009/03/07(土) 19:07:45ならまずはManagement Studioで接続できる?の話になってるから、
関係無いとも言えるし、継続してるから関係あるとも言える。
0472469
2009/03/07(土) 19:13:04Vistaで作成したアカウントでXpのSEMSから接続
サーバーの種類 データーベースエンジン
サーバー名 IPアドレス 999.999.999.999(IPconfigでvistaから得た)
SQL Server 認証
ログイン名 ja
パスワード *****
結果
サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときに
このエラーが発生した場合は、SQL Server の既定の設定がリモート接続を許可しないようになっていることが
エラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ,
error: 40 - SQL Server への接続を開けませんでした) (Microsoft SQL Server、エラー: 1326)
・・・で、もって
Vistaのセキュリティー構成をリモート接続をTcpipのみしてみたが
だめだったので(Tcptip及びパイプ)へ戻すが・・・ここでひらめいたXpのリモート接続を(Tcptip及びパイプ)変更
サービス停止再起動
結果 上記と同じ・・・・だああああああああああああああああ<<<今ここ
0473デフォルトの名無しさん
2009/03/07(土) 19:15:110474469
2009/03/07(土) 19:15:50それはすっごく気にしてる
申し訳ない
今まで(一週間位)指摘されないこともすごく感謝してました
「ありがとうそしてごめんなさい」としか言えない
0476469
2009/03/07(土) 19:20:110477デフォルトの名無しさん
2009/03/07(土) 19:23:50他の要因が原因に成りにくい方法から、一つずつ確実にテストしなくちゃだめだな。
なんで、VistaのSQLSMSEで、VistaのSQLに、SQL認証で、そのアカウントで接続できるかどうかが第一点。
1)接続できなかったら、アカウントの設定が間違ってる。
2)接続できたら、アカウントの設定は正しいので、ネットワーク越しの接続に不備がある。
・この場合、VistaやXPのファイアーウォールやアンチウィルスのファイアーウォールの可能性
・SQLServerの設定でTCP/IP越しの接続ができなくなってる
・SQLServer2005だと、Advanveなんちゃらをインストしてないと、リモート接続が許可されないとか、
そんなのもあった気がする。
0478デフォルトの名無しさん
2009/03/07(土) 19:26:07SQL Server 認証に NT アカウントは関係ないぞ。(TCP/IP なら)
0479デフォルトの名無しさん
2009/03/07(土) 19:33:24↑こんなログイン作ったのか? 最初からあるのは「sa」だぞ?
あとは、ポート 1433 を開けてあるのか確認すれ。
0480469
2009/03/07(土) 20:25:54簡単にできたから面白くて
maとjaとか作った
vistaの
コンフィグレーションマネージャーで動的ポート消して
IPALLを1433に変えて再起動
ダメ
というより
ローカル(vista内)でさえSQLserver認証できてないような信頼がどうのかとか
0481デフォルトの名無しさん
2009/03/07(土) 20:30:310482469
2009/03/07(土) 20:33:56すまなかったごめんな
皆さん急がしいところ2週間もありがとうございました
0483デフォルトの名無しさん
2009/03/07(土) 20:52:54本当に役立たずだなお前
0484デフォルトの名無しさん
2009/03/07(土) 21:06:560485デフォルトの名無しさん
2009/03/07(土) 21:09:320486デフォルトの名無しさん
2009/03/08(日) 00:18:13ttp://msdn.microsoft.com/ja-jp/library/ms365247(SQL.90).aspx
0487デフォルトの名無しさん
2009/03/08(日) 01:42:23乗せています。
そこにSVGファイルを表示させたいのですが、実行するとコンポーネント内には
--------------------------------------------------------------------
取り消されたアクション
Internet Explorer は、要求された Web ページにリンクできませんでした。
要求された Web ページは現在、利用できない可能性があります。
--------------------------------------------------------------------
と表示され、別途IEが起動します。
別途起動したIEには「セキュリティ保護のため、コンピュータにアクセス
できる・・・」といういつものメッセージが表示され、
「ブロックされているコンテンツを許可」を選択すると正常に表示されます。
そのファイルをHTMLでラップするとIEの起動は止められますが、
コンポーネント内には空白と赤×のアイコンが出るだけです。
恐らくブラウザコンポーネントのセキュリティ設定の問題だと思うのですが
Windows Formアプリケーションから呼び出したときだけセキュリティの
レベルを下げることは可能なのでしょうか?
それとも別の開放があるのでしょうか?
ちなみに読み込ませるファイルはローカルにあり、自分で書いた安全な物です。
0488デフォルトの名無しさん
2009/03/08(日) 01:58:59http://codezine.jp/article/detail/246?p=1
0489464
2009/03/08(日) 02:16:10> ディスパッチャ操作にこのデリゲートを使用する必要はありませんが、
> DispatcherOperationCallback と SendOrPostCallback は動的な呼び出しを使用します。
この文章がまじで意味不明だったんだが、大体分かった。
DispatcherOperationCallback と SendOrPostCallback *以外は* DynamicInvoke() される。
で、>>461の DispatcherExtensions クラスの拡張メソッド BeginInvoke() を使うと、
Action を DispatcherOperationCallback でラップしてくれる。
0490デフォルトの名無しさん
2009/03/08(日) 02:30:09COMですか・・・。
と言うことはWebBrowserコンポーネントじゃなく、COMのaxWebBrowserを
使うということでしょうか?
後、これは.Net 3.5、Visual Studio 2008でも通用するテクニックなのでしょうか?
明日試してみます。ありがとうございました。
0491488
2009/03/08(日) 03:15:24ごめん、自分で実装したことはないから詳細は不明
とりあえず、
webbrowser IInternetSecurityManager
のキーワードで検索するといろいろ引っかかるから使えるかどうか調べてみてください
0492デフォルトの名無しさん
2009/03/08(日) 03:23:31はい。とりあえずやってみます。
正直COMはあんまり良く理解してないのでWebBrowserコンポーネントで
何とかできるとありがたいのですが・・・。
0493デフォルトの名無しさん
2009/03/08(日) 12:47:41型推論が効くって説明は誤っていると思っていたので気になって
いたんだけど、了解した。
Dispatcher.BeginInvoke((Action)delegate{},優先度);
って書くと呼び出しが高速になるって事だね。それで引数が必要ならば
拡張メソッドじゃない標準のBeginInvokeを使って
DispatcherOperationCallbackかSendOrPostCallback
を使えば良いと。
ところで、
using System.Windows.Threading;
しても、この拡張メソッドがInteliSenseに出てこなくて拡張メソッドが
有効になっていない気配だったので気になって調べて見たら
System.Windows.Presentation
への参照を追加するのが必要なのね。これでめでたくInteliSense
に出てきました。
0494デフォルトの名無しさん
2009/03/08(日) 13:45:57できるのなら、どうすればいいでしょうか。こんなことをやりたいです。
public T Hoge<T>()
{
return new T();
}
0495デフォルトの名無しさん
2009/03/08(日) 13:53:14ちなみにこのnew T()はActivator.CreateInstance<T>()のシンタックスシュガー
0496デフォルトの名無しさん
2009/03/08(日) 14:48:350497デフォルトの名無しさん
2009/03/08(日) 19:56:560498デフォルトの名無しさん
2009/03/08(日) 22:31:15引数で渡した値が存在するかをチェックしたいのですが
パフォーマンスが良いやり方を教えていただけないでしょうか?
↓こんなんじゃあパフォーマンス悪すぎですよね・・・
private bool Search(string keyword)
{
foreach(string value in this._data)
{
if(value == keyword)
{
return true;
}
}
return false;
}
0499デフォルトの名無しさん
2009/03/08(日) 22:35:47_dataがList<T>や配列ならFindとか使えばいい
0500デフォルトの名無しさん
2009/03/08(日) 22:39:210501デフォルトの名無しさん
2009/03/08(日) 22:39:440502デフォルトの名無しさん
2009/03/08(日) 22:47:37asでICollection<T>にキャストしてnullなら>>498方式,nullでなければICollection<T>.Contains
を使うのが一般に速いはず
LINQが使えるなら何も考えずEnumerable.Containsを使えばいい
(こういう小細工は中でやってくれるから)
0503デフォルトの名無しさん
2009/03/08(日) 23:59:18IDEの吐くスケルトンのデフォのProgramのままが普通なんだろうか。
あと、グローバルなシングルトンを取得する静的メソッドを寄せ集めたクラスって
定番の名前とかあるのかな。
0504デフォルトの名無しさん
2009/03/09(月) 00:01:240505デフォルトの名無しさん
2009/03/09(月) 00:05:15クラス名・変数名に迷ったら書き込むスレ。Part14
http://pc11.2ch.net/test/read.cgi/tech/1230477632/l50
0506デフォルトの名無しさん
2009/03/09(月) 00:06:35なにこの俺にぴったりのスレ。
0507デフォルトの名無しさん
2009/03/09(月) 00:21:07コードを書く人にとってはそうでも、コードを読む人(3ヶ月後の自分を含む)
にとってはそういう考え方は困る。
少なくとも普通はクラスファイルが数十以上になる、
ある程度実用的なコードを書いてる場合は。
前にも書いたけど、やっぱり2chってトリビアルな知識はなぜか妙に詳しいが
大きなプログラムは書いたことないし書けない人間が多いのかな。
0508デフォルトの名無しさん
2009/03/09(月) 00:22:480509デフォルトの名無しさん
2009/03/09(月) 00:25:420510デフォルトの名無しさん
2009/03/09(月) 00:57:31個人的には C# だと名前変えるのそんなに大変じゃない場合が
多いから >>504 とは別の理由で結構無頓着だなぁ
名前ってウダウダ考えるより書いてないときにひょんと来たり
整理してから思いついたりするから後回しにしてそういう時間を
とるほうを優先するかな。
0511デフォルトの名無しさん
2009/03/09(月) 09:40:54何か固定の名前を付けるなんて小規模で1人でやってる場合ならいいが
0512デフォルトの名無しさん
2009/03/09(月) 16:55:32Microsoft OEM Readyプログラムのテスト5で
バッファーアンダーランのようなエラーで止まってしまうんですが、
何か良い方法はないのでしょうか。
FlashはAS2とAS3で、それぞれステージだけある空のswfファイルです。
---
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\system32\Macromed\Flash\Flash10b.ocx -
Flash10b+0x3ef4a:
673fef4a 8a08 mov cl,byte ptr [eax] ds:0023:11012000=??
0513デフォルトの名無しさん
2009/03/09(月) 17:42:59「Webページのテキストボックスに文字列を入力してsubmitボタンを押す」
というような処理をするときWebBrowserクラスを使うしかないんでしょうか
できればDocumentCompleteで待つように別スレッドが発生しないクラスがあればうれしいのですが・・・
0514デフォルトの名無しさん
2009/03/09(月) 17:49:000515デフォルトの名無しさん
2009/03/09(月) 17:50:470516デフォルトの名無しさん
2009/03/09(月) 18:38:400517デフォルトの名無しさん
2009/03/09(月) 19:13:43本物か勘違いか、皆さんのご意見を伺いたいです。まずはサンプルコードを。
-----------------------
Type type = typeof(List<string>); // 型は何でもいいです
type.GetInterfaces(); // .NET Framework 1.1以降のメソッド
type.GetGenericArguments(); // 2.0以降のメソッド
Type delegator = new TypeDelegator(type);
delegator.GetInterfaces(); // 無問題
delegator.GetGenericArguments(); // NotSupportedExceptionをthrow
type.Equals((object)delegator); // false <= ???
type.Equals((Type)delegator); // true
delegator.Equals((object)type); // true
delegator.Equals((Type)type); // true
-----------------------
解説は次のレスで。
0518デフォルトの名無しさん
2009/03/09(月) 19:16:00以上
0519デフォルトの名無しさん
2009/03/09(月) 19:25:00> TypeDelegator クラス
> Type オブジェクトをラップし、すべてのメソッドをこの型にデリゲートします。
という継承用のヘルパークラスなんですが、以下の二点について。
(1) Typeクラスのメソッドのうち、.NET 2.0以降でサポートされたメソッドをサポートしていない?
きちんと確かめたわけではないのですが、TypeDelegatorでは.NET 1.1の時点で
Typeがサポートしていたメソッド以外について委譲(デリゲート)を実装していないように見えます。
通常は、Type.GetGenericArguments()を呼ぶと、実行時にはSystem.RuntimeTypeの実装を呼ぶので
問題ないのですが、TypeDelegatorから呼ぶと、継承元のメソッドであるType.GetGenericArguments()
が呼ばれます
また、SSCLIにあるコードによれば、Typeでの実装は
http://labs.developerfusion.co.uk/SourceViewer/browse.aspx?assembly=SSCLI&namespace=System&type=Type
> public virtual Type[] GetGenericArguments()
> {
> throw new NotSupportedException(Environment.GetResourceString("NotSupported_SubclassOverride"));
> }
となっているらしいので、TypeDelegator.GetGenericArguments()を呼ぶと
NotSupportedException(「派生クラスには実装を指定しなければなりません。」)が投げられてしまうようです。
0520デフォルトの名無しさん
2009/03/09(月) 19:38:51同じ場所でtypeof(T).ToString()を渡すとTのクラス名が渡される
なぜだ?
坊やだからさ
0521デフォルトの名無しさん
2009/03/09(月) 19:39:16Type.Equals(object)の方を呼んでTypeDelegatorのインスタンスを渡した場合のみ、
同じTypeを指していてもfalseが戻るようです。
こちらは原因がさっぱり分かりませんが、正常な判定ではないような気がします。
---------------------
というのが私の意見なのですが、勘違いぽかったらツッコミをお願いします。
0522デフォルトの名無しさん
2009/03/09(月) 19:48:26すいません、もう少し詳しくお願いします。
0523デフォルトの名無しさん
2009/03/09(月) 20:04:35public void Method(Type type)としてMethod(typeof(T))とすると、
MethodにはSystem.RuntimeTypeが渡される
同じジェネリクスメソッド内から
public voix Method(string typeName)としてMethod(typeof(T).ToString())とすると、
Methodには、Nullpoが渡される
0524デフォルトの名無しさん
2009/03/09(月) 20:11:34申し訳ない、その場合どこが問題なのか分からないです。。
0525デフォルトの名無しさん
2009/03/09(月) 20:18:10なぜだ
0526デフォルトの名無しさん
2009/03/09(月) 20:59:00C#とMSDEとかで作られてるやつ。
社内のシステムに取り入れたいんです。
0527デフォルトの名無しさん
2009/03/09(月) 21:04:23Wikipedia はないだろ。Wiki はあるけど。
0528デフォルトの名無しさん
2009/03/09(月) 21:10:32wikiを教えてください。
0529デフォルトの名無しさん
2009/03/09(月) 21:17:58http://csharp-source.net/open-source/wiki-engines
DotNetNuke(DNN) にも、Wiki の機能はあったはず。
0530デフォルトの名無しさん
2009/03/09(月) 21:24:08typeof(T)がSystem.RuntimeTypeなのは、もちろん当然ですよね。
typeof(T).ToString()がstringなのも、やはり当然ですよね。
具体的に、どの辺が問題だというお話なんでしょう?
0531513
2009/03/09(月) 21:27:58.NETの機能を使えと上に言われて組んでる感じです
何でなのかは・・・よくわかりません・・・w
このレスの感じだとWebBrowser使うしかな下げな感じですかね
レスポンスありがとうございました
0532デフォルトの名無しさん
2009/03/09(月) 21:29:13typeof(T).ToString()はstringだけどNullpoだって
typeof(T)をTypeとして渡してType(T).ToString()がSystem.RuntimeTypeなら、
typeof(T).ToString()がSystem.RuntimeTypeでないのはなんでだぜ?
0533デフォルトの名無しさん
2009/03/09(月) 21:39:39ううん。
HttpWebRequest でリクエストして、結果を受け取って、
さらに Post する。
atmarkIT とかにサンプルあるよ。
0534デフォルトの名無しさん
2009/03/09(月) 21:41:480535デフォルトの名無しさん
2009/03/09(月) 21:43:19WebBrowserはGUIありきなので表示しないのなら使うべきでない
標準ライブラリにはスクレイピング用ライブラリは存在してない
自前で実装するかCodeProjectあたりから拾うかしないと駄目だな
あ、IEを非表示で使う? でもIE7から面倒になったような気がする
0536デフォルトの名無しさん
2009/03/09(月) 21:49:42基本はこの辺かな?
0537デフォルトの名無しさん
2009/03/09(月) 21:50:16private static void GenericMethod<T>()
{
Method(typeof(T));
Method(typeof(T).ToString());
}
private static void Method(Type type)
{
Console.WriteLine(type);
}
private static void Method(string type)
{
Console.WriteLine(type);
}
GenericMethod<Nullpo>() の出力結果:
Nullpo
Nullpo
0538デフォルトの名無しさん
2009/03/09(月) 22:17:06パソコンから「ガッ」って音がしました!
0539デフォルトの名無しさん
2009/03/09(月) 22:21:04いやいや
private void Method<T>()
0540デフォルトの名無しさん
2009/03/09(月) 22:21:26まだ私が何かわかってないのかもしれませんが、
Type型インスタンスをstring型の引数に渡したら、暗黙にToString()が呼ばれる以上、
両方とも"Nullpo"というstring型インスタンスとしてWriteLine()に渡るのは、
特に不思議ではないのでは。
私が>>517-521で疑問視しているのは、Type型のスーパークラスであるobject型を引数に取る、
Equals(Type)のオーバーロードであるEquals(object)の結果が、Type型のそれと異なっている
のは不自然だし、そもそもEquals()の常識的に考えられる結果と齟齬しているのではないか、
ということなのですが。
0541デフォルトの名無しさん
2009/03/09(月) 22:32:15呼ばれません。WriteLineの引数の型はobject型で中でToStringを呼んでます。
0542デフォルトの名無しさん
2009/03/09(月) 22:40:03プログラムでは、DBに接続してSQL発行して切断するというロジックを組んでも
内部的には切断されずに次の処理のためにセッションを保持しててくれるの??
0543デフォルトの名無しさん
2009/03/09(月) 22:41:51単純な参照比較に変更してるのが原因みたい
どう考えても明確な意図があってやってると思われるのでたぶん仕様なんだろう
0544デフォルトの名無しさん
2009/03/09(月) 22:46:23はい。設定は、接続文字列でやります。
0545デフォルトの名無しさん
2009/03/09(月) 23:01:38>type.Equals((Type)delegator); // true…(2)
>delegator.Equals((object)type); // true…(3)
(1)と(2)はともかく,(1)と(3)で結果が違うのはObject.Equalsの要求仕様に反してるね
だけど今更こんな基礎的なとこを変えるのはありえないので仕様と考えるしかないな
0546デフォルトの名無しさん
2009/03/09(月) 23:17:48もう既に追加されているかどうか確認してから
追加されてないときだけ、イベントを追加したいのだけど
どうすればいいのですか?
0547デフォルトの名無しさん
2009/03/09(月) 23:18:080548デフォルトの名無しさん
2009/03/09(月) 23:18:48なるほど。
どちらにせよ、該当メソッドの実装意図から考えても不自然な挙動ではないように思います。
>>543
>>545
確かに、これは仕様と考えて対処した方が良さそうですね。
いちおう、TypeDelegatorの件(>>517)も気になるので合わせて報告しておきたいのですが、
こういうのってどこに報告すればよいんでしょうか。
0549デフォルトの名無しさん
2009/03/09(月) 23:37:06直接には無理。追加したらフラグ立てとくしかない。
イベントというのはそういうもの。
>>548
いやTypeDelegatorは継承して必要なメソッドをオーバーライドするものなので
好きにオーバーライドして使えということだろ
NotSupportedExceptionを投げるのが既定の実装なんだから何もおかしくない
0550デフォルトの名無しさん
2009/03/09(月) 23:45:09既定の丸投げ実装を提供してるだけなんだと思う
GetGenericParametersはabstractじゃないんだから当然そのまま
GetGenericParametersに限らずTypeの他のvirtualメンバもTypeDelegatorでは実装されてない
0551550
2009/03/09(月) 23:46:010552デフォルトの名無しさん
2009/03/09(月) 23:46:13これって、type.Equals()はRuntimeType.Equals()を呼んでいて、delegator.Equals()はType.Equals()を呼んでるから
結果が違うんじゃないの?
RuntimeType.Equals()は
obj == this
だし、Type.Equals()はUnderlyingSystemTypeを比較してるみたいだけど。
TypeDelegatorのUnderlyingSystemTypeはコンストラクタで代入したTypeのインスタンスのUnderlyingSystemTypeを
返してるみたい。
>>545
>Object.Equalsの要求仕様
今まで特に気にして無くて初めて知ったので読んでみたい。詳細キボン
0553デフォルトの名無しさん
2009/03/09(月) 23:50:24確かにそれも一理あると思います。
ただ、ドキュメントの一行目に
Type オブジェクトをラップし、『すべての』メソッドをこの型にデリゲートします。
と書いてあるわけで、実際には委譲されないメソッドが存在するのは、
ドキュメントを読んだライブラリ利用者が期待する挙動に即しているとはいえないのでは。
0554デフォルトの名無しさん
2009/03/09(月) 23:52:09MSDNのObject.Equalsのページに載ってる
>>553
そういうのは九割九分ドキュメントの方が悪いw
よくあること
0555デフォルトの名無しさん
2009/03/09(月) 23:55:44別に重複して登録されたりはしないよ。
0556デフォルトの名無しさん
2009/03/10(火) 00:00:240557555
2009/03/10(火) 00:02:270558555
2009/03/10(火) 00:05:30デリゲートってインスタンスが違くても参照先のメソッドが等しければ
等価って判定されるんだよね。いわゆる値比較ってやつ。
だから、イベントの登録、削除もそれを反映していると勘違いしていた...orz.
0559デフォルトの名無しさん
2009/03/10(火) 00:05:40どうもそういうことみたいですね。
>>554
これのせいで2〜3日潰した方としてはかなり文句が言いたい感じですがw
むぅ〜
0560デフォルトの名無しさん
2009/03/10(火) 00:12:39thx
今回引っかかってるのは
・x.Equals(y) は y.Equals(x) と同じ値を戻します。
ってやつか。
0561デフォルトの名無しさん
2009/03/10(火) 03:16:14remove して add すればいい
0562デフォルトの名無しさん
2009/03/10(火) 07:13:110563デフォルトの名無しさん
2009/03/10(火) 07:53:07どこで追加したかわかってないような設計をまずやめろ
0564513
2009/03/10(火) 09:04:58遅くなったけど ありがトン
勉強してみます
0565デフォルトの名無しさん
2009/03/10(火) 10:06:00昔のvbでいうと、evaluate関数みたいな使い方ができるってこと?
0566デフォルトの名無しさん
2009/03/10(火) 10:16:560567デフォルトの名無しさん
2009/03/10(火) 10:17:25自宅にあるVS2008expressから別パソコンにソリューションファイルを移して
これまたVs2008expressで起動したんだけど
こういう表示がでて、上手くプログラムが動かないんだが・・・。
具体的にはgmailのサーバーにつなげるセッションが完了しない。
解決法ご存じの方いますか。
0568567
2009/03/10(火) 10:18:26ソースファイルのパスは自宅パソコンのパスになってるので
このパスを実行パソコンのソリューションファイルのパスに変更できれば
直るのかなーと思っているんだけど・・・。
0569デフォルトの名無しさん
2009/03/10(火) 10:20:31普通にプロジェクトに追加しないと
0570567
2009/03/10(火) 10:21:30もう一つ言い忘れが。
自宅のPCはVistaで.slnを移動して実行しようとしている環境はXPです。
0571デフォルトの名無しさん
2009/03/10(火) 10:22:220572デフォルトの名無しさん
2009/03/10(火) 10:23:27ソリューションのプロパティ→構成プロパティ→構成
でビルドすべきプロジェクトにチェック入ってる?
0573567
2009/03/10(火) 10:27:18早速の解答ありがとうございます。
slnファイルから起動しているので
既にプロジェクトに組み込まれている感じなんですが・・・。
ソリューションエクスプローラー上にもファイルの表示がされているし
Mail.csのプロパティの完全パスっていう項目も
現在のPCのパスになっているから、問題はなさそうなんですが。
一応既存の項目の追加でもう一度Mail.csを読み込んでみましたが
改善はないようです・・・。
0574567
2009/03/10(火) 10:33:30デバッグ実行時にMainFormは開けているので、
リビルドというか、ビルド自体は出来てると思うんですが
エラーウィンドウをみる限り、Mail.csを上手く読み込めてない感じかなあ?
>>572
ソリューションのプロパティには
・スタートアッププロジェクト
・プロジェクト依存関係
・デバッグソースファイル
の3項目しか表示されてないんですが
これは自分のIDEがExpressだからでしょうか・・・。
0575567
2009/03/10(火) 10:43:44これは現在のPCのネット環境の問題かも知れないですね。
自宅ではGmailに接続できるのに、現在のPCでは接続できないぽ・・・。
メール関連のライブラリはTKMPって奴を使ってるんですけど
こういう現象って起こりうる物でしょうか。
0576デフォルトの名無しさん
2009/03/10(火) 10:55:02かも。572はPro版を見て言った。
Proでソリューションのプロパティはこうなってる。
→共通プロパティ
→スタートアッププロジェクト
→プロジェクト依存関係
→デバッグソースファイル
→構成プロパティ
→構成
てか「ビルド」メニュー→「構成マネージャ」でもひらける。
0577デフォルトの名無しさん
2009/03/10(火) 10:55:37移動したらビルドじゃ駄目だよ。
念のためクリーンしてからリビルドしてみ
0578デフォルトの名無しさん
2009/03/10(火) 10:56:370579567
2009/03/10(火) 11:05:41>>576
あー
ビルド→構成マネージャ の表示がそもそもないですね。
でもこの機能2003pro使ってた時に使ってたんで、おっしゃりたい事はわかりました。
デバッグの際にReleaseかDebugか選ぶ項目ですよね。
Expressにはないみたいですね〜。
>>577
クリーンという作業は>>578さんが言っているような事でしょうか・・・
すみません汗
>>578
formのresxっていうのも消したらデバッグエラーが起こるようになってしまい
プログラムが起動しなくなりました。
これも消してよかったんでしょうか。
0580デフォルトの名無しさん
2009/03/10(火) 11:20:52objフォルダとbinフォルダを丸ごと消すだけでいい
Expressにもビルド構成はあるけど既定では表示されてないだけ
ツールーオプションーすべての設定を表示
プロジェクトおよびソリューションービルド構成の詳細を表示,常にソリューションを表示 にチェック
テンプレに入れるべき
0581567
2009/03/10(火) 11:26:12繋がりました!
とりあえず、obj bin releaseフォルダを全削除してリビルドを行いました。
それでも接続のセッションが上手く行かなかったんですが
imap から pop にサーバーを変更したら繋がるようになりました^^;
自宅のPCからはimap.google.comに繋がるんですけどね・・・。
不思議な事だ。
みなさんお手間かけさせてすみませんでした
今回の問題の解決にあたり、皆さんの助言のおかげで
副産物がたくさん手に入りました。
とりあえず >>580さんのすべての設定を表示はかましときます!
ありがとうございました〜♪
0582デフォルトの名無しさん
2009/03/10(火) 13:51:35MSが公開する前から公開してたサイトがあったんだけど、どこだかわかる人います?
以前はググればでてきたんだが、今は「マイクロソフトが公開!」的なブログサイトばかりで見失ったorz
0583デフォルトの名無しさん
2009/03/10(火) 14:13:08ダブルクリックしたらイベントが自動的に登録されるようなのを
書きたいんですが、分かり易いサンプルないでしょうか。
0584デフォルトの名無しさん
2009/03/10(火) 14:19:44SSCLIでググればそれっぽいのが出てくるけど
実際の.NETのソースコードと同じである保証はないし公開範囲も狭いよ
やっぱりデバッグ用に公開されてるのを見る方がいい
NetMassDownloader使えばローカルに一括保存できる
>>583
[System.ComponentModel.DefaultEvent("対象のイベント名")]
class MyControl : Control {
0585デフォルトの名無しさん
2009/03/10(火) 14:44:43よーしダウンロードしてみるぜ!
0586デフォルトの名無しさん
2009/03/10(火) 15:12:150587デフォルトの名無しさん
2009/03/10(火) 15:52:30ttp://msdn.microsoft.com/ja-jp/library/system.componentmodel.defaulteventattribute(VS.80).aspx
0588デフォルトの名無しさん
2009/03/10(火) 16:09:280589585
2009/03/10(火) 19:04:01他の人もそうかな?.net3.5なら取得できるんかな。
ダウンロードできないので激しくショックだぜ
0590デフォルトの名無しさん
2009/03/10(火) 19:09:18~Class()
{}
空のデストラクタを指定するだけでメモリを解放してくれるのでしょうか。
というより、必要がないのですか。
0591デフォルトの名無しさん
2009/03/10(火) 19:13:31というより、インスタンス生成時にusing句を使ったほうがいい。
IDisposeのないものは、ガベージコレクタが回収してくれるから、そのままでいい。
0592デフォルトの名無しさん
2009/03/10(火) 19:19:28そもそもPInvokeでアンマネージリソース抱えてたりしない限りはデストラクタは不要
というかパフォーマンスが落ちるので不要なデストラクタは書いてはいけない
0593デフォルトの名無しさん
2009/03/10(火) 19:34:18ありがとうございます。
必要ないわけですか。ということは、
C++でやってた後始末みたいな事がまるで不要という事ですね。
0594デフォルトの名無しさん
2009/03/10(火) 19:35:29Disposeし忘れてもファイナライザで解放処理が呼ばれるように実装するのが普通だからたいがい大丈夫
ファイナライザが呼び出されてるということは今GCが走ってるわけだから,
絶対に他のマネージオブジェクトにアクセスしてはいけないし
余計な気をまわして他のオブジェクトのDisposeを呼ぶ必要もない
0595デフォルトの名無しさん
2009/03/10(火) 19:44:01メモリの解放に限ってはそうだが、IDisposableは掴んでるリソースを解放するとか
最後にやらなければならないメソッドの総称という意味もあるので、
Disposeがあれば絶対に実行はすべき
0596594
2009/03/10(火) 19:55:03Disposeしなくていい(してはいけない)というのはファイナライザ(デストラクタ)の中での話
クラスAがIDisposableなオブジェクトBをメンバに持ってるならA自身もIDisposableを実装して
A.Disposeの中でBをDisposeするようにしないといけない
その場合もファイナライザは不要
0597デフォルトの名無しさん
2009/03/10(火) 20:14:30ローカルに保存したソースって、デバッグモード以外で直接見るにはどうすればいいんでしょうか。
0598デフォルトの名無しさん
2009/03/10(火) 20:15:03は C# .NET 2.0でも実装できますか?
0599デフォルトの名無しさん
2009/03/10(火) 20:32:35.cs ファイルがあるから、直接見ればいいんでね?
0600デフォルトの名無しさん
2009/03/10(火) 20:39:16あら、そんなのあったっけ。。。
確かめてみます。
0601デフォルトの名無しさん
2009/03/10(火) 21:34:01>Disposeがあれば絶対に実行はすべき
これは明らかに間違いだと思うが。
そう設計されているクラス(よくない設計だが)でもない限りは、
基本的にはGCに任せる方がいいとされる。
もちろん必要ならDisposeやCloseを呼んでもよい。
0602デフォルトの名無しさん
2009/03/10(火) 21:37:02>このインターフェイスは主に、アンマネージ リソースを解放するために使用します。
>マネージオブジェクトが使用されなくなると、同オブジェクトに割り当てられているメモリは
>ガベージ コレクタによって自動的に解放されます。
>ただし、ガベージコレクションが行われるタイミングは特定できません。
>また、ガベージ コレクタでは、ウィンドウハンドル、開いたファイルやストリームなどの
>アンマネージ リソースが認識されません。
>ガベージ コレクタを使用して、明示的にアンマネージ リソースを解放するには
>このインターフェイスの Dispose メソッドを使用します。
>オブジェクトがもはや必要でない場合、オブジェクトのコンシューマはこのメソッドを呼び出します。
0603デフォルトの名無しさん
2009/03/10(火) 21:46:090604デフォルトの名無しさん
2009/03/10(火) 21:47:210605デフォルトの名無しさん
2009/03/10(火) 21:48:34>このインターフェイスは、Disposeメソッドだけを定義している。
>使い終わったら確実に資源を解放する処理が必要なクラスは、
>このインターフェイスを実装して、解放処理を記述するのが.NET Frameworkでのお約束である。
0606デフォルトの名無しさん
2009/03/10(火) 21:52:11>>601の言ってることの方が真実に近いよ。
馬鹿なコピペ君の負け。
馬鹿なコピペ君の言うとおりなら、例えばWindows Formのデザイナで
デザイン時にコンポーネントを貼り付けるような使い方をMSはわざわざ用意しないだろう。
0607デフォルトの名無しさん
2009/03/10(火) 21:54:33そのどこにも「Disposeがあれば絶対に実行はすべき」
なんて書いてないよね。俺の言ってること分かってるかい?
明示的にDisposeやCloseを呼び出さなければ、
やがてGCがファイナライザを呼び出してアンマネージリソースの
後片付けをさせるってこと分かってるかい?
0608デフォルトの名無しさん
2009/03/10(火) 21:55:55作ればできるでしょ
0609デフォルトの名無しさん
2009/03/10(火) 21:56:090610デフォルトの名無しさん
2009/03/10(火) 21:58:450611デフォルトの名無しさん
2009/03/10(火) 21:59:00>>607
アンマネージ リソース=ウィンドウハンドル、開いたファイルやストリームなど
IDisposableは主にアンマネージ リソースを解放するために使用
0612デフォルトの名無しさん
2009/03/10(火) 22:01:41>馬鹿なコピペ君の言うとおりなら、例えばWindows Formのデザイナで
>デザイン時にコンポーネントを貼り付けるような使い方をMSはわざわざ用意しないだろう。
???
デザイン時にコンポーネントを貼り付けると自動的にDisposeが呼ばれるようになるけど
そういう話?
例えばボタンを貼り付けると、InitializeComponent()に
this.Controls.Add(this.button1);
みたいなのが追加される。
で、FormのDisposeでcomponents.Dispose();が呼ばれてる。
0613デフォルトの名無しさん
2009/03/10(火) 22:02:35良く読もうな
>クラスで外部リソースを使用するが、そのクラスをデザイン領域では使用しない場合は、
>System.IDisposable を実装するか、あるいは直接または間接的に IDisposable を実装するクラスから派生させます。
>クラスがデザイン可能ではなく、外部リソースを保持していない場合は、IComponent 型や IDisposable 型は不要です。
0614デフォルトの名無しさん
2009/03/10(火) 22:05:39別にIDisposableを実装していなくても、アンマネージリソースはファイナライザ中で解放すればいい。
IDisposableはGCに頼らずとも明示的にリソースを解放するための手段を与えるためのものだよ。
勘違いしているのでは?
0615デフォルトの名無しさん
2009/03/10(火) 22:05:58話が通じない人だなあ。
言いたかったのは、もしIDisposable.Disposeが、不要になれば「必ず」呼ぶ必要があるほどの
緊急性があることを表すメソッドであるのなら、それを実装したクラスのインスタンスを
不要不急の時まで生かしておくことを許すようなことはしないだろう、
ということだよ。
まだ話が通じないとアレなので一応補足するけど、例えば
PrinterSettingDialogとかFileSaveDialogとか、いつもいるわけじゃないでしょ。
0616デフォルトの名無しさん
2009/03/10(火) 22:08:090617615
2009/03/10(火) 22:09:30PrintDialogとSaveFileDialogだなw
0618デフォルトの名無しさん
2009/03/10(火) 22:10:07作る側は、必ず Dispose() を呼んでくれる、ってのを期待しちゃダメ。
使う側は、Dispose() を忘れちゃダメ。
0619デフォルトの名無しさん
2009/03/10(火) 22:13:53>言いたかったのは、もしIDisposable.Disposeが、不要になれば「必ず」呼ぶ必要があるほどの
>緊急性があることを表すメソッドであるのなら、それを実装したクラスのインスタンスを
>不要不急の時まで生かしておくことを許すようなことはしないだろう、
>ということだよ。
ああ、「必ず」とつけた人がいてその人に噛みついていたのか。
それで「必要ではない」例をあげてたと。
しかしまあそれを言うなら>>601の
>もちろん必要ならDisposeやCloseを呼んでもよい。
こっちだって明らかに日本語が残念な人だろう。
「必要」な場面で「呼んでもよい」ってwww
必要な場合は必ず呼べよwww
0620デフォルトの名無しさん
2009/03/10(火) 22:14:17換言すれば、そのソフトでfileを一度しかopenしないと考えられるのであれば
使い終わってもcloseする必要はないということですね
死ねば?
0621デフォルトの名無しさん
2009/03/10(火) 22:18:55使う側も、作る側からDisposeの確実な呼び出しが期待されているのでもない限り、
「必ず」呼び出さなきゃいけないわけじゃないよ。
以下は CLR via C# の解説ね。
一応 .NET Frameworkの開発チームにも参加していた人の意見。
一般論として、筆者はDisposeメソッドやCloseメソッドの呼び出しを強制するのはあまり
推奨しません。CLRのガベージコレクタはとてもよくできているので、それに任せたほうが
いいからです。ガベージコレクタには、アプリケーションコードがオブジェクトにアクセスし
なくなるタイミングが分かっています。そしてそのタイミングが過ぎたときにだけ、オブジェクト
を回収します。アプリケーションコードでDisposeメソッドやCloseメソッドを呼び出すということは、
アプリケーションは自分がオブジェクトにアクセスする必要がなくなるタイミングが分かっている
と宣言をしていることになります。たいていのアプリケーションでは、オブジェクトが間違いなく
不要になったことがわかることはありません。
例えば、新しいオブジェクトを作成して、その参照を他のメソッドの引数に渡した場合、
そのメソッドが渡された参照を自分のオブジェクトの内部フィールド(これはルートになります)
に格納するかもしれません。メソッドを呼び出した側では、このような動作をしているかどうかは
分かりません。この場合、呼び出し側がDisposeやCloseを呼び出してしまって、その後で
他のコードがそのオブジェクトを利用しようとすると、ObjectDisposedExceptionがスローされる
ことになります。
筆者は、DisposeやCloseを自分のコードで呼び出すのは、次の2つの場合に限ることを
推奨します。1つは、リソースを解放しなければならないことが分かっている時(開いている
ファイルを削除しようとするときなど)です。もう1つは、DisposeまたはCloseを呼び出すことが
間違いなく安全で、しかもオブジェクトをファイナライゼーションリストから削除して、
オブジェクトが昇格するのを防ぐことで、パフォーマンスを向上させたい場合です。
0622デフォルトの名無しさん
2009/03/10(火) 22:20:36IDisposableの目的が、主にアンマネージリソースの解放だから、
あれば実行するのは普通だと思うぞ?
この場合、ポトペタのコントロール等を持ち出して実行しなくてもいい例とするほうが狂ってる
0623デフォルトの名無しさん
2009/03/10(火) 22:23:10大抵は最後の「2つの場合」に当てはまると思うんだけど
0624デフォルトの名無しさん
2009/03/10(火) 22:23:37> たいていのアプリケーションでは、オブジェクトが間違いなく
> 不要になったことがわかることはありません。
GC のない言語は全否定? ありえないです。
アンマネージドなリソースを使うから、それらのリソースを解放する
必要があるから、Dispose() を実装する。そう考えれば、Dispose() が
用意されてるなら、不要になった時点で呼ぶべきだと思うよ。
0625デフォルトの名無しさん
2009/03/10(火) 22:24:11だから
>1つは、リソースを解放しなければならないことが分かっている時(開いているファイルを削除しようとするときなど)です
がDisposeの目的だって書いてあるっていってんの
0626デフォルトの名無しさん
2009/03/10(火) 22:24:18だからさ、揚げ足取りのように聞こえるかもしれんがその「ダメ」とか「必要な場合は必ず」
っていう言い方は正しくないんだよ。
もっと控えめに、
(1) 占有している共有資源を他に譲りたいなら呼べ
(2) Disposeを呼ぶことをあえて避ける理由はなにもない
と表現するのが正しい。>>601の言っていることの方が妥当だ。
>>620
君はたぶん学生時代数学が出来なかった子だろうね。
君は必要条件と十分条件の区別がついてない。
Disposeを実装していることは、「使い終わったら必ず開放すべき資源を持っている」
ことの必要条件であっても十分条件じゃない。
つまり、Disposeを実装していることは、そのインスタンスが必ず
「使い終わったら必ず開放すべき資源を持っている」ことを意味しない。
0627デフォルトの名無しさん
2009/03/10(火) 22:24:19それどこから引用したの?それとも自分で訳したの?
0628デフォルトの名無しさん
2009/03/10(火) 22:27:11>>624
君たちのも「意見」に過ぎないよね。
しかも、素人の意見と、MSの多くのソフト開発に関わった人の意見とでは、
どちらを信用すべきか目に見ていると思うが。
(一応出版社もMicrosoftの書籍に書かれていることなので、
MSの準公式見解といっていい)
まともな人の書いた書籍で、絶対にDisposeを呼び出せって言ってるのはあるの?
それを提示しないと説得力ないよね。
0629デフォルトの名無しさん
2009/03/10(火) 22:27:41君は今も理屈っぽいとよく他人からバカにされるでしょ。
Disposeの目的の主な利用方法がアンマネージリソースの解放なんだから、
できる時にしておくべき。
0630デフォルトの名無しさん
2009/03/10(火) 22:29:21日本語版も「プログラミング .NET Framework」という題で出ている。
0631デフォルトの名無しさん
2009/03/10(火) 22:30:53原著は持ってるが日本語版を持ってないから聞いたのだが。
0632デフォルトの名無しさん
2009/03/10(火) 22:30:540633デフォルトの名無しさん
2009/03/10(火) 22:31:11安全面に倒して(リソース不足やらを引き起こさないように)
呼び出した方がいいじゃん。
そんなこともわかんないのかな・・・
0634デフォルトの名無しさん
2009/03/10(火) 22:31:28良く嫁
>たいていのアプリケーションでは、オブジェクトが間違いなく不要になったことがわかることはありません。
だから
>一般論として、筆者はDisposeメソッドやCloseメソッドの呼び出しを強制するのはあまり推奨しません。
ってことだろ?
間違いなく不要になることはわからないから、一般的に推奨しないわけであって、
明らかに分かってる場合には、実行しても問題じゃないってこった。
従って、アンマネージリソースを抱えている可能性があるわけだから、
必要ないと分かっていれば実行はするべきだということになる。
0635デフォルトの名無しさん
2009/03/10(火) 22:32:090636デフォルトの名無しさん
2009/03/10(火) 22:32:38そのオブジェクトの Dispose メソッドが必ず呼び出されるようにする必要があります。
ついで
http://social.msdn.microsoft.com/Search/ja-JP/?query=Dispose%20%E5%BF%85%E3%81%9A&ac=3
0637デフォルトの名無しさん
2009/03/10(火) 22:33:15> 明らかに分かってる場合には、実行しても問題じゃないってこった。
どう考えてもその通り
0638デフォルトの名無しさん
2009/03/10(火) 22:34:12そこは誰も否定してないよ。
だから微妙な話だといってるんだけど。。
0639デフォルトの名無しさん
2009/03/10(火) 22:35:54そういう状況は特別に注意して管理するべきであって一般にどうとかいう話じゃないと思うんだ
0640デフォルトの名無しさん
2009/03/10(火) 22:38:04自分の書いたクラスだけを利用するとは限らないからなあ。
他人の書いたクラスを使う場合は防ぎようがないこともあるだろう。
0641デフォルトの名無しさん
2009/03/10(火) 22:40:36議論をふっかける奴って何なんだろう・・・?
0642デフォルトの名無しさん
2009/03/10(火) 22:42:15だから必ずDisposeさせようと思う必要はないんですよ?」
と過去の呪縛から解放させるためのトークが
「Disposeはすべきでない」
と理解されたらたまったもんじゃないな
0643デフォルトの名無しさん
2009/03/10(火) 22:42:49> つまり、Disposeを実装していることは、そのインスタンスが必ず
> 「使い終わったら必ず開放すべき資源を持っている」ことを意味しない。
とか答える奴とは一緒に仕事をしたくないな。
0644デフォルトの名無しさん
2009/03/10(火) 22:45:21それ他人に書いたクラスにバグがありますと同じ
Disposeが信じられないのなら、他のメソッドの動作にも信頼がおかけないだろうから、自作するしかないね
0645デフォルトの名無しさん
2009/03/10(火) 22:45:31じゃあ>>595にある、
>Disposeがあれば絶対に実行はすべき
の絶対と「必ずの違いをとっくりと説明してもらおうじゃないか。
というか、議論にすぐ感情を持ち込む君のような奴ははっきりいって議論の邪魔。
ついでにエンジニアの資格なし。
0646デフォルトの名無しさん
2009/03/10(火) 22:48:06どっちもどっちじゃない?
0647デフォルトの名無しさん
2009/03/10(火) 22:50:44そうやって論議を他の方向にそらしたい気持ちはわかるが、
Disposeは絶対に必ず間違いなく確実に死んでも実行すべき
もちろん必要なくなったらの話
0648デフォルトの名無しさん
2009/03/10(火) 22:55:14別に明示的にDispose()を呼ばなくても、ガベコレが動けば、FinalizeがDispose(bool disposing)の方を呼ぶでしょ。
これもDisposeメソッドだから(というより本体)、結局のところDisposeは確実に呼ばれるんだよね〜。
そういう意味では、Disposeメソッドは絶対に呼ばれるべきだし、また通常はそうなっているだろう。
0649デフォルトの名無しさん
2009/03/10(火) 22:57:42そんなのよりは、よっぽど Dispose() を呼び出す方がましな気がする。
0650デフォルトの名無しさん
2009/03/10(火) 22:57:44その意味で>>648の発言は基本がまったく理解できてない
0651デフォルトの名無しさん
2009/03/10(火) 22:59:51■Disposeしなくてもいいよ派
手洗いをしていないからといって、必ずしもインフルエンザにかかるとは限りません。
手洗い場には人が殺到するので、余計にインフルエンザにかかるリスクが増加します。
■Disposeしたほうがいいよ派
手洗いをしたほうが手からの感染が少なくなるのでしたほうがいいに決まっています。
混雑した場などに出かけた場合の話をしているのであって、
その場合には手を洗ったほうが感染のリスクが低下します。
0652デフォルトの名無しさん
2009/03/10(火) 23:00:38Disposeを確実に呼び出すように(あるいは呼び出されるように)しろ、
と言ってる記述があっても、それは広義のDisposeメソッド(bool型を引数に取るような)
を指しているのかもしれんから、必ずDispose()を呼べと言っているのか断定しがたいってことだよ。
0653デフォルトの名無しさん
2009/03/10(火) 23:01:06結論
人がいないときに(必要でなくなったら)必ず手洗いしましょう(必ずDisposeしましょう)
0654デフォルトの名無しさん
2009/03/10(火) 23:03:28Disposeの実装の主な理由が、必ず実行されるべきアンマネージリソースの解放にあるんだから、
必要なくなったら必ず実装するべきってことだよ
あなたが、必要ないかどうかわからない糞設計をしているのなら、
あなたが断定できないから実行できないということに関しては同意する
0655デフォルトの名無しさん
2009/03/10(火) 23:04:26だから違うよ。
わかりやすく、とか言ってる奴が話の筋が読めないってなんの笑い話?
あるクラスがDisposeを実装してるからといって、
必ずしも「必ず」使い終わったら呼ぶ必要があるとは限らないって話だよ。
必ず呼ぶべきクラスもあれば、そうでないクラスもあるってこと。
この程度の簡単な話が理解できない人間はプログラマやってちゃあかんと思うなあ。
0656デフォルトの名無しさん
2009/03/10(火) 23:05:12必要ないかどうか分からない糞設計とか言い出したら、ガベコレ自体否定している。
そして明示的にマネージオブジェクトを解放できないC#を否定していることになる。
0657デフォルトの名無しさん
2009/03/10(火) 23:07:05呼ぶ必要がある、ない、ってのはどうやって判断するの?
0658デフォルトの名無しさん
2009/03/10(火) 23:09:46ガベージコレクタによって保有するリソースは解放されるだろう。
少なくともFCLのクラスは、そこまで待っていても不具合はないだろ。
メモリが惜しけりゃ明示的に呼び出せってだけのことなのでは?
0659デフォルトの名無しさん
2009/03/10(火) 23:10:26自分が作成したインスタンスで、そのインスタンスが役目を終えたと判断できたら
Disposeしましょうってことを言ってるんじゃん。
話の流れを読めてないのはお前でしょ
0660デフォルトの名無しさん
2009/03/10(火) 23:10:350661デフォルトの名無しさん
2009/03/10(火) 23:11:08ガベージコレクタによって「Finalize、そしてDispose(bool)が呼ばれた結果」保有するリソースは解放されるだろう。
0662デフォルトの名無しさん
2009/03/10(火) 23:11:370663デフォルトの名無しさん
2009/03/10(火) 23:12:07MSDNライブラリ+常識
だから、明示的にDisposeすべきかどうかはそのクラスが占有している
共有資源がどの程度希少かという問題と同義で、そんなことは常識でだいたい
わかるじゃん。
0664デフォルトの名無しさん
2009/03/10(火) 23:13:25だから、そのテーゼは常に真ではない、という話をずっとしてるんだがな。
悪気はないけど、君はこういう話題をするには頭が悪すぎるみたいだねw
0665デフォルトの名無しさん
2009/03/10(火) 23:13:58あたまの悪い人だなぁ
>必要ないかどうか分からない糞設計とか言い出したら、ガベコレ自体否定している。
>そして明示的にマネージオブジェクトを解放できないC#を否定していることになる。
アンマネージリソースの解放って言ってるのに、なんでカベコレそのものの否定とかの話になんの?
FileをOpenして、Closeするまでガベコレの動作を待てってどんなソフトなの?
0666デフォルトの名無しさん
2009/03/10(火) 23:14:12ぽかーん・・・
そんな各開発者で異なりそうな基準なら、安全側に倒して、
必ず Dispose() すること、って規約にするよ。
0667デフォルトの名無しさん
2009/03/10(火) 23:15:02常に真ではないが、ほとんど真だ、という話をずっとしてるんだがな。
悪気はないけど、君はこういう話題をするには頭が悪すぎるみたいだねw
0668デフォルトの名無しさん
2009/03/10(火) 23:18:12そのファイルを開きっぱなしであることが、
色々な意味でコストがかかるなら、明示的にCloseするだけでしょ。
そうでなく、しかも閉じる必要がなきゃ、別に放置しておいても問題ない。
必要かどうかの管理をプログラマに強いるのはC#の思想じゃないでしょ。
CやC++ならそういう態度でいいけど、C#じゃ基本的にガベコレ任せだ。
アンマネージリソースについては凄く敏感なようだけど、マネージリソースについては何も思わないの?
ガベコレが動くまでメモリを占有し続けたままって。
そういうのが気になるならC++とかやってりゃいいのでは?
0669デフォルトの名無しさん
2009/03/10(火) 23:19:12が、IDisposable() インターフェイスがアンマネージドリソースの解放目的に用意されている以上、
Dispose() メソッドを実装してるなら、それを呼ぶ必要があるってケースの方が多いだろうね。
0670デフォルトの名無しさん
2009/03/10(火) 23:19:53それはそれでいいんじゃないの?
それと今の話は別問題だよ。わかるよね?
0671デフォルトの名無しさん
2009/03/10(火) 23:22:09イレギュラーケースをたてに、Dispose() を呼ばなくてもいい、って
言い張ってる奴がいる、ってのは理解してます。
0672デフォルトの名無しさん
2009/03/10(火) 23:22:21>色々な意味でコストがかかるなら、明示的にCloseするだけでしょ。
必要なくなったら閉じるのが当たり前でしょ。
必要なときに閉じないのは当たり前でしょ。
何言ってるの?
>アンマネージリソースについては凄く敏感なようだけど、マネージリソースについては何も思わないの?
Disposeの実装の主な理由がアンマネージリソースの解放にあるんだから、
アンマネージリソースについて語るのは当たり前でしょ。
0673デフォルトの名無しさん
2009/03/10(火) 23:23:190674デフォルトの名無しさん
2009/03/10(火) 23:24:12なんで?
どこでオブジェクトが再利用されるかわからないから、
Disposeすべきなんじゃなかったの?
だんだん主張がおかしくなってきていますな
0675デフォルトの名無しさん
2009/03/10(火) 23:24:24だからそんなことを言ってる奴はいなんだよ。
頭の悪い奴は議論に参加しなくてよろしい。
0676デフォルトの名無しさん
2009/03/10(火) 23:25:39訂正
>どこでオブジェクトが再利用されるかわからないから、
>Disposeするべきでないんじゃなかったの?
>>621の解釈よりw
0677デフォルトの名無しさん
2009/03/10(火) 23:25:51だから、Dispose()を明示的に呼ばずとも、結局、
最終的にFinalize経由でリソースの解放は行われる。
結局のところタイミングの問題だけでしょ。
Disposeを絶対呼べ、って言ってるぐらいメモリ資源に敏感なのに、
明示的解放のできないマネージリソースは完全にGC任せのC#を使っているのは何故かなあって思うんだが。
0678デフォルトの名無しさん
2009/03/10(火) 23:27:57と間違った理解をしてるのもどうかと思うけどな・・・
0679デフォルトの名無しさん
2009/03/10(火) 23:28:17今の話題はDisposeを実装しているクラスは必ずDisposeすべきか。
俺の意見は否だけど、だからといって「必ずDisposeを呼べ」という規約が
ナンセンスとは断定できない。
例えばC#のコンパイラにとってはインデントは無視するだけの存在の「いらない子」だけど、
だからといって「ちゃんとインデントしろなんて規約はナンセンスだ」なんて
誰も言わんでしょ。
それとこれとは別問題だから。
0680デフォルトの名無しさん
2009/03/10(火) 23:29:08じゃあ、どこに問題があるか個別に○×つけてくれよ
1 IDisposableは主に、アンマネージ リソースを解放するために使用する
2 アンマネージリソース(File Openなど)を所有していた場合、必要なくなったら解放する必要がある。
3 必要がなくなったらDisposeを実行してリソースを解放すべき
どこがおかしい?
0681デフォルトの名無しさん
2009/03/10(火) 23:29:31Finalize が呼んでくれるから、Dispose() は明示的に呼ばなくてもいいんじゃないの?
0682デフォルトの名無しさん
2009/03/10(火) 23:30:29IDisposableを実装するクラスに求められる最低限度の機能は、
好きなタイミングで明示的にDispose()を呼び出して、アンマネージリソースを解放するということだけ。
この最低限度の実装しかしていないクラスなら、Dispose()は絶対に呼ばなきゃいけない。
でもこれじゃ、もしDispose()を呼び出すのを忘れた場合に、
アンマネージリソースは解放されずに残ってしまう。
そこで安全弁として、まともなクラス(FCLなど)では、
Finalize経由でもDispose(bool disposing)を呼び出してリソースの解放が行われるようになっている。
そういうクラスでは別に明示的にDispose()を絶対に呼び出さなきゃいけないわけではない。
0683デフォルトの名無しさん
2009/03/10(火) 23:32:23visual C♯をやっててコンボボックスの規定値?を表示させるにはどうしたらいいんですか?
普通コンボボックスはドロップダウンのリストから文字を選んだらそれが表示されると思うんですが、
ドロップダウンリストから選ぶ前から既定の文字を表示させておきたいんですがどうやればいいんでしょうか?
それとコンボボックスで選んだものによってボタンを押したときの処理を分けるにはどうしたらいいんですか?
説明分かりづらすぎですいません
0684デフォルトの名無しさん
2009/03/10(火) 23:33:07(`・ω・´)/
ハ_ハ ⊂ ノ ハ_ハ
('(・ω・´∩ (つ ノ ∩`・ω・)')
ハ_ハ ヽ 〈 (ノ 〉 / ハ_ハ
('(・ω・´∩ ヽヽ_) (_ノ ノ ∩`・ω・)')
O,_ 〈 〉 ,_O
`ヽ_) (_/ ´
ハ_ハ 知 ら ん が な ハ_ハ
⊂(・ω・´⊂⌒`⊃ ⊂´⌒⊃`・ω・) ⊃
0685デフォルトの名無しさん
2009/03/10(火) 23:34:13SelectedIndex を設定 or 読み取り
0686デフォルトの名無しさん
2009/03/10(火) 23:35:13矛盾してるぞ?
>IDisposableを実装するクラスに求められる最低限度の機能は、
>好きなタイミングで明示的にDispose()を呼び出して、アンマネージリソースを解放するということだけ。
>この最低限度の実装しかしていないクラスなら、Dispose()は絶対に呼ばなきゃいけない。
IDisposableを実装していれば、いつかはDisposeは実行されるんだろ?
その理屈なら呼ぶ必要なんてないじゃん
0687デフォルトの名無しさん
2009/03/10(火) 23:35:32つーか、そんなのはみんなわかってて、「で、どうすべきか?」って話をしてると思うんだけど。
必要あるかないかが内部実装に依存する以上、呼び出すべきって意見と、
Finalize で呼び出されるんだから、別に呼び出さなくてもいい、って意見だろ。
0688デフォルトの名無しさん
2009/03/10(火) 23:36:07返答よろしく
1 IDisposableは主に、アンマネージ リソースを解放するために使用する
2 アンマネージリソース(File Openなど)を所有していた場合、必要なくなったら解放する必要がある。
3 必要がなくなったらDisposeを実行してリソースを解放すべき
どこがおかしい?
0689デフォルトの名無しさん
2009/03/10(火) 23:38:12俺は Dispose() するべき派だから、どこも間違ってない(正しい)と思います。
0690デフォルトの名無しさん
2009/03/10(火) 23:39:55>そこで安全弁として、まともなクラス(FCLなど)では、
>Finalize経由でもDispose(bool disposing)を呼び出してリソースの解放が行われるようになっている。
>そういうクラスでは別に明示的にDispose()を絶対に呼び出さなきゃいけないわけではない。
こういうケースもあるから一概にそうとも言えないと思うがな。
StreamWriterのFlush/Close/Disposeを呼ばない場合
書き込みキャッシュの内容がフラッシュされないので内容がロストする。
ファイルは確かにクローズされるんだけど。
もちろんStreamWriterにはDispose(bool disposing)があるぜ。
ttp://msdn.microsoft.com/ja-jp/library/ms172236.aspx
static class Program
{
static void Main(string[] args)
{
var sw = new StreamWriter(@"c:\test.txt");
sw.Write("A");
}
}
Disposeに関してはもはやアンマネージリソースかどうかに拘っても意味がない気がする。
アンマネージリソースが解放されずに残るわけじゃないとはいえ
このケースでDisposeを呼ばなくて良いと言うのは無理がありすぎる。
0691デフォルトの名無しさん
2009/03/10(火) 23:41:29GCには全くわからないんだよ
GC.AddMemoryPreassureなんて極めてチープな機能があるくらい
0692デフォルトの名無しさん
2009/03/10(火) 23:41:54違うだろ。IDisposableを実装しているだけじゃ、Disposeが絶対に呼び出されるとは限らない。
例えば自分で作ったクラスでIDisposableを実装して、Finalizeでリソース解放処理をしなければそのまま残る。
しかしFCLやそれに準拠した規範的なクラスでは、確実にFinalize経由でリソース解放されるようになっている。
そういうクラスを使うのであれば、別にDispose()を絶対呼び出す必要があるとまではいえない。
そうでないクラスであり、Finalize経由での解放が保証されていないのであれば、Dispose()は絶対に呼び出すべき。
>>688
別におかしくはないよ。でもそれはIDisposableの「最低限度の実装」をしたクラスについてだよね。
でも実際にIDisposableを実装したクラスは、それ以上の実装をしているのが普通なわけ。
まあ本音と建前みたいなもんだな。
0693デフォルトの名無しさん
2009/03/10(火) 23:43:270694デフォルトの名無しさん
2009/03/10(火) 23:45:09>別におかしくはないよ。でもそれはIDisposableの「最低限度の実装」をしたクラスについてだよね。
>でも実際にIDisposableを実装したクラスは、それ以上の実装をしているのが普通なわけ。
最低限がアンマネージリソースの解放で、それ以上の実装をしているなら、もっと実行しないと駄目だろ。
0695デフォルトの名無しさん
2009/03/10(火) 23:45:45それは完全に別問題では?
Flushの動作はIDisposableの実装で求められている動作とは関係ないし。
内容がロストすることが常に不具合とも言い切れないし。
例えばユーザが明示的に「保存」を選択するまで保留するという手もある。
0696デフォルトの名無しさん
2009/03/10(火) 23:46:43>実際にIDisposableを実装したクラスは、それ以上の実装をしているのが普通
どんなすごい実装をしているかどうかなんてわからんだろ
だからDisposeしろって話になってるのがわからんのか?
0697デフォルトの名無しさん
2009/03/10(火) 23:47:06それ以上の実装をしていれば、「アンマネージリソースの解放」は
明示的にDispose()を呼ばずともサポートされる。
もちろん明示的に呼び出すこともできる。
0698デフォルトの名無しさん
2009/03/10(火) 23:47:46お前が荒らしレベルで、プログラマとして最底辺だということがわかったよ
0699デフォルトの名無しさん
2009/03/10(火) 23:49:30FCLのクラスについては実質保証されてるでしょ。
心配ならDispose(bool disposing)などが実装されているかMSDNで調べればいい。
原則としてDispose()を呼ぶという態度はいいとしても、
FCLのクラスに対して特別扱いするのは別に不自然じゃないと思うぞ。
基本はGCに任せるほうが必要or不必要の判断に関しては確実だしな。
0700デフォルトの名無しさん
2009/03/10(火) 23:50:34へーGCによってDispose()が実行されなくとも、プログラマが明示的にDisposeを呼ばずとも
自動的に解放してくれるわけね
すごいね
0701デフォルトの名無しさん
2009/03/10(火) 23:50:58それだと保存が押されたらDisposeすると言っているように感じるが、
その意図でレスしたの?
0702デフォルトの名無しさん
2009/03/10(火) 23:51:29もしFlush()が確実に必要な処理なら、MicrosoftはファイナライザやDisposeでFlush()されるように実装している。
そうなってないってことは、Flush()は必ずしも必要とされていないということだよ。君こそ大丈夫か?
0703デフォルトの名無しさん
2009/03/10(火) 23:52:03>FCLのクラスについては実質保証されてるでしょ。
なんでいきなり条件を付けた論議なの?
0704デフォルトの名無しさん
2009/03/10(火) 23:53:23usingで囲むべきだと思うがね
0705デフォルトの名無しさん
2009/03/10(火) 23:53:24って盲目的だなぁ。
Dispose() を呼ぶことで安全が買えるなら、よっぽど
その方が楽でしょ。
0706デフォルトの名無しさん
2009/03/10(火) 23:53:36どうやって明示的にDispose(closeその他も)しなくて、
アンマネージリソースが会話されるの?
0707デフォルトの名無しさん
2009/03/10(火) 23:54:00違う。保存が押されてから、Flush()なりClose()なりを呼べということだ。
もちろんソフトによりけりなので、すぐにFlush()やClose()を呼んだほうがいいこともある。
しかし保存が押されてからストリームに反映させたい仕様だと、すぐにFlush()するのは良くないだろう。
0708デフォルトの名無しさん
2009/03/10(火) 23:54:25using なしでも、スコープ抜けたら自動的に Dispose() が呼び出されるくらいでいいと思う。
何かしらの理由で呼ばれたくないときだけ、何かのメソッドを呼び出してマークするとか。
0709デフォルトの名無しさん
2009/03/10(火) 23:54:40そのために必要なのが、Disposeでしょ?
IDisposableが、なんでインターフェースとして存在しているか理解してる?
0710デフォルトの名無しさん
2009/03/10(火) 23:55:23c++/CLRはスコープ抜けるとDisposeが実行されるね
0711デフォルトの名無しさん
2009/03/10(火) 23:56:56どうしてアンマネージリソースにだけそう思うのか不思議。
>>705
Dispose()を呼び出すことによるその後のトラブルもありうるわけで。
>>706
まともなクラスなら、Finalize()経由でリソースは解放される。
マトモじゃないクラスなら、そんな仕様はないので、
自ら確実にdispose()を呼び出す必要がある。でもそれを忘れると、
メモリリークなどの危険性があるので、そんなクラスの使用はおすすめできない。
0712デフォルトの名無しさん
2009/03/10(火) 23:56:59訂正
C++/cli
0713デフォルトの名無しさん
2009/03/10(火) 23:57:55発生する可能性があるけどDisposeを呼ぶことで問題になる可能性はない
だから呼ぶべき
.NETのGCはマネージリソースを適切に管理するためのもので、
アンマネージリソースに関してはほとんどのクラスで解放までの
サポートはあってもそのタイミングに関しては関知しない
よってタイミングをGCにまかせるという選択肢はない
0714デフォルトの名無しさん
2009/03/10(火) 23:58:12Dispose() を呼び出したことによるトラブル、って今のところ出会ったことがない。
どんなトラブルがあんの?
0715デフォルトの名無しさん
2009/03/10(火) 23:58:18>もしFlush()が確実に必要な処理なら、MicrosoftはファイナライザやDisposeでFlush()されるように実装している。
>そうなってないってことは、Flush()は必ずしも必要とされていないということだよ。君こそ大丈夫か?
残念ながらMSの公式見解は違う。
あんまり推測で適当なこと言わない方が良いよ。
ttp://blogs.msdn.com/bclteam/archive/2004/08/13/214405.aspx
>The reason is that (normal) finalizers aren't ordered -
>any two objects may be finalized in any order,
>or at the same time if we add multiple finalizer threads in a future version.
というわけで解放順の問題。
0716デフォルトの名無しさん
2009/03/10(火) 23:59:14なるほど、FileをOpenするクラスや、データベースへの接続はするべきじゃないということですね。
あんたが普通に開発したこともないプログラマだということがよくわかったよwww
結局>>678が真理だったな
「アンマネージドリソース=メモリの消費」
だと思っていたサンデープログラマか。
死んでいいよ。
0717デフォルトの名無しさん
2009/03/11(水) 00:01:46アンマネージメモリは完全にGCの管理外だから
マネージメモリみたいにメモリ使用量と照らし合わせてGCが適切に管理してくれたりしない
0718デフォルトの名無しさん
2009/03/11(水) 00:02:51それは違うと思う。
ファイナライザの段階では先に中のStreamが無くなっている可能性があるため、
StreamReaderとWriterはFlushを呼びたくても呼べない。
一般にファイナライザでメンバがまだ残っている保証はないとMSDNにも書いてあるはず。
0719デフォルトの名無しさん
2009/03/11(水) 00:03:13そこにnormalって書いてあるとおり、それは普通の方法ではの話だろう。
そりゃ普通のFinalizeじゃ他のマネージオブジェクトにアクセスすべきではない。
しかし、もし確実にFlush()される必要があるなら、Attributeなどを使ってでも確実に実行されるようにするよ。
結局しないのは技術的問題というより、そうしないのが自然だからだよね。
>>716
ファイルにしろデータベースにしろ、普通は明示的にDispose()を呼ばなくても、
リソースは解放される。
0720デフォルトの名無しさん
2009/03/11(水) 00:07:030721デフォルトの名無しさん
2009/03/11(水) 00:07:26誰もそこは否定していないのでは?
ただ、アンマネージリソースを有するマネージオブジェクトの
寿命自体はGCで判断できるから、GCがそのFinalizeを呼び出してから、
アンマネージリソースを解放するというのでも通常遅くは無い。
それだけの話だと思うが。
0722デフォルトの名無しさん
2009/03/11(水) 00:08:52>ファイルにしろデータベースにしろ、普通は明示的にDispose()を呼ばなくても、リソースは解放される。
>ファイルにしろデータベースにしろ、普通は明示的にDispose()を呼ばなくても、リソースは解放される。
>ファイルにしろデータベースにしろ、普通は明示的にDispose()を呼ばなくても、リソースは解放される。
言ってる事理解してる?
0723デフォルトの名無しさん
2009/03/11(水) 00:09:10これが間違い
0724デフォルトの名無しさん
2009/03/11(水) 00:10:09CriticalFinalizerObjectを使うことになる
0725デフォルトの名無しさん
2009/03/11(水) 00:11:59遅くはないな。それが間違いというなら、C#のGC自体を否定しなきゃいけないかも。
GCが参照されていないインスタンスを破棄するタイミングが制御できないといっても、
通常そこまで時間はかからない。必要がなくなりゃどのみち勝手にリソースは解放される。
そのタイムラグが気になる状況なら明示的にDispose()を呼び出せ、としか言いようが無い。
0726デフォルトの名無しさん
2009/03/11(水) 00:12:43ファイナライザが呼ばれることが保証されてる?
0727デフォルトの名無しさん
2009/03/11(水) 00:13:13>そのタイムラグが気になる状況なら明示的にDispose()を呼び出せ、としか言いようが無い。
この後の及んで着地点かw
0728デフォルトの名無しさん
2009/03/11(水) 00:13:27usingやfinallyも同様です
>>724のようにCriticalFinalizerObjectを使う必要があります
0729デフォルトの名無しさん
2009/03/11(水) 00:14:29C#のGCはマネージリソースを管理するためのもの
話をまぜるな
>通常そこまで時間はかからない
だから通常とか普通とか適当なこというなって
0730デフォルトの名無しさん
2009/03/11(水) 00:15:07最初からそういう話だと思うが。
誰もDispose()を呼び出すななんて言ってない。
「絶対呼び出せ」とか言ってる人がいるから叩かれるだけで。
少なくともFCLの多くのクラスでは、絶対に呼び出す必要まではない。
0731デフォルトの名無しさん
2009/03/11(水) 00:17:26>C#は生産性高い。
>オブジェクト指向と関数型と手続き型が交じり合って溶け出すような見事なソースコードが作れる。
>しかし2chとか見ててもついてけてる奴はあまりいないみたいだな。
>ちょっと前に2chで関数型ユーザーを叩いてみた
ttp://d.hatena.ne.jp/haruyutaka/20090208/p3
「しかし2chとか見ててもついてけてる奴はあまりいないみたいだな。」
これが真実
0732デフォルトの名無しさん
2009/03/11(水) 00:17:54アンマネージリソースをC#のクラスにラップして利用してるんだから、
マネージリソースやGCは無関係ではないよ。
アンマネージリソースを解放すべきときは、
それをラップしたマネージリソースが不要になるときでもあるからね。
そのクラスのインスタンスが不要かどうかの判断は、
GCが一番良く知っている。GCに頼れば、他から参照が残っていたり、
解放したあとにそのインスタンスを利用することもないだろう。
0733デフォルトの名無しさん
2009/03/11(水) 00:18:52もう言ってる事が支離滅裂だな
0734デフォルトの名無しさん
2009/03/11(水) 00:19:27カスタムコントロールのリストをもたせたクラス用のCollectionEditorを作っています。
リストはカスタムコントロールの基底クラス(abstract)の集まりなので、
[Attribute]を使って登録する派生クラスのTypeを登録しようかと思ってます。
今、派生クラスの定義のところに
[Attribute名(typeof(派生クラス名))]
としているのですが、typeof〜の部分なしで同じようなことをする方法はありませんでしょうか?
ToolStripとかを見ていると上手くやっているように見えるのですが…
0735デフォルトの名無しさん
2009/03/11(水) 00:20:01少なくともお前の作ったソフトだけは使いたくない
これはここにいるすべての人が一致するところ
0736デフォルトの名無しさん
2009/03/11(水) 00:20:290737デフォルトの名無しさん
2009/03/11(水) 00:21:34ごく当たり前のことを言ってるに過ぎない。
そもそも、そこまでリソースのマネジメントに敏感にならざるを得ない状況なら、
C/C++などを使うべきだと思うよ。
もちろん、じゃあどんな場合もDisposeするなとも言ってないのであしからず。
0738デフォルトの名無しさん
2009/03/11(水) 00:22:14>もちろん、じゃあどんな場合もDisposeするなとも言ってないのであしからず。
どんどん変わってきてるじゃん 主張が
0739デフォルトの名無しさん
2009/03/11(水) 00:23:21じゃ、アンマネージドリソースを解放する場合などには、
Disposeする必要があるということは理解したということだな?
0740デフォルトの名無しさん
2009/03/11(水) 00:24:13上で紹介されてるじゃん。
あるオブジェクトが、他のクラスのメンバから参照されているときに、
そうと知らずにDisposeしてしまうケースとかね。
>>738
最初から同じ主張ですが。
0741デフォルトの名無しさん
2009/03/11(水) 00:25:23Dispose()じゃなくてDisposeなら、そう。
てか何度も言ってることだが。
0742デフォルトの名無しさん
2009/03/11(水) 00:26:340743デフォルトの名無しさん
2009/03/11(水) 00:26:50ソースコードによる自動シリアライズ に噴いたwwこの発想はなかったwww
0744デフォルトの名無しさん
2009/03/11(水) 00:30:41じゃ、互いの主張は一致したな。
アンマネージドリソースを使用している可能性があり、
もうこれ以上必要がなくなったらDisposeする
これでいいな?
0745デフォルトの名無しさん
2009/03/11(水) 00:32:13言ってることがよくわからない
その属性をどうやって処理するつもり?
0746デフォルトの名無しさん
2009/03/11(水) 00:32:58プログラマやっちゃダメだと思うんだが、このスレ見ると日本のプログラマって
本当底辺の職業なんだなという思いを深くするな。
だから、可及的速やかに開放すべき共有資源を抱えているクラスは必ずDisposeを
実装しているが、逆は真ならず、それだけの話なんだが。。
0747デフォルトの名無しさん
2009/03/11(水) 00:37:32「必ず」とは限らない。バグのあるクラスもあるからね。
お前さんの言ってるのは↑こんなレベルなんだが。
0748デフォルトの名無しさん
2009/03/11(水) 00:38:01というか、文意や話の流れ程度を読む知恵もない人間が
プログラマやっちゃダメだと思うんだが、このスレ見ると日本のプログラマって
本当底辺の職業なんだなという思いを深くするな。
だから、可及的速やかに開放すべき共有資源を抱えているクラスばかりが必ずDisposeを
実装しているわけじゃないってところをぐだくだ言ってるやつがいるという話なんだが。。
0749デフォルトの名無しさん
2009/03/11(水) 00:38:05>>743
なんという発想w
どうせならCodeDOMじゃなくてLCG使おうぜ
0750デフォルトの名無しさん
2009/03/11(水) 00:38:550751デフォルトの名無しさん
2009/03/11(水) 00:40:39なんか自信なくなってきた 皆凄すぎ
やっぱ参考書3,4冊じゃまだ追いつけない
0752デフォルトの名無しさん
2009/03/11(水) 00:43:02解放が遅れるんじゃなかった?
0753デフォルトの名無しさん
2009/03/11(水) 00:44:03実装するとGCのタイミングが遅れるのはファイナライザ
0754デフォルトの名無しさん
2009/03/11(水) 00:48:58初心者スレだからこんなことで熱くなるんだよ。
0755デフォルトの名無しさん
2009/03/11(水) 00:51:57IDisposableはインターフェースで実装されてるんだから
あれば実行すべきなんだよ
全部自動なんだぜって話ならobjectにdisposeが実装されてる
0756デフォルトの名無しさん
2009/03/11(水) 00:52:41部屋を散らかしていても、ママンが片付けてくれるから、自分で片付ける必要はない。
ってことだろ?
0757デフォルトの名無しさん
2009/03/11(水) 00:53:40ありがと
勘違いしてた
必ず一回目のgcで生き残ってしまうため、結果的に世代が上がってしまうって理由もさっき知った
0758デフォルトの名無しさん
2009/03/11(水) 00:55:04ママンはちらかった部屋をいつ片付けてくれるかわからない
A. だから自分で片付けたほうがすっきりして気持ちがいいんだぜ
B. でもいつかは片付けてくれるんだから放置しとくんだぜ
ってことじゃね?
0759デフォルトの名無しさん
2009/03/11(水) 00:56:01・Dispose別にいらないよ派
「サーモスタットがついてる器具なら、温度は一定以上にならないから、別にこまめに電源切る必要はないよ」
・Dispose呼んだほうがいいよ派
「サーモスタットついてるかもしれないけど電気代の節約のためにこまめに切ったほうがいいよ。」
・Dispose絶対要るよ派
「ストーブにそんな機能あるかどうか分からないから、とにかく切ったほうがいいよ」
0760デフォルトの名無しさん
2009/03/11(水) 00:58:04C#の場合は、
ママが片付けてくれるものは放置してママに任せて、そうでないものは仕方が無いから自分でするしかない
だな。
0761デフォルトの名無しさん
2009/03/11(水) 00:58:31というより
ママンがいつ冷蔵庫を締めてくれるかわからない
A 冷蔵庫にはアイスが入っていて、溶けると嫌だから自分で締めるぜ
B 冷蔵庫にはアイスが入っていなくてどうでもいいからママンに任せるぜ
ってことかな?
0762デフォルトの名無しさん
2009/03/11(水) 01:01:180763デフォルトの名無しさん
2009/03/11(水) 01:03:39さっきの奴は、アイスが入っているのにBを選択してしまって、
「溶けてはいるが、溶けてもアイスであることに変わりはない」
って主張していたってことか
納得
0764デフォルトの名無しさん
2009/03/11(水) 01:05:000765デフォルトの名無しさん
2009/03/11(水) 01:06:150766デフォルトの名無しさん
2009/03/11(水) 01:07:260767デフォルトの名無しさん
2009/03/11(水) 01:08:26アイスが入っている場合に冷蔵庫を締めるためにIMamanableを利用します
って書かれているんだが・・・
0768デフォルトの名無しさん
2009/03/11(水) 01:08:330769デフォルトの名無しさん
2009/03/11(水) 01:10:48IMamanableは、アイスが入っているので締めてね?というために実装するインターフェースです
従って常にアイスが入っているので、締めないとアイスが溶けちゃうんです
0770デフォルトの名無しさん
2009/03/11(水) 01:11:05そうなんだけど、実際にアイスが入ってるかどうかは常識で判断しろ、
って言い張ってる奴がいるのよ。
確かに、レアケースで入っていると見せかけて入ってないことがないわけ
じゃないんだけどさ。
0771デフォルトの名無しさん
2009/03/11(水) 01:12:030772デフォルトの名無しさん
2009/03/11(水) 01:13:45アイスだけにシンタックスシュガーです
0773デフォルトの名無しさん
2009/03/11(水) 01:14:39そうでないなら必ずしもこだわる必要はない。それだけのことだな。
0774デフォルトの名無しさん
2009/03/11(水) 01:14:50100回中95回なのか、って話。
前者にこだわる原理主義者と、後者でいいじゃんっていう
一般人の戦い。
0775デフォルトの名無しさん
2009/03/11(水) 01:15:12どのクラスがどれだけヤバいかは内部実装によるので外部仕様から正確な判定は困難
なら、必ず呼んどけ
というのは別におかしなことじゃない
それを
呼ばなくてもよい場合がある
それは常識で判断できる
だから呼ぶか呼ばないかは常識で判断しろ
なんていうやつがいるから混乱する
0776デフォルトの名無しさん
2009/03/11(水) 01:15:50それは、アイスが入っていないのに、アイスが入ってるから締めてねって言うようなもんじゃんw
アイスが入ってると思って締めざるを得ないw
0777デフォルトの名無しさん
2009/03/11(水) 01:17:23それはクラス設計に問題が…
「Dispose呼んでもバグがある可能性があるから、
呼ばないほうがいい」って言ってるのと、内容は正反対でも同レベルだぞ。
0778デフォルトの名無しさん
2009/03/11(水) 01:17:48その残りの5回中にFileStreamを開いたり、DBに接続してたりしてたら
問題になるから回数や割合の問題じゃないんだが・・・
0779デフォルトの名無しさん
2009/03/11(水) 01:20:42だからファイナライザでDispose処理をしておくことが推奨されている
IDisposableを実装するなら、別にファイナライザを定義する必要はないが、
最終的にリソースが解放されるようにしておくのは当然
0780デフォルトの名無しさん
2009/03/11(水) 01:21:07全然違う
Disposeはインスタンスの寿命が終了することを前提で呼ばれるメソッドで、
設計もそのようになされているから、インスタンスを使わなくなった時に
Disposeを実行して問題が発生するようなら、むしろそのほうがおかしい。
0781デフォルトの名無しさん
2009/03/11(水) 01:21:21でも、呼んだら問題が発生するから呼ばないでください、って注意書きがあれば
呼ばないでしょ?
ほら! 100回中100回じゃないじゃないか! って言ってるのが原理主義者。
0782デフォルトの名無しさん
2009/03/11(水) 01:22:45リソースの即時解放として実行するのはまったく問題ないじゃん
0783デフォルトの名無しさん
2009/03/11(水) 01:23:56そういうこと言ってるんじゃなくて、Disposeメソッドそのものに
バグがあるかもしれないでしょってことを言ってるんだが
Dispose呼ばなきゃ不具合が起きるクラスなんてそれと同レベル
0784デフォルトの名無しさん
2009/03/11(水) 01:24:29それアイスが入ってるけど、冷蔵庫しめないで下さいねって注意するぐらい愚問
0785デフォルトの名無しさん
2009/03/11(水) 01:25:510786デフォルトの名無しさん
2009/03/11(水) 01:27:46終了処理を行わないと問題が起きるAPIなんて糞あるだろ?
その終了処理を行うために実装されるのがIDisposableで、Disposeなんだから、
極端に言えば、Dispose呼ばなきゃいけないと不具合がおきるクラスなんて
腐るほどあるからDisposeしたほうがいいっていってるわけ。
これが、なんで理解できんの?
0787デフォルトの名無しさん
2009/03/11(水) 01:30:39C使って生API叩いてるなら至極正論だが、
.NETの世界でC#使っているなら、そうじゃいけないだろ。
結局、「メモリを確保したら必ず忘れずに解放しましょう」
っていう単純なルールを守るのが一番難しいし、ガベージコレクタの
無いCのような言語では最もエラーの温床となりやすい。
そのエラーを極力無くしましょうってのがC#なんだから、
終了処理を必須とするクラスの設計は避けたほうがいい。
0788デフォルトの名無しさん
2009/03/11(水) 01:31:39>終了処理を必須とするクラスの設計は避けたほうがいい。
だから、終了処理が必須だからDisposeがあるといってるんですw
0789デフォルトの名無しさん
2009/03/11(水) 01:32:30まずこの具体例を挙げて。どういう状況かもコードつきで詳しく。
0790デフォルトの名無しさん
2009/03/11(水) 01:33:52終了処理の明示的な呼び出しを忘れてもカバーできるように
設計することが推奨されているし、そうするのが当然。
0791デフォルトの名無しさん
2009/03/11(水) 01:36:36またデマカセが始まったw
0792デフォルトの名無しさん
2009/03/11(水) 01:37:080793デフォルトの名無しさん
2009/03/11(水) 01:39:24すぐに解放しないと問題がある場合があるから、
すぐにした方がいいっていってるんじゃんかよ
0794デフォルトの名無しさん
2009/03/11(水) 01:40:040795デフォルトの名無しさん
2009/03/11(水) 01:40:33いやMSDN読めば?
そういう目的のために存在するんだから、必須だからDisposeがあると考えるのが必然
0796デフォルトの名無しさん
2009/03/11(水) 01:41:08すぐに解放しないと問題が起きるならすぐにすべきに決まってるだろ。アホか?
0797デフォルトの名無しさん
2009/03/11(水) 01:42:16>終了処理を必須とするクラスの設計は避けたほうがいい。
って言う奴がいるから、わざわざ指摘してるんでしょうがw
0798デフォルトの名無しさん
2009/03/11(水) 01:43:24どこにそういうことが書いてあるの?きちんと引用して示してね。
0799デフォルトの名無しさん
2009/03/11(水) 01:44:10リファレンス引く事も出来ないバカ
0800デフォルトの名無しさん
2009/03/11(水) 01:45:42ごまかさないで示せよ
「終了処理が必須だからDisposableがある」なんてどこに載ってるの?
0801デフォルトの名無しさん
2009/03/11(水) 01:46:05なんども出てるけど、はいどうぞ
>このインターフェイスは主に、アンマネージ リソースを解放するために使用します。
http://msdn.microsoft.com/ja-jp/library/system.idisposable.aspx
0802デフォルトの名無しさん
2009/03/11(水) 01:48:21「終了処理」なんて言葉は書かれていないよね。
ごまかさないようにね。
アンマネージリソースの解放 → 終了処理 かもしれないけど、
終了処理 → アンマネージリソースの解放 は成り立たないからね。
十分条件・必要条件も分からないバカが書き込みしてるのかな?
言葉はきちんと使おうね。まあ揚げ足取りだと吠えるしかできないんだろうけどw
0803デフォルトの名無しさん
2009/03/11(水) 01:49:05はいどうぞ
>このインターフェイスは、Disposeメソッドだけを定義している。
>使い終わったら確実に資源を解放する処理が必要なクラスは、
>このインターフェイスを実装して、解放処理を記述するのが.NET Frameworkでのお約束である。
0804デフォルトの名無しさん
2009/03/11(水) 01:50:33あのー頭悪いんですか〜?
「終了処理」という言葉を聞いてるんだから、
せめてその言葉が出てくるところを引用しようね。
0805デフォルトの名無しさん
2009/03/11(水) 01:51:570806デフォルトの名無しさん
2009/03/11(水) 01:52:44いやいや、明示的なオブジェクトを破棄するためにDisposeを実装するんだから、間違いじゃないだろ?
何いってんだ?ww
0807デフォルトの名無しさん
2009/03/11(水) 01:53:59>「終了処理」という言葉を聞いてるんだから、 せめてその言葉が出てくるところを引用しようね。
必要条件とか言ってるんだから、意味を汲む能力ぐらいあんだろ?
0808デフォルトの名無しさん
2009/03/11(水) 01:54:33横槍だが、どんどん無知が露呈してるぞ
明示的なオブジェクトの破棄ではなく、明示的なアンマネージリソースの破棄な
オブジェクトというとマネージオブジェクトも含むように聞こえる
0809デフォルトの名無しさん
2009/03/11(水) 01:55:55なんだ、結局「終了処理」ってのは示せないままか。
とんだヘタレだなwww
0810デフォルトの名無しさん
2009/03/11(水) 01:56:530811デフォルトの名無しさん
2009/03/11(水) 01:56:53暗黙的なガベージコレクタでの破棄はFinalize
明示的なオブジェクトの破棄はDisposeだっていってんだろ?
必要条件とかを覚える知識だけあって、文意を汲み取る能力はゼロかよ。
0812デフォルトの名無しさん
2009/03/11(水) 01:57:130813デフォルトの名無しさん
2009/03/11(水) 01:57:440814デフォルトの名無しさん
2009/03/11(水) 01:58:38オブジェクトを解放する処理=終了処理と換言しただけでしょうが。
その言葉を使用した文献が見あたらないと負けなの?w
そういう意味の文献があればいいんでないの?w
しぬの?w
0815デフォルトの名無しさん
2009/03/11(水) 01:58:380816デフォルトの名無しさん
2009/03/11(水) 01:59:51完全に間違い。
Disposeはマネージオブジェクトを破棄するところではないし、
破棄できるものでもない。オブジェクト≠アンマネージリソースだよ。
カーネルオブジェクトとかだけをさす言葉じゃないから。
聞いてると用語の使い方が甘い印象を受ける。素人さんかな?
0817デフォルトの名無しさん
2009/03/11(水) 02:01:14だからオブジェクトじゃないと何度言ったら…。
あ、そっか。荒らしだったのか。相手にするだけ無駄だな…。
0818デフォルトの名無しさん
2009/03/11(水) 02:02:230819デフォルトの名無しさん
2009/03/11(水) 02:04:09>>817
だから、.netで管理できないリソースを明示的に解放するためにDisposeがあるっていってんの
0820デフォルトの名無しさん
2009/03/11(水) 02:06:25>このインターフェイスは、Disposeメソッドだけを定義している。
>使い終わったら確実に資源を解放する処理が必要なクラスは、
>このインターフェイスを実装して、解放処理を記述するのが.NET Frameworkでのお約束である。
んで、これに対する返事もらってないんだけど?
0821デフォルトの名無しさん
2009/03/11(水) 02:09:57何が正しいのやら…
口論終わったらまとめてくれるとありがたい
じゃ、おやすみノシ
0822デフォルトの名無しさん
2009/03/11(水) 02:11:35Disposeがあればしておけば間違いない
たったこんだけ
0823デフォルトの名無しさん
2009/03/11(水) 02:14:06ママンはいつまでも面倒みてくれないぞw
0824デフォルトの名無しさん
2009/03/11(水) 02:15:59今頃>>788は顔真っ赤だろうなw
0825デフォルトの名無しさん
2009/03/11(水) 02:18:10逆だろ>>787が顔真っ赤だろ
0826デフォルトの名無しさん
2009/03/11(水) 02:21:290827デフォルトの名無しさん
2009/03/11(水) 02:21:56アンマネージドリソースを解放する目的で存在するのなら、
disposeを実行するのは絶対に必須だと思うぞ?
0828デフォルトの名無しさん
2009/03/11(水) 02:23:120829デフォルトの名無しさん
2009/03/11(水) 02:26:130830デフォルトの名無しさん
2009/03/11(水) 02:28:360831デフォルトの名無しさん
2009/03/11(水) 02:30:31推奨しません。CLRのガベージコレクタはとてもよくできているので、それに任せたほうが
いいからです。ガベージコレクタには、アプリケーションコードがオブジェクトにアクセスし
なくなるタイミングが分かっています。そしてそのタイミングが過ぎたときにだけ、オブジェクト
を回収します。アプリケーションコードでDisposeメソッドやCloseメソッドを呼び出すということは、
アプリケーションは自分がオブジェクトにアクセスする必要がなくなるタイミングが分かっている
と宣言をしていることになります。たいていのアプリケーションでは、オブジェクトが間違いなく
不要になったことがわかることはありません。
例えば、新しいオブジェクトを作成して、その参照を他のメソッドの引数に渡した場合、
そのメソッドが渡された参照を自分のオブジェクトの内部フィールド(これはルートになります)
に格納するかもしれません。メソッドを呼び出した側では、このような動作をしているかどうかは
分かりません。この場合、呼び出し側がDisposeやCloseを呼び出してしまって、その後で
他のコードがそのオブジェクトを利用しようとすると、ObjectDisposedExceptionがスローされる
ことになります。
筆者は、DisposeやCloseを自分のコードで呼び出すのは、次の2つの場合に限ることを
推奨します。1つは、リソースを解放しなければならないことが分かっている時(開いている
ファイルを削除しようとするときなど)です。もう1つは、DisposeまたはCloseを呼び出すことが
間違いなく安全で、しかもオブジェクトをファイナライゼーションリストから削除して、
オブジェクトが昇格するのを防ぐことで、パフォーマンスを向上させたい場合です。
これ以上に説得力のある意見言えるやつ、このスレにはいないわな
有名なAdvanced Windowsとか、これまで何冊も出してる重鎮だろ
書籍でFramework Class LibararyやCLRの実装のミスとかも指摘してるぐらいだからなw
0832デフォルトの名無しさん
2009/03/11(水) 02:30:520833デフォルトの名無しさん
2009/03/11(水) 02:33:49>リソースを解放しなければならないことが分かっている時
まさに今述べてることじゃん
解放しなければ
0834デフォルトの名無しさん
2009/03/11(水) 02:35:440835デフォルトの名無しさん
2009/03/11(水) 02:42:300836デフォルトの名無しさん
2009/03/11(水) 02:43:49たとえばDBやhttpなどの接続プールを管理しているファクトリからストリームを貰ったときに
自分が使い終わったからといって、勝手に閉じるとママに怒られると思うんですが
そういうケースはどう扱うのが正当ですか?
0837デフォルトの名無しさん
2009/03/11(水) 02:49:42そのままほっとけばGCが回収してくれると主張する人がいる
0838デフォルトの名無しさん
2009/03/11(水) 02:52:08だ・か・ら
>アプリケーションコードでDisposeメソッドやCloseメソッドを呼び出すということは、
>アプリケーションは自分がオブジェクトにアクセスする必要がなくなるタイミングが分かっていると宣言をしていることになります。
って書いてあるだろ。つまりオブジェクトが必要無くなったときにdisposeするかどうかを論じてるんだから、
最後の2つの場合について論じているわけよ
0839660
2009/03/11(水) 02:57:040840デフォルトの名無しさん
2009/03/11(水) 02:59:52していいかわからなかったらするな
これでいいよ
0841デフォルトの名無しさん
2009/03/11(水) 03:07:10していいかわからなかったらしておいたほうがいいだろ
0842デフォルトの名無しさん
2009/03/11(水) 04:32:20B.アイスがハーゲンダッツなのでちゃんと締める。
0843デフォルトの名無しさん
2009/03/11(水) 05:00:01ソース見たわけじゃないけど普通はラップしてんの返して
dispose(){
stream.flush;
再利用していいよ=true;
}
本当のdispose(){
stream.dispose;
}
じゃないかね
上は利用者が使って下はファクトリが使う
0844デフォルトの名無しさん
2009/03/11(水) 05:51:530845デフォルトの名無しさん
2009/03/11(水) 06:58:560846デフォルトの名無しさん
2009/03/11(水) 07:50:07「Dispose 実装してるクラスの Dispose 呼び出し不要」が
ごちゃまぜになってない?
manage リソースで完結してるなら Dispose そもそも実装しなくてよくて GC まかせ推奨。
unmanage リソースの解放が必要にのみ Dispose とか Close 実装して呼び出す。
ってのが >>831 の意味だと思うんだけど。
0847デフォルトの名無しさん
2009/03/11(水) 08:32:45Disposeできるならしとけ
よくわからないならDispose()を明示的に呼ばないといけないような使い方は避けろ
usingが使える使い方で使え
0848デフォルトの名無しさん
2009/03/11(水) 08:58:150849デフォルトの名無しさん
2009/03/11(水) 09:02:17初心者スレ的にはそもそもそういう状況を作らないように気を付けるべきだと思うけど
0850デフォルトの名無しさん
2009/03/11(水) 09:22:22あるループ内でDataTableをデータベースから取得するだけの部分でチェックしてみたんだが
datatable dt;
for (int i=0;i<100000;i++)
dt = データ取得;
これで延々diposeでずに処理するのと
データ取得の後にdt.dipose入れるとのでは
メモリの使用量が結構違うな
前者の方が使用量が常に多い
当然の結果だとは思うが、メモリ少ないような環境とかだと有効なのかもね
0851デフォルトの名無しさん
2009/03/11(水) 11:27:03クラスの場合Disposeは実装したほうが良いですか?
CloseHandleが必要でなければいらない?
0852デフォルトの名無しさん
2009/03/11(水) 11:30:260853デフォルトの名無しさん
2009/03/11(水) 11:44:40俺ならDispose-Finalize のパターンで確実にハンドル閉じるようにすると思う
0854デフォルトの名無しさん
2009/03/11(水) 12:57:180855デフォルトの名無しさん
2009/03/11(水) 13:02:500856デフォルトの名無しさん
2009/03/11(水) 13:12:200857デフォルトの名無しさん
2009/03/11(水) 13:13:42これじゃだめ?
ttp://msdn.microsoft.com/ja-jp/library/system.io.packaging.zippackage(VS.80).aspx
0858857
2009/03/11(水) 13:15:02フレームワークにrar扱うライブラリなんてないさ
0859デフォルトの名無しさん
2009/03/11(水) 13:28:280860デフォルトの名無しさん
2009/03/11(水) 13:47:32おっぉー!
0861デフォルトの名無しさん
2009/03/11(水) 14:10:220862デフォルトの名無しさん
2009/03/11(水) 14:57:010863デフォルトの名無しさん
2009/03/11(水) 15:03:300864デフォルトの名無しさん
2009/03/11(水) 15:08:41保存とかのメソッドありますか?
読み取り→正規表現→保存
でおk?
0865567
2009/03/11(水) 15:09:21って書き方ってどういう意味になるんですかね?
0866デフォルトの名無しさん
2009/03/11(水) 15:10:51取り敢えずMSDNでC#の演算子を一通り調べて
0867デフォルトの名無しさん
2009/03/11(水) 15:21:18何か作る物決めてつくっちゃったほうが勉強になる気がするぞ
0868デフォルトの名無しさん
2009/03/11(水) 20:05:410869デフォルトの名無しさん
2009/03/11(水) 20:17:090870デフォルトの名無しさん
2009/03/11(水) 20:18:270871デフォルトの名無しさん
2009/03/11(水) 20:23:22電卓はちょっと難しすぎるかも
○×ゲームとか
0872デフォルトの名無しさん
2009/03/11(水) 20:28:56情報系の学校行っても身につかなくて全然違うことやってる友達とかいるし
お前ら作ってておもしろいと思ったものある?
0873デフォルトの名無しさん
2009/03/11(水) 20:31:36開発がページ単位なので区切りが付きやすいからメリハリが付く
0874デフォルトの名無しさん
2009/03/11(水) 20:39:06身につかないんじゃなくて身につけないんだよ
0875デフォルトの名無しさん
2009/03/11(水) 20:58:560876デフォルトの名無しさん
2009/03/11(水) 21:03:37つまらなくても勉強しておいたほうが後々役に立つこともある
0877デフォルトの名無しさん
2009/03/11(水) 21:07:520878デフォルトの名無しさん
2009/03/11(水) 23:18:24C#でつくったDBソフトはフォルダReleaseの部分を使用者のPCにコピペするのが簡単なインストールなのでしょうか?
0879デフォルトの名無しさん
2009/03/11(水) 23:24:060880デフォルトの名無しさん
2009/03/11(水) 23:24:240881デフォルトの名無しさん
2009/03/11(水) 23:24:270882デフォルトの名無しさん
2009/03/11(水) 23:25:020883デフォルトの名無しさん
2009/03/11(水) 23:27:220884デフォルトの名無しさん
2009/03/11(水) 23:31:14C畑で育った俺が果たしてついていけるのか心配だ
0885デフォルトの名無しさん
2009/03/11(水) 23:38:39C#極めたもっといろいろやりたい人が
Cへ行くイメージ お互い頑張りましょう
0886デフォルトの名無しさん
2009/03/11(水) 23:43:18俺もつい最近始めたばっか。
Cとアセンブラの泥臭い仕事を10年以上やり続けてたから少し不安だったが、
やってみたらコレが結構楽しいぜ
0887デフォルトの名無しさん
2009/03/11(水) 23:44:36sqlserverマネージメントスタジオから見ようと(ファイル-開く)すると拒否られまくりなんですけど?
0888デフォルトの名無しさん
2009/03/11(水) 23:45:09CとAPIの参考書は買ってあるんだけど何故か遠い・・・
0889デフォルトの名無しさん
2009/03/11(水) 23:47:14見られるよ
0890デフォルトの名無しさん
2009/03/11(水) 23:48:200891デフォルトの名無しさん
2009/03/11(水) 23:49:57String s = s1+s2;
って書けば済むとこ
strlenで大きさ取ってmallocしてstrcpyしてfree
0892デフォルトの名無しさん
2009/03/11(水) 23:50:25どうやって?!・・・??
0893デフォルトの名無しさん
2009/03/11(水) 23:51:05なんか かっこいい・・・
0894デフォルトの名無しさん
2009/03/11(水) 23:54:10C++程ではないが、煩雑化が激しいよ
API駆使してソケット使ったアプリとかもうね、、、
0895デフォルトの名無しさん
2009/03/12(木) 00:10:35比較するんなら
0896デフォルトの名無しさん
2009/03/12(木) 00:22:08騙されちゃだめだ。
難しいことしてる気分になれるから自己満足はできるかもしれないけども。
0897デフォルトの名無しさん
2009/03/12(木) 00:26:24できないぉ
0898デフォルトの名無しさん
2009/03/12(木) 00:42:27できたよ
0899デフォルトの名無しさん
2009/03/12(木) 00:45:29string なんちゃらって書いてビルドエラーになると()つけて通った通ったじゃ、なんか違う気がしまして。
なんか決まって右辺のような気がするのですが
0900デフォルトの名無しさん
2009/03/12(木) 00:47:470901デフォルトの名無しさん
2009/03/12(木) 00:50:04double → int で小数点以下を切るとか
int → string で文字として扱うとか
0902デフォルトの名無しさん
2009/03/12(木) 01:00:210903デフォルトの名無しさん
2009/03/12(木) 01:00:26最近キャストの括弧も面倒になってきた…
0904デフォルトの名無しさん
2009/03/12(木) 01:08:410905デフォルトの名無しさん
2009/03/12(木) 01:31:230906デフォルトの名無しさん
2009/03/12(木) 10:02:210907デフォルトの名無しさん
2009/03/12(木) 10:08:290908デフォルトの名無しさん
2009/03/12(木) 11:00:04ポインタを使うだけなら簡単だが、
ポインタを使ったプログラムのデバッグは面倒だな
C#なら予想外の挙動(例外発生とか、変数の値がおかしいとか)を辿っていけばバグの原因に辿りつくが、
Cだと全く関係ない場所にバグの影響が現れたりする
0909デフォルトの名無しさん
2009/03/12(木) 11:43:140910デフォルトの名無しさん
2009/03/12(木) 12:49:23Disposeを実装した方がいいのでしょうか。また、その場合何をどのように
処理すれば良いのでしょうか…。
[StructLayout(LayoutKind.Sequential)]
struct GUITHREADINFO
{
//省略
}
public Point GetCaretPosition()
{
IntPtr activehWnd = GetForegroundWindow();
int nullProcessId;
uint targetThreadId = GetWindowThreadProcessId(activehWnd, out nullProcessId);
GUITHREADINFO threadInfo = new GUITHREADINFO();
threadInfo.cbSize = Marshal.SizeOf(threadInfo);
GetGUIThreadInfo(targetThreadId, out threadInfo);
Point P = new Point(threadInfo.rcCaret.X, threadInfo.rcCaret.Y);
bool ret = ClientToScreen(threadInfo.hwndFocus, ref P);
return P;
}
0911デフォルトの名無しさん
2009/03/12(木) 12:55:490912デフォルトの名無しさん
2009/03/12(木) 15:17:37あれは嫌がらせの意味でわざと糞長くしてるんでしょ
C#には安全じゃないキャストなんかないからそんな必要ないけど
0913デフォルトの名無しさん
2009/03/12(木) 16:44:44おかげでユーザーが種類を増やせた。static_pointer_cast<T> とか。
狙ってたのかどうなのか知らんが。
0914デフォルトの名無しさん
2009/03/12(木) 18:25:21タブつきのカラーダイアログが表示されると思うんだけど
(システム定義 Webとか)
ただのABC順のドロップダウンしか表示されなくなったんだけど、
設定の問題?VS2008のバグ?
0915デフォルトの名無しさん
2009/03/12(木) 20:13:07ぽんと該当箇所を抜き出せるメソッドがあったら教えてください
0916デフォルトの名無しさん
2009/03/12(木) 20:17:300917デフォルトの名無しさん
2009/03/12(木) 20:18:110918デフォルトの名無しさん
2009/03/12(木) 20:18:23こんなのかな。
正規表現ってほかにもやりかたが存在していそうだけれど。
0919デフォルトの名無しさん
2009/03/12(木) 20:21:110920デフォルトの名無しさん
2009/03/12(木) 22:59:26アニメーションするプログラム(GUI付)を作りたいんですが、
どうすればいいのか方法が良く分かりません・・。
マルチスレッドとかしないといけないみたいでややこしいです。
0921デフォルトの名無しさん
2009/03/12(木) 23:01:420922デフォルトの名無しさん
2009/03/13(金) 00:16:430923デフォルトの名無しさん
2009/03/13(金) 00:22:32JavaScriptSerializerとかDataContractJsonSerializerとか。
0924デフォルトの名無しさん
2009/03/13(金) 00:23:370925デフォルトの名無しさん
2009/03/13(金) 01:41:29簡単に把握する方法ってあるのでしょうか?
0926デフォルトの名無しさん
2009/03/13(金) 01:58:440927デフォルトの名無しさん
2009/03/13(金) 16:06:47クラスのインスタンスが必要とするメモリサイズを知る方法
ありますか?
0928デフォルトの名無しさん
2009/03/13(金) 16:07:550929デフォルトの名無しさん
2009/03/13(金) 16:11:520930デフォルトの名無しさん
2009/03/13(金) 16:12:23そうですか。
タスクマネージャーで見るとかしかないですかね。
0931デフォルトの名無しさん
2009/03/13(金) 16:25:52VS2008のSetupProjectでインストール時に
regsvr32 を実行してdllを登録したいのですけど
regsvr32.exe xxx.dllを
実行する hoge.exeをつくって
カスタム動作でインストール時にコンソールhoge.exeを実行する
方法しか思いつきませんでした。
インストール時に直接コンソールを叩く設定はできますか?
0932デフォルトの名無しさん
2009/03/13(金) 16:33:50Marshal.SizeOf()
構造体かStructLayoutAttributeでフィールドの配置方法を明示したクラスに使える
0933デフォルトの名無しさん
2009/03/13(金) 16:38:07目安にしかならんだろ
0934デフォルトの名無しさん
2009/03/13(金) 16:47:170935デフォルトの名無しさん
2009/03/13(金) 17:38:440936デフォルトの名無しさん
2009/03/13(金) 23:15:36実装に依存しすぎるからそれぞれ調べないといけないけど、
リフレクションと unsafe コード駆使すればある程度は調べる
ことはできる。やり方?自分でやれ
>>932
それはマーシャリング後のサイズになってしまう
0937デフォルトの名無しさん
2009/03/13(金) 23:41:58クラスの中に大きなサイズの画像データへのポインタとかを持ってないんならそんな感じだな
0938デフォルトの名無しさん
2009/03/14(土) 01:40:29どのぐらいのコード行が入ってるかわからないし、展開したとき入れ子になってたり現在地もわからなくなるんですが
普通はファイルで分けるか、クラスとかメソッドでわけるでいいんですよね?
#region使うメリットって事実上あるんですか?
0939デフォルトの名無しさん
2009/03/14(土) 01:47:300940デフォルトの名無しさん
2009/03/14(土) 01:47:40深くつながりあう可能性が高いから同一ファイル内にしているわけで
展開圧縮なんか繰り返すのはめんどくさいし全体を把握するためにずっと展開しっぱなしなのが普通
MSのサンプルなんかは使いまくってるからウザいし、全部展開してもコードが#regionコードがゴミになっててウザい
0941デフォルトの名無しさん
2009/03/14(土) 01:48:07メンバのprivate変数でまとめたかったり
プロパティでまとめたかったり
overrideしたメソッドや
protectedなメソッドとでまとめたったり、
いろいろあるから人それぞれでしょ。
単純に短くすることができれば見やすくなるから便利。
0942デフォルトの名無しさん
2009/03/14(土) 01:52:19細かくregionされててウザイばあいもあるけど、
ソースを把握して表示させる必要のないコードはあると思うから、
そういうのを非表示にできるという意味で便利だと思うけどね
0943デフォルトの名無しさん
2009/03/14(土) 01:53:18デザイナがそうなんだからそういう使い方が正しい
むしろ変更修正する必要のないものまで表示させとく意味がわからない
0944デフォルトの名無しさん
2009/03/14(土) 01:55:02ブックマークで飛びまくった方がすっきりする
展開閉じてると中身忘れるしホイールでぐるぐるやってればいつも目について忘れなくなる
0945デフォルトの名無しさん
2009/03/14(土) 01:58:19メンバ変数も必要ないし
0946デフォルトの名無しさん
2009/03/14(土) 02:03:20そこは完全にC#というかJavaの糞仕様
使用するメソッドやプロパティをDelphiみたいにヘッダに定義する形にすればよかった
そうすればregionの大きな役割の一つは達成できたはず
0947デフォルトの名無しさん
2009/03/14(土) 02:09:31ここに突っ込むべきでは?
0948デフォルトの名無しさん
2009/03/14(土) 02:11:45行をダブルクリックで展開するけど逆はできないし
展開したときのendregionの位置が見つからないのがダメすぎる
また入れ子かよ!どこがendだよ!みたいな
#region内コードに背景色設定が出来るようになるまで使うことはない
0949デフォルトの名無しさん
2009/03/14(土) 02:13:15ショートカット使えよ
0950デフォルトの名無しさん
2009/03/14(土) 02:21:44なんで、入れ子とか、どこがendかよみたいに考える必要があるの?
0951デフォルトの名無しさん
2009/03/14(土) 02:22:43昔から
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
で区切ったりされてるのになんで視覚的にまとめたいんだってことにMSは気がつかないんだろうね
#endregionの場所を探すとか、悪化してるだけだ
0952デフォルトの名無しさん
2009/03/14(土) 02:27:530953デフォルトの名無しさん
2009/03/14(土) 02:29:430954デフォルトの名無しさん
2009/03/14(土) 02:29:540955デフォルトの名無しさん
2009/03/14(土) 02:31:38#region コメント ///////////////////////////////////////////
#endregion
こんな感じで使ってれば探す必要ないけど
どうでもいい#regionごときにこだわるのはなぜ?
0956デフォルトの名無しさん
2009/03/14(土) 02:38:08なんかもっとうざいと思う
タグ名指定で表示非表示出来ないとコード上のゴミでしかない
0957デフォルトの名無しさん
2009/03/14(土) 02:46:00なんで、そこまでregionの必要性を知りたいのかわからない。
<summary>はxmlでの表記の仕様だからしょうがないね。
0958デフォルトの名無しさん
2009/03/14(土) 02:59:40普通は範囲選択して折りたたんで終わり
しかし、普通はそれすらやる人は少ない
こだわるほどの機能じゃない。
結論:わざわざコードを書いてまで使うメリットは無い
0959デフォルトの名無しさん
2009/03/14(土) 03:01:50折りたためないより折りたためるほうが良い
0960デフォルトの名無しさん
2009/03/14(土) 03:04:41で、書いた後に#regionで畳むようにしてる。
0961デフォルトの名無しさん
2009/03/14(土) 04:19:020962デフォルトの名無しさん
2009/03/14(土) 04:31:510963デフォルトの名無しさん
2009/03/14(土) 04:32:380964デフォルトの名無しさん
2009/03/14(土) 13:26:54っていうか、使わないコーディングなんて考えられないけど。
まあ小さなコードばっか書いてる人間には不要なのは確かだが。
>>960
そこは#region設定しなくても普通に畳めるよw
知らなかったのか。
0965デフォルトの名無しさん
2009/03/14(土) 13:30:58入れ子にはあんまりしない
0966デフォルトの名無しさん
2009/03/14(土) 13:36:51#regionが必要なサイズのメソッドに膨れてること自体が問題だし。
0967デフォルトの名無しさん
2009/03/14(土) 13:40:50どんな被害妄想だよ
0968デフォルトの名無しさん
2009/03/14(土) 13:48:36スコープは考慮するけど。
if (abc)
{
#region
...
#endregion
}
0969デフォルトの名無しさん
2009/03/14(土) 13:50:31ネタか本気か知らんけど
0970デフォルトの名無しさん
2009/03/14(土) 14:33:250971デフォルトの名無しさん
2009/03/14(土) 15:02:58ありえない、それこそDelphiのクソ仕様。
そういうのが見たければオブジェクトブラウザがあるだろ。
0972デフォルトの名無しさん
2009/03/14(土) 15:06:350973デフォルトの名無しさん
2009/03/14(土) 15:08:18ただ、複数行の<summary>は折りたたみ時に「///<summary>...」になってしまって
コメントの役割を果たさなくなるのが嫌い。
この辺はVS側がもっと融通聞かせてくれてもイイと思う。
0974デフォルトの名無しさん
2009/03/14(土) 16:37:33#regionは使わなくなった
0975デフォルトの名無しさん
2009/03/14(土) 16:55:53それぞれリストに追加していくようなコードになるんだけど、さすがに
#regionで区切らないと訳が分からなくなる。メソッドを分けようにも、
どう考えても処理の最小単位で分割できないし。
どうして球とか立方体とか基本的なオブジェクトが用意されていないのか・・・。
0976デフォルトの名無しさん
2009/03/15(日) 01:11:51VBみたいにしてくれたらいいのにな。
0977デフォルトの名無しさん
2009/03/15(日) 01:33:28逆だよ
ObjectPascalのように定義すれば、IDEがメソッドやプロパティを自動で書いてくれる
コーディングの手間が省けるし、ソースを見る側はそこさえ見れば中身がだいたいわかる。
超便利。
0978デフォルトの名無しさん
2009/03/15(日) 01:52:51.NETアプリって総じて重いイメージがあるのですが、なぜそこは問題視されていないんでしょうか?
かなり致命的だと思うのですが…。
0979デフォルトの名無しさん
2009/03/15(日) 01:55:20Ngen使えカス
0980デフォルトの名無しさん
2009/03/15(日) 01:58:11速度をできるだけ出さなければならないような分野ならともかく
通常の使用ではそれほど問題にならないから。
0981デフォルトの名無しさん
2009/03/15(日) 01:59:21VB6よりは3倍くらい速いよ。
0982デフォルトの名無しさん
2009/03/15(日) 01:59:370983デフォルトの名無しさん
2009/03/15(日) 02:01:10話変わるけど次スレ立てようか?
0984デフォルトの名無しさん
2009/03/15(日) 02:12:32いや実際、小さなフリーソフトでも.NETアプリだと遅いんですよ。
特に起動に数秒かかります。
起動した後は速いですけど、起動しっぱなしでもない限りやはり起動の遅さは気になります。
これはなぜ問題視されていないんでしょうか?
0985デフォルトの名無しさん
2009/03/15(日) 02:14:340986デフォルトの名無しさん
2009/03/15(日) 02:15:09気になるほど遅いって事も無いと思うんだがな
0987デフォルトの名無しさん
2009/03/15(日) 02:15:29これを使うんだ
http://www.forest.impress.co.jp/article/2008/11/19/unofficialngengui.html
0988デフォルトの名無しさん
2009/03/15(日) 02:16:30だからネイティブイメージジェネレータ使いんさいと。
0989デフォルトの名無しさん
2009/03/15(日) 02:18:500990デフォルトの名無しさん
2009/03/15(日) 02:20:16ふらっとC#,C♯,C#(初心者用) Part39
http://pc11.2ch.net/test/read.cgi/tech/1237051173/
0991デフォルトの名無しさん
2009/03/15(日) 02:20:38中間コードとJITコンパイラについて勉強しましょう。
0992デフォルトの名無しさん
2009/03/15(日) 02:21:16でも例えばメモ帳のように、ちょっと起動しては終了しを繰り返すような場合はどうでしょう。
>>986
E6600のメモリ6Gなのでさすがにスペックのせいではないと思います。
>>987-988
ngenがポイントみたいですね。みなさんこれで起動の遅さを解決してるのでしょうか。
0993デフォルトの名無しさん
2009/03/15(日) 02:22:01いや起動時の遅さを度外視した場合の話
読めばわかるだろ?誰も起動時の話なんてしちゃいない
0994デフォルトの名無しさん
2009/03/15(日) 02:22:35俺はVS使ってる限り#regionを使うことは非常に有用だと思うが
0995デフォルトの名無しさん
2009/03/15(日) 02:23:02完全にあなたが神経質なだけですね。
0996デフォルトの名無しさん
2009/03/15(日) 02:23:05いずれにしても一度起動しちゃえば再起動しても実用上問題になるほど遅くは無いでしょ
0997デフォルトの名無しさん
2009/03/15(日) 02:23:19その程度の遅さが気になるならPCを買い換えたほうがいい
スペックが足りないと思う
0998デフォルトの名無しさん
2009/03/15(日) 02:24:100999デフォルトの名無しさん
2009/03/15(日) 02:25:02raidにするか デフラグしていないか
ウィルスに感染してないか?
余計な常駐が動作していないか?
1000デフォルトの名無しさん
2009/03/15(日) 02:25:0410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。