C#, C♯, C#相談室 Part44

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part43
http://pc11.2ch.net/test/read.cgi/tech/1190845036/
2デフォルトの名無しさん:2007/11/13(火) 21:38:02
C# >>>>>>>>> C++
もはや、カルト言語となったC++に未来はない
C#で幸せな生活を送りましょう
では、幸せをもたらすC#, C♯, C#相談室 Part44、はじまりはじまりー
3デフォルトの名無しさん:2007/11/13(火) 21:40:20
Visual C# 2005 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

ふらっとC♯, C#(初心者用) Part17
http://pc11.2ch.net/test/read.cgi/tech/1182948981/

MSDNライブラリ
http://msdn.microsoft.com/library/ja/

MSDN2
http://msdn2.microsoft.com/ja-jp/library/default.aspx

pinvoke.net: the interop wiki!
http://pinvoke.net/
4デフォルトの名無しさん:2007/11/13(火) 21:41:02
Visual C# Express Edition (無料)ダウンロード
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

.NET Framework SDK (2.0)
http://msdn2.microsoft.com/ja-jp/library/ms310244.aspx

MSDN Visual C# Express Edition フォーラム
http://forums.microsoft.com/msdn-ja/ShowForum.aspx?ForumID=187&SiteID=7
Visual Studio ユーザーグループ
http://vsug.jp/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
http://black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
5デフォルトの名無しさん:2007/11/13(火) 21:42:09
取りあえず
Effective C#
More effective C#
Modern C# design
ぐらいは読みましょう
6デフォルトの名無しさん:2007/11/14(水) 00:04:44
i = 0;
while (i < n);
{
n = ある数字;
++i;
}
という処理で、上記のようにすれば、nが定義されてないとエラーが出ます。
変数nに入った数字をwhileの()内で読めるようにするにはどうすればよろしいのでしょうか?
7デフォルトの名無しさん:2007/11/14(水) 00:06:20
nの型 n = 初期値;
をwhileより上に書く
8デフォルトの名無しさん:2007/11/14(水) 00:07:24
評価順序考えれば、どこに書くべきかわかるだろう・・・
フラットいけよw
9デフォルトの名無しさん:2007/11/14(水) 00:47:33
1000 名前:デフォルトの名無しさん[sage] 投稿日:2007/11/14(水) 00:46:44
1000でC#は世界を翔ける

キタワァ*・゜゚・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜゚・*
10デフォルトの名無しさん:2007/11/14(水) 00:52:23
グローバルで宣言された2次元配列の内容をmemmove使わずに移動したい場合、
どうやって情報を移動すればいいですか?

2次元配列は結構大きいので、
ローカル変数に一時的に退避するのがどうも気持ち悪くて…

array[1000][1000];
11デフォルトの名無しさん:2007/11/14(水) 00:56:24
配列は参照型だから気にしなくていい
int[][] local = array;でおk(ハンドルを渡してるだけ)
12デフォルトの名無しさん:2007/11/14(水) 01:06:49
反射的に書いちゃったけど
「ここはC#スレですよ」
の方が正しい気がしてきた
13デフォルトの名無しさん:2007/11/14(水) 01:14:10
おそるべきはVB6脳
14デフォルトの名無しさん:2007/11/14(水) 01:28:24
VB6は関係ないだろ常識的に考えて

Cスレと間違えて来る人はC#の存在を知らないんだろうな
C++の人は間違えないと思うし
15デフォルトの名無しさん:2007/11/14(水) 01:31:12
>>13はVB6脳
16デフォルトの名無しさん:2007/11/14(水) 01:36:46
知らない人って宿題がんばる学生さんかねぇ?
17デフォルトの名無しさん:2007/11/14(水) 15:48:53
質問よろしいでしょうか?
現在 Visual C# .NET を使ってDataGridにアクセスからのデータを表示と言うのをやっているのですが
普通にFormLoadに 〜Jet4.0で命令を入れて表示させる事はできるのですが

TabControlを使って(3つ)各ページ毎に アクセスのテーブルを表示させる事が上手くいきません

Formに命令を入れるとTab1にはテーブルが出てくるのですが2.3には何も出てきません
Tab1Clickの欄に表示させたいテーブルを呼び出す命令を入れたら何も表示しないようになります。

そこで質問なのですが
タブ毎に DataGridの表示をさせるには 表示させる命令はどこに入れればいいのでしょうか?

醜い文章かもしれませんが
分かる方みえましたら教えていただけませんでしょうか
18デフォルトの名無しさん:2007/11/14(水) 18:37:39
タブページごとにデザイナでDataGrid貼れば
19デフォルトの名無しさん:2007/11/14(水) 19:38:32
DataGridは貼れるのですが
そこからページ毎に違うテーブルを読み込むことができない状態でいます。
DBとしては同じファイルなのですが テーブル毎に管理をしたいので
TabPage毎に 表示させたいと思っています。

付け加えで質問なのですが
その際に ページ毎にラベル・テキストボックスをテーブルの項目数分配置して
//グローバル変数宣言
public System.Windows.Forms.Label[] arrlbl=new Label[配置した数];
public System.Windows.Forms.TextBox[] arrtxt=new TextBox[配置した数];

    //ラベル名を発行
arrlbl[0] = label1;
arrlbl[1] = label2;

//テキストボックス内の取得
arrtxt[0]=textBox1;
arrtxt[1]=textBox2;

で自動でテーブルの項目名と先頭の項目内容を取得できるようにしているのですが
TabPage1 ではFormLoadに命令を書き込んでいるせいか成功するのですが
他のページ分は成功しないのですが 良い方法はないでしょうか?

現在 自分でも色々突っ込んで試行錯誤中ですので
アドバイスでもいいのでよろしくお願いします。
20デフォルトの名無しさん:2007/11/14(水) 19:42:50
>//グローバル変数宣言
>//グローバル変数宣言
>//グローバル変数宣言

グ ロ ー バ ル 変 数 宣 言
21デフォルトの名無しさん:2007/11/14(水) 20:35:32
何を 変数宣言すればいいのでしょうか?

なんとか TabPage毎に テーブルの表示をすることができたのですが

残りの
テーブルの項目毎にラベル・テキストボックスに表示がうまくいきません

先ほどの arrlbl arrtxt の後に
for(i = 0;i<ds.Tables["お客テーブル"].Columns.Count;i++)
{
arrlbl[i].Text = ds.Tables["テーブル名"].Columns[i].ColumnName;
arrtxt[i].Text=ds.Tables["テーブル名"].Rows[0][i].ToString();
}

でテーブルにある項目数をラベルとテキストに読み込んでいます。
プログラムの知識が浅いため

for〜TabPage1で出したいテーブル
for〜TabPage2で出したいテーブル
for〜TabPage3で出したいテーブル

とTabPage3つ分繰り返していれている為なのか
TabPage1にfor分の最後 つまりTabPage3で読み込みたい項目が出てきてしまいます。
なにかよい解決策を探しています。

何度も書き込み申し訳ないと思っていますが
どうかお力添えよろしくお願いします。
22デフォルトの名無しさん:2007/11/14(水) 20:40:33
Label と TextBox 使うってことは…… PropertyGrid を勧めておく
23デフォルトの名無しさん:2007/11/14(水) 20:52:05
こんな馬鹿にPropertyGridを勧める君はもっと馬鹿だな
24デフォルトの名無しさん:2007/11/14(水) 21:05:42
そんな実践的な課題に手を出すレベルじゃないと思う
悪いこと言わないからもうちょっと勉強してからのほうが結果的に早いよ
25デフォルトの名無しさん:2007/11/14(水) 21:09:19
>23
教える気が無い奴が馬鹿って言っても何の魔力も無いな

>22
もしかして
for文を3つ分 コピペしてテーブルの中身だけ書き換えているとか言う
落ちじゃないよな?
26デフォルトの名無しさん:2007/11/14(水) 21:38:25
VB6脳・・・にすら到達してなさそうだな。
来年はちゃんと講義聞けよ!
27デフォルトの名無しさん:2007/11/14(水) 22:34:15
俺のお気に入り登録HPの1つに

ttp://bbs.wankuma.com/index.cgi?mode=al2&namber=10260

ぶーん2等兵=>>21
だと思うのだが 反応は無いだろうな

文章の意味が解読不能の為か 誰も反応なかったな・・・・
俺もVB6脳じゃねぇから 解読不能だわ
28デフォルトの名無しさん:2007/11/14(水) 22:57:59
デリカシーもなにもないやん
おもくそ上書きしてるやん
29デフォルトの名無しさん:2007/11/14(水) 23:27:53
wankuma系はVB脳でしょ・・・
30デフォルトの名無しさん:2007/11/14(水) 23:33:32
>>27 です
wankumaは すげぇお世話になってるところですね

まぁ俺のVB脳じゃないってとこかな。

>>21に 気の利いた回答だしてもやれねぇよ

31デフォルトの名無しさん:2007/11/14(水) 23:52:29
>>27の下の質問
回答が禿同すぎるw
32デフォルトの名無しさん:2007/11/15(木) 00:03:09
「VB.NETで書けって言われたけど初めて見たらなぜかC#だった」
のか?
33デフォルトの名無しさん:2007/11/15(木) 00:14:37
VB9ってC#と同じように「ちゃんと解ってる人にだけ便利」な感じだなあ
わからなくても使える言語を目指してると思ってた
34デフォルトの名無しさん:2007/11/15(木) 00:20:28
ぶーん2等兵さんへ


ステップでデバッグするか、内容をラベルに書かないでtextboxに順次書き出していったほうがいいよ。
回答は書かないけど、単純なのですぐわかると思う。
35デフォルトの名無しさん:2007/11/15(木) 00:30:34
そんな言語は存在しない
36デフォルトの名無しさん:2007/11/15(木) 11:02:10
InvokeやBeginInvokeを呼ぶときって

Invoke(new defineddelegate(func),arg);

って呼ぶ場合と

defineddelegate dd = new defineddelegate(func);
dd.Invoke(arg);

で呼ぶ場合と何か違うのでしょうか?
37デフォルトの名無しさん:2007/11/15(木) 11:15:08
上は
this.Invoke(...

下は単に
func( arg );
38デフォルトの名無しさん:2007/11/15(木) 11:26:22
>>37
とInvokeを正しく使うとすると上ってこと?
39デフォルトの名無しさん:2007/11/15(木) 11:31:48
挙動は同じだろう、Invoke関数でシグネチャをまとめて設定するのが特徴なだけだろ。
40デフォルトの名無しさん:2007/11/15(木) 11:37:30
ありがと
41デフォルトの名無しさん:2007/11/15(木) 11:49:18
上のほうはthisが省略されてるっつーか
多分Control.Invokeでしょうが……
別スレッドで呼ばれてもControl作成スレッド上で動く

下はスレッド関係なく実行スレッドで動く
42デフォルトの名無しさん:2007/11/15(木) 12:24:18
実行スレッドで動くInvokeは意味はあるのでしょうか?
43デフォルトの名無しさん:2007/11/15(木) 13:19:02
C#で作成したプログラム foo.exe をずーっと実行させていると
1ヵ月〜2ヵ月ぐらいで、
Execption of the System.OutOfMemory Exception was throw
というダイアログメッセージが出力されます。
ダイアログの詳細を見ると、mscorlib.dll で上記の例外が発生している様子です。

この時のシステムの状態は、Ctrl+ALT+DELでタスクマネージャーを起動しようとしても、
「アプリケーションを正しく初期化出来ませんでした 0xc000012d」
といった感じで、タスクマネージャも起動できません。
また、スタートメニューのアイコンが表示されなかったり、他のアプリケーションの起動も出来ません。

foo.exe をウィンドウメニューの×をクリックして終了させても、状況は変わりません。

foo.exeがメモリリークしているのであれば、foo.exeを終了させれば、その状態は回復する
と思っているんですが、foo.exe を終了させているにも係わらず、タスクマネージャが起動出
来ない状況が変わらないため、何が起きているんだろうと、途方にくれています。

一旦この状態になったら、ウィンドウメニューの×でfoo.exeを終了させても、
メモリはシステムに返されない状態になってしまっているんでしょうか?

それとも、foo.exeを終了させたつもりになっているだけで、実際?は、終了していないんでしょうか?

また、こういった状況を調査するためには、なにを調べれば良いでしょうか。

すいませんが、知恵をお貸しください。

環境は、
WindowsXP SP2
.NET Framework 1.1 Hotfix(KB928366)
です。
44デフォルトの名無しさん:2007/11/15(木) 13:50:46
>>43
それだけ間隔が長期だとトラブルシューティングも大変そう。
OSのメモリ管理に何か不具合が起きて、foo.exeがOutOfMemoryになったり
タスクマネージャも起動できなくなったと考えたほうが自然だろう。
メモリやドライバやハードがらみの可能性が高いと思うけどな。
45デフォルトの名無しさん:2007/11/15(木) 15:10:18
>>43
とりあえず普通にログ取れば?
OSのカウンタログとか、foo.exe自身のトレースログとか。
そんでわざとメモリの少ない環境で負荷テストとか。
46デフォルトの名無しさん:2007/11/15(木) 15:54:03
10日とか半月くらい動かしたタイミングならなんらかの傾向は出てるんじゃない?
4743:2007/11/15(木) 19:42:40
>>44-46
レスありがとうございます。
一度カウンタログを取ってみた事はあるんですが、
数日程度では foo.exeがメモリリークしているんだか、
他のプログラムが悪さしているんだか良く分からなかったんです。
(少なくとも、目に見えて foo.exe がメモリをどんどん使っているという
 様子ではありませんでした。)

foo.exe 以外の常駐タスクに対しても、カウンタログを取ってみることにします。

48デフォルトの名無しさん:2007/11/15(木) 20:02:23
49デフォルトの名無しさん:2007/11/15(木) 22:21:34
いや〜こんなん聞くと来月リリースするプログラムが気になるわ・・・
50デフォルトの名無しさん:2007/11/15(木) 23:41:34
無償で性能のいいリファクタリングツールを教えてください。
51デフォルトの名無しさん:2007/11/15(木) 23:45:20
プラグイン作ればいいだろう。
52デフォルトの名無しさん:2007/11/15(木) 23:53:09
そんな無茶な・・
53デフォルトの名無しさん:2007/11/16(金) 01:10:46
PerfMonでこんなに.netの分析ができるなんて知らなかった
おもすれー

Bytes in all Heaps が減らない……orz
54デフォルトの名無しさん:2007/11/16(金) 01:20:35
>>53
使われてるサイズじゃなくて予約されてるサイズではなかろうか。
5543:2007/11/16(金) 12:02:52
>>48
おぉ、これは嬉しい情報です、助かります。
カウンタログ取るときに、なにを取れば良いのかが
良く分からなかったんですが、これでめぼしいプロセスの
ログを採取してみたいと思います。
56デフォルトの名無しさん:2007/11/16(金) 22:20:06
ふと疑問に思ったんだけど、ラムダ式の => ってなんて言えばいいんだろう?
一応演算子らしいが。ラムダ演算子?
57デフォルトの名無しさん:2007/11/16(金) 22:24:45
ってなんとなく思いついて最後に付け足したラムダ演算子で実際通ってるっぽいな。
58デフォルトの名無しさん:2007/11/17(土) 00:20:49
みぎいけ。
59デフォルトの名無しさん:2007/11/17(土) 00:21:35
オナラw
60デフォルトの名無しさん:2007/11/17(土) 00:23:06
スルメ
61デフォルトの名無しさん:2007/11/17(土) 00:32:00
にっこり
62デフォルトの名無しさん:2007/11/17(土) 00:43:44
goes to
63デフォルトの名無しさん:2007/11/17(土) 12:00:33
goto
64デフォルトの名無しさん:2007/11/17(土) 15:16:00
GOT
65デフォルトの名無しさん:2007/11/17(土) 18:21:51
gen0オブジェクトの回収のメカニズムを解説している記事やブログってありますか?
gen2のメカニズムはいろんなところに書かれているんですが。
66デフォルトの名無しさん:2007/11/17(土) 18:54:18
プログラミング .NET Framework 読め
図書館にもあるかもよ
ちょっとした記事やブログだけ読んで理解するには大きすぎる
中途半端な知識で解放漏れしてるやつ大杉
67デフォルトの名無しさん:2007/11/17(土) 19:03:21
GCしてるのに解放漏れとかwwww
68デフォルトの名無しさん:2007/11/17(土) 19:49:29
さっそく中途半端が
69デフォルトの名無しさん:2007/11/17(土) 19:56:05
さっそく釣られてる奴が
70デフォルトの名無しさん:2007/11/17(土) 19:59:23
ttp://msdn.microsoft.com/msdnmag/issues/1100/gci/
これの日本語版がどっかにあるはず
あとMSDNマガジンをGCでぐぐれ
71デフォルトの名無しさん:2007/11/17(土) 20:02:19
72デフォルトの名無しさん:2007/11/17(土) 20:02:49
Disposeしてnull入れれば何の問題もないしwwwww
73デフォルトの名無しさん:2007/11/17(土) 20:50:47
同意。
そんな数年後には意味無くなってるかもしれないinsideなテクに頼らず、基本に忠実にメモリ管理しろっーことだな。
GCに頼ってると複雑で巨大な相互参照してる類のオブジェクトの解放にドえらい時間かかるし。
手抜きの機能というか、メモリ管理においてのフェイルセーフ機能にしか過ぎないね、GCは。
74デフォルトの名無しさん:2007/11/17(土) 20:55:37
フェイルセーフじゃなくてフールプルーフか?
75デフォルトの名無しさん:2007/11/17(土) 20:56:46
>>73
GCに頼る云々以前の問題な気がする
76デフォルトの名無しさん:2007/11/17(土) 21:14:45
これ全部読む根性があれば多分理解できるだろう。
ttp://vineetgupta.spaces.live.com/blog/cns!8DE4BDC896BEE1AD!1104.entry
77デフォルトの名無しさん:2007/11/17(土) 21:16:46
マネージドなオブジェクトや配列は一切使わず、全部P/Invokeで確保・解放して
C#からはハンドルだけ触るようにすればいいんじゃね
78デフォルトの名無しさん:2007/11/17(土) 21:27:29
どM仕様
79デフォルトの名無しさん:2007/11/17(土) 21:44:49
disposeした後でnullにする意味って何なの?
80デフォルトの名無しさん:2007/11/17(土) 21:47:55
ローカル変数なら無いね
フィールドなら参照切れる
81デフォルトの名無しさん:2007/11/17(土) 21:53:43
>GCに頼ってると複雑で巨大な相互参照してる類のオブジェクトの解放
GCないと本気で死ねるだろ。
82デフォルトの名無しさん:2007/11/17(土) 21:56:06
メンバにDisposeするのはたいていの場合親も破棄する時だろ。
親を破棄しないときなら別に解放とか関係なくnull入れるだろ。
83デフォルトの名無しさん:2007/11/17(土) 22:00:05
自分が持ってるメンバのDisposeを呼ぶためにDisposeを実装するときは
「もうDisposeした」フラグとしてフィールドにnull代入するな
84デフォルトの名無しさん:2007/11/17(土) 22:01:16
>>66の本のGCとデバッグの話は読んでから怖くなった
85デフォルトの名無しさん:2007/11/17(土) 22:03:09
二つ以上のListとかに一つのオブジェクトが入ってると
それだけ削除するのが大変だな
86デフォルトの名無しさん:2007/11/17(土) 23:51:55
>>82
親は長生きだけど子は短命なときはどうするのさ
特に親が子だくさんのとき。
とりあえずあなたの作るものは使いたくないな〜
87デフォルトの名無しさん:2007/11/18(日) 00:04:55
とりあえず、objectクラスを継承したbaseClass作ってIDisposableを実装すれば良い。
それを継承したClassを使え。
もちろん、Control系は実装済みだからいらないぞ。
88デフォルトの名無しさん:2007/11/18(日) 00:11:13
子の個々のメンバはdispose、null代入しなくても子をdisposeするだけでいいんだよね?
89デフォルトの名無しさん:2007/11/18(日) 00:27:14
>>86

>>親を破棄しないときなら別に解放とか関係なくnull入れるだろ。
>親は長生きだけど子は短命なときはどうするのさ
>特に親が子だくさんのとき。
>とりあえずあなたの作るものは使いたくないな〜
どいうことだ?
90デフォルトの名無しさん:2007/11/18(日) 00:30:04
馬鹿にしたいだけの馬鹿ってことか。

親はそのままで子だけを破棄するときには、
開放目的とか関係なく普通にnull入れるだろう
って言ってるのに
親は長生きだけど子は短命なときはどうするのさ
ってだからnull入れるって言ってんだろうがよ。
91デフォルトの名無しさん:2007/11/18(日) 00:32:49
普通にリソース大量に消費するクラスはDisposeメソッドを実装しておけばいいという話だろ。
何を難しく考えてるんだ。
92デフォルトの名無しさん:2007/11/18(日) 00:37:02
>>86はかなりのアホ
93デフォルトの名無しさん:2007/11/18(日) 00:41:01
>普通にリソース大量に消費するクラスはDisposeメソッドを実装しておけばいいという話だろ。
違うと思うよ…
っていうかリソース大量ってどういう意味で言ってるのん?
94デフォルトの名無しさん:2007/11/18(日) 00:45:45
Dispose関連のリソースと言えばメモリ空間だろう。
結局、一番影響が多いものから対応するのが実質的なプログラミングだろう。
わざわざ、32bitしかリソース使ってないものを破棄することにベースクラスを遡って
対応なんてやらない。そのような多少なミスを許すためにGCがあるんだから。
95デフォルトの名無しさん:2007/11/18(日) 00:45:57
どう違う?
96デフォルトの名無しさん:2007/11/18(日) 00:49:29
>Dispose関連のリソースと言えばメモリ空間だろう。
なんでやねんw
97デフォルトの名無しさん:2007/11/18(日) 00:52:06
Dispose と null 代入は全然違うだろ常考
98デフォルトの名無しさん:2007/11/18(日) 00:54:51
>>96
例としてまず挙がるのがそれだと言いたいんだろ
99デフォルトの名無しさん:2007/11/18(日) 00:57:57
>>>普通にリソース大量に消費するクラスはDisposeメソッドを実装しておけばいいという話だろ。
>>っていうかリソース大量ってどういう意味で言ってるのん?
>Dispose関連のリソースと言えばメモリ空間だろう。

>例としてまず挙がるのがそれだと言いたいんだろ
そうはおもえんな。
100デフォルトの名無しさん:2007/11/18(日) 00:59:12
んで何が言いたいの
101デフォルトの名無しさん:2007/11/18(日) 01:02:21
>>99
説明よろしく。
102デフォルトの名無しさん:2007/11/18(日) 01:02:28
いやなにか言いたいとかじゃなくて何いってんのかわからんぞっていってんだよ。
103デフォルトの名無しさん:2007/11/18(日) 01:02:56
GCで消えるものにDisposeもクソもないだろ
GCで消えないものをDisposeしなきゃならんのであって
104デフォルトの名無しさん:2007/11/18(日) 01:03:20
>普通にリソース大量に消費するクラスはDisposeメソッドを実装しておけばいいという話だろ。
>何を難しく考えてるんだ。

意味不明。
といいたかったわけだよようするに。
105デフォルトの名無しさん:2007/11/18(日) 01:03:24
わからないで文句言ってるのか・・・
106デフォルトの名無しさん:2007/11/18(日) 01:04:32
m9(^Д^)プギャー m9(^Д^)プギャー m9(^Д^)プギャー m9(^Д^)プギャー m9(^Д^)プギャー m9(^Д^)プギャー m9(^Д^)プギャー
107デフォルトの名無しさん:2007/11/18(日) 01:05:36
意味不明なことを理解できるスキルは俺には無い。
108デフォルトの名無しさん:2007/11/18(日) 01:05:41
晒しage
109デフォルトの名無しさん:2007/11/18(日) 01:06:31
>わからないで文句言ってるのか・・・
わからないって文句言ってるのに…
110デフォルトの名無しさん:2007/11/18(日) 01:07:43
>普通にリソース大量に消費するクラスはDisposeメソッドを実装しておけばいいという話だろ。
>何を難しく考えてるんだ。

これをだれかが説明してくれればいいわけだ、うん。
111デフォルトの名無しさん:2007/11/18(日) 01:08:15
まぁわかるようになったらまたおいで。
もしくはここで質問すれば。
112デフォルトの名無しさん:2007/11/18(日) 01:09:28
わからないなら、とりあえずこれ見てから。
http://msdn2.microsoft.com/ja-jp/library/fs2xkftw(VS.80).aspx
113デフォルトの名無しさん:2007/11/18(日) 01:19:25
ほんとにわかって無いと思われてんのな。
Disposeのもくてきなんぞちゃんとわかってる。
だ か ら こそ

>普通にリソース大量に消費するクラスはDisposeメソッドを実装しておけばいいという話だろ。
>何を難しく考えてるんだ。

さらに

>Dispose関連のリソースと言えばメモリ空間だろう。

てのが意味不明って言ってんだよ。

リソース大量って同意意味?
ってわざわざ確認したのに
>Dispose関連のリソースと言えばメモリ空間だろう。
ってんだから。
Disposeの意味理解してたら明らかにおかしいことわかるだろうに。
114デフォルトの名無しさん:2007/11/18(日) 01:20:09
>リソース大量って同意意味?
リソース大量ってそういういみ意味?
の間違い。
115デフォルトの名無しさん:2007/11/18(日) 01:20:44
じゃねー
リソース大量ってどういう意味?
だ。
116デフォルトの名無しさん:2007/11/18(日) 01:23:50
これも見てからにして。
http://u-biq.org/magazine.htm
117デフォルトの名無しさん:2007/11/18(日) 01:24:41
もっと初心者向けを頼む。
118デフォルトの名無しさん:2007/11/18(日) 01:25:40
メモリ空間の大量使用と言えば文句がないのか?
とりあえず、説明するの疲れたからもう寝る。
119デフォルトの名無しさん:2007/11/18(日) 01:26:13
結論。
メモリ空間の大量使用
する場合にはDisposeを実装すること。




あほか。
120デフォルトの名無しさん:2007/11/18(日) 01:26:49
121デフォルトの名無しさん:2007/11/18(日) 01:27:38
>日本語を母国語としない人に日本語の教育をするのが日本語学校です。
うーん残念だ。
122デフォルトの名無しさん:2007/11/18(日) 01:30:33
>>119

おまえがあほ。
123デフォルトの名無しさん:2007/11/18(日) 01:33:41
あのー
まともな反論してもいいんだよ?
124デフォルトの名無しさん:2007/11/18(日) 01:34:16
使用するマネージ言語の種類にかかわらず、. NET Framework のガベージ コレクタは、
自動メモリ管理機能を提供します。ガベージ コレクタは、マネージオブジェクトに対するメモリの割り当てと解放を行い、
必要な場合には、アンマネージ リソースを正しくクリーンアップするために Finalize メソッドおよびデストラクタを使用します。
自動メモリ管理は、コードによるメモリ管理方式から生じる一般的なバグを除去することで、
開発を簡単にします。
125デフォルトの名無しさん:2007/11/18(日) 01:34:31
つまりメモリを大量使用する場合にはDisposeを実装しろって
本気で言ってるということでいいのかな?
126デフォルトの名無しさん:2007/11/18(日) 01:40:23
>>125

実装する必要がある場合はする
ファイルや画像を扱うクラスは実装されている理由がメモリ管理に与える影響が多いから
GCに任せて良いと判断できる程度のメモリ消費なら実装しない
127デフォルトの名無しさん:2007/11/18(日) 01:42:50
>>126
今追いついたけど、何言ってっかわからんわw
128デフォルトの名無しさん:2007/11/18(日) 01:43:45
>>127
マジそれやばいって
129デフォルトの名無しさん:2007/11/18(日) 01:49:40
ファイルや画像はアンマネージだからDisposeしなきゃならんのだろ
130デフォルトの名無しさん:2007/11/18(日) 01:49:54
>>126
わかって書いてるのかわかって無いのかいまいち判断しにくい書き方だが、
わかってるならもうちょっと明確な書き方するだろうから多分わかって無いんだろう。

画像はともかくファイルに関して「実装されている理由がメモリ管理に与える影響が多い」
とは普通書かないだろうしな。
131デフォルトの名無しさん:2007/11/18(日) 02:02:37
ほんとにおかしいことを書く

意味不明とか言ってることがわからんとか突っ込む

わからないなら文句言うな、わからずに文句いってんのかw

いやおかしいこと言ってるからわかりようが無いだろ、わかるやついるのか?

わからないならここみて勉強して来い。

いやあのね…

こういうのって多いんだぜ?
132デフォルトの名無しさん:2007/11/18(日) 02:03:55
さっさと正解を書けばいいものをずいぶん引っ張るなぁ。
本当にわかってないんだろうなぁ。
133デフォルトの名無しさん:2007/11/18(日) 02:06:44
言葉遊びを楽しみたいんだろ。
134デフォルトの名無しさん:2007/11/18(日) 02:09:25
さて何人いることやらw
135デフォルトの名無しさん:2007/11/18(日) 02:10:07
あれ?話をそらし始めた?
136デフォルトの名無しさん:2007/11/18(日) 02:11:26
どっちに言ってるのかわからんw
137デフォルトの名無しさん:2007/11/18(日) 02:11:49
おちんちんしこしこ
138デフォルトの名無しさん:2007/11/18(日) 02:21:27
3.0言語仕様の日本語版はいつ出るの?
139デフォルトの名無しさん:2007/11/18(日) 02:24:27
おととし
140デフォルトの名無しさん:2007/11/18(日) 02:24:35
便乗質問させて下さい。

VC#2005でWindowsアプリケーションを新規作成します。
するとForm1.Designer.cs内に最初から下記のコードが書かれています。(必要な部分だけ抜粋しています。)

 private System.ComponentModel.IContainer components = null;
 protected override void Dispose(bool disposing) {
  if (disposing && (components != null)) {
   components.Dispose();
  }
  base.Dispose(disposing);
 }
 private void InitializeComponent() {
  this.components = new System.ComponentModel.Container();
 }

しかし、Form1.cs[デザイン]を使ってButton等をポトペタすると、
  this.components = new System.ComponentModel.Container();
という部分がコードから綺麗に消えてしまいます。

とても奇妙に思えるのですが、これは何を意味しているのでしょうか?
そして最後までnullなthis.componentsと、
それを参照するDisposeメソッドは残しておく必要があるのでしょうか?
141デフォルトの名無しさん:2007/11/18(日) 02:26:15
>>91に代わって誰か説明してくれ
つーかコテ使えとは言わんが安価使おうよ・・・
142デフォルトの名無しさん:2007/11/18(日) 02:55:38
>>140
確かデザイナの仕様だったキガス
必要になると勝手に復活するから気にしなくておk
143デフォルトの名無しさん:2007/11/18(日) 03:39:38
ImageListとかContextMenuStripとか
Form.Controlsに入らなくてコンストラクタにcontainerを引数として持つやつらが
ポトペタされると復活して、そいつらの面倒見てくれて最後にDisposeしてくれる。

そいつらのコンストラクタでは、
public Soitsura( IContainer container)
{
 ...
 container.Add(this);
}
みたいに自分をcomponentsにつっこむの
144デフォルトの名無しさん:2007/11/18(日) 05:03:28
これで分からないようだったらお手上げ
http://www.atmarkit.co.jp/fdotnet/dotnettips/027dispose/dispose.html
145デフォルトの名無しさん:2007/11/18(日) 05:13:19
>>144
「リソース大量に消費するクラス」とは全然違う内容なんだけど・・・
146デフォルトの名無しさん:2007/11/18(日) 05:20:20
お前あげ足とろうとしてるだけでまともに知ろうとしてないだろ?
147デフォルトの名無しさん:2007/11/18(日) 05:36:36
>>146
>しかし、極めて限られた資源や、特別な特徴を持った資源は、使い終わったらすぐに解放してやらねば不都合が起きる場合がある
ここをどう解釈してる?
14865:2007/11/18(日) 07:07:01
なんか自分の書き込みがきっかけで関係ないことで荒れてたようで恐縮です。
>>70
ざっと読んでみたところPart2のほうで触れられていました。
どうやって古いオブジェクトからgen0オブジェクトへの参照を検出しているのか
疑問だったのですが、その疑問が解けました。
なんでもGetWriteWatch API関数でメモリへの書き込みを検出してるんだとか。
>>76
こちらの方にもうちょっと詳細な説明がありました。
>>71
こちらもそのうち読んでみたいと思います。
>>66
プログラミング.NET Frameworkは以前読もうとしたんですが近くの本屋に
なかったんですよね。図書館は盲点だったのでまた探してみたいと思います。

みなさんどうもありがとうございました。
149デフォルトの名無しさん:2007/11/18(日) 09:56:40
結論、ちゃんと朝飯は食えよ!
150デフォルトの名無しさん:2007/11/18(日) 10:35:30
ただのメモリにDispose使うとか言ってる人もいろいろ読むとよいよ
依存すべきじゃないトリビア Gen0 のサイズはCPUキャッシュのサイズ(なことが多い)
151デフォルトの名無しさん:2007/11/18(日) 11:47:43
極めて限られた資源や、特別な特徴を持った資源は
具体的に言うとファイルやネットワーク等の資源

大量の資源を使うクラスに対するDispose呼び出しは
VMの一定メモリ割り当て量超えた場合のパフォーマンス低下を防ぐため

たとえば、少量の資源を使うクラスをDisposeしたりはしない
string str = "A" + "B";
これの"A"と"B" はすぐに使えなくなるがDisposeしないでGCにまかせたりしてるのは
影響が少ないから。
152デフォルトの名無しさん:2007/11/18(日) 11:56:12
その例で文字列定数使うなよw
153デフォルトの名無しさん:2007/11/18(日) 11:58:50
>>152
初心者に一番わかりやすいだろ?
参照が関数から抜けると切れるし、strが参照型だと解る
154デフォルトの名無しさん:2007/11/18(日) 11:59:45
なんか頭のおかしい人がいます
155デフォルトの名無しさん:2007/11/18(日) 11:59:51
本気で言ってんの?…
class HeavyObject:IDisposable{
 int[] data;
 public HeavyObject(){data=new int[100000000];
 public void Dispose(){/*これ実装してdataを解放してくれ*/}
}
156デフォルトの名無しさん:2007/11/18(日) 12:06:56
>大量の資源を使うクラスに対するDispose呼び出しは
>VMの一定メモリ割り当て量超えた場合のパフォーマンス低下を防ぐため

具体的にパフォーマンス低下を防いでいる例を書いてくれ。
157デフォルトの名無しさん:2007/11/18(日) 12:08:53
>これの"A"と"B" はすぐに使えなくなるがDisposeしないでGCにまかせたりしてるのは
やっぱり意味不明だろどう考えても。
158デフォルトの名無しさん:2007/11/18(日) 12:10:36
>>155
配列の開放って、具体的にはどうするの?
今まで意識してやってなかった。
159デフォルトの名無しさん:2007/11/18(日) 12:12:38
>>155は冗談で書いたんだよ
GCに任せるしかない
よっぽどすぐ削除したかったら参照切ってからGC.Collectとか考えられるけど、
Disposeでやることじゃない
160デフォルトの名無しさん:2007/11/18(日) 12:14:02
data = null;
とでもいうつもりなのかな>>151は。
しかし問題はHeavyObject自身がどういう使われ方を想定してるかだ。

Disposeイコール普通はもう使わない、なんだから、
普通はDispose実装しても意味無いわな、ほっといても変わらん。
いやむしろDispose呼び出しのために開放が遅れる場合があるw
161デフォルトの名無しさん:2007/11/18(日) 12:17:33
public class BaseResource: IDisposable
{
private IntPtr handle;
private Component Components;
private bool disposed = false;
private int[] data
public BaseResource()
{
data=new int[100000000];
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if(!this.disposed)
{
if(disposing)Components.Dispose();

CloseHandle(handle);
handle = IntPtr.Zero;
if(data != null)data = null;
}
disposed = true;
}
~BaseResource()
{
Dispose(false);
}
}
162デフォルトの名無しさん:2007/11/18(日) 12:23:10
??
それどう見てもdata=nullは一応ついでにやっといたほうがいい程度だし。
どう考えてもdataの開放は主目的とまったく違うし。

ついでっていうのは、Disposeされても参照が開放されない場合という、
どちらかというと特殊な状況でしか時再には意味無いけど、
せっかく開放のタイミングがあるんだから、一応ついでにやっとくべきだろう、
っていうレベルの話ってことね。

163デフォルトの名無しさん:2007/11/18(日) 12:24:22
まあその前にSafeHandle使え。
164デフォルトの名無しさん:2007/11/18(日) 12:30:12
ただのアンマネージメモリだったらGC.AddMemoryPressure
165デフォルトの名無しさん:2007/11/18(日) 12:33:06
問題はそれじゃないだろ。
GC.SuppressFinalize(this);
に指定されたオブジェクトがGCによって呼ばれないことによって
>大量の資源を使うクラスに対するDispose呼び出しは
>VMの一定メモリ割り当て量超えた場合のパフォーマンス低下を防ぐため
をおこなってるんだろう。
166デフォルトの名無しさん:2007/11/18(日) 12:33:12
DisposeしないでFinalizeにまかせたりしてるのは
だったらまだ、この表現自体の意味はわかるが、

DisposeしないでGCにまかせたりしてるのは
ってのはもはや意味不明
167デフォルトの名無しさん:2007/11/18(日) 12:34:11
>>165
それって「でかいアンマネージメモリ確保しちゃったからマネージメモリ詰めといてね」だろ
168デフォルトの名無しさん:2007/11/18(日) 12:38:11
>>165>>164に言ってるんじゃないと思うけど、
>>167>>165>>164に言ってると思って言ってるのかな?
169デフォルトの名無しさん:2007/11/18(日) 12:38:50
>>166

表現のミスは認めるが、あげ足とり好きなやつが多すぎだな。
170デフォルトの名無しさん:2007/11/18(日) 12:42:34
こういうのを揚げ足と思ってる時点でやっぱりわかって無いことがわかる。
じゃあFinalizeって意味で書いたのか?
そんなわけ無いだろ、さらに意味不明だ。

>DisposeしないでFinalizeにまかせたりしてるのは
>だったらまだ、この表現自体の意味はわかるが、
って書いたとおり、「この表現自体の意味」はわかるってだけ。

>string str = "A" + "B";
>これの"A"と"B" はすぐに使えなくなるがDisposeしないでFinalizeにまかせたりしてるのは
>影響が少ないから。
これでどうだ、ますます意味不明だろ。
171デフォルトの名無しさん:2007/11/18(日) 12:42:50
オブジェクトの解放にはDisposeを実装
VMによるパフォーマンス低下を防ぐにはSuppressFinalizeの呼出

参照型には安全に解放を行うためnull参照を設定
まとめたらこんな感じか?
172デフォルトの名無しさん:2007/11/18(日) 12:44:04
言葉遊びに付き合えんわ
173デフォルトの名無しさん:2007/11/18(日) 12:44:38
>表現のミスは認める

本当はこういう表現をしたかったのに
ミスしてこう書いてしまった

っていう風にを説明してみ、できるわけ無いが。

174デフォルトの名無しさん:2007/11/18(日) 12:45:52
>オブジェクトの解放にはDisposeを実装
>VMによるパフォーマンス低下を防ぐにはSuppressFinalizeの呼出

>参照型には安全に解放を行うためnull参照を設定
>まとめたらこんな感じか?

んーそりゃ無茶だw
175デフォルトの名無しさん:2007/11/18(日) 12:46:08
ごめん、俺が悪かったから許してくれ!
176140:2007/11/18(日) 12:46:36
>>142-143
遅ればせながら、ありがとうございました。
納得しました。
177デフォルトの名無しさん:2007/11/18(日) 12:47:19
オブジェクトの解放はGC任せが基本
特別な終了処理を行いたかったらDisposeを実装

っていうだけのことなんだけどな
178デフォルトの名無しさん:2007/11/18(日) 12:49:03
こっち先に埋めてね

C♯, C#相談室 Part34
http://pc11.2ch.net/test/read.cgi/tech/1162467959/
179デフォルトの名無しさん:2007/11/18(日) 12:52:22
必要なタイミングで即時に開放する必要のあるリソースをメンバとして扱うクラスは
Disposeを実装する。Disposeを実装してるメンバを持ってる場合も同じ。

アンマネージリソースを直に扱うクラスはFinalizeを実装する。
ただし、普通はSafeHandle使うべきだし、アンマネージリソースを直に扱うクラスなんて
まずめったに無いから、Finalizeを実装するのは本当にまれ。

Finalizeを実装するなら、Diaposeも実装して、確定的なタイミングでの開放もできるようにする。
この場合はDisposeのタイミングでSuppressFinalizeを呼び出して、
もうFinalizeは呼び出さなくていいことを伝える。
でも普通はDisposeパターンを使うけど。

Disposeを実装する場合は、一応マネージドなメンバの参照もnullにしておけば、
もしDispose後すぐに参照が開放されない、ということがあった場合には効果がある。
まあ普通の使い方じゃそんなに無いけども。
180デフォルトの名無しさん:2007/11/18(日) 12:58:03
もしかして釣られてるのか?
181デフォルトの名無しさん:2007/11/18(日) 12:59:58
どれにいってるのん?
182デフォルトの名無しさん:2007/11/18(日) 13:01:24
結論は179

Disposeの話題はおしまい
183デフォルトの名無しさん:2007/11/18(日) 13:01:46
Dispose厨に釣られてる
184デフォルトの名無しさん:2007/11/18(日) 13:03:39
まあDisposeはリソース開放とは別の意味合いで、
Before-Afterパターン的なことをするために会えて実装することはたまにある。
単にusingで簡潔かつ確実に書けるようにするってだけの目的だけど。

TransactionScopeなんかと同じ使い方だな、
何らかのスコープを定義したい場合に使うことが多い。
185デフォルトの名無しさん:2007/11/18(日) 13:08:51
個人的には>>184の使い方がとっても好きなんだが。
186デフォルトの名無しさん:2007/11/18(日) 13:09:12
列挙子を実装するときとかかな
187デフォルトの名無しさん:2007/11/18(日) 13:10:22
ビフォーとアフターを確実にやりたいなら
コードブロックを引数に取れよ
188デフォルトの名無しさん:2007/11/18(日) 13:14:17
ビフォーアフターっていうよりは、スコープ定義、だな、
簡潔簡単にかつ間違えなずに使えるようにしとくってのが目的だからな、
コードブロック引数ってのはやりたくない(外向けには、内部ではやったりもするが)。

あと大きいのは、VBでも普通に使えなきゃ困るから、だ。
189デフォルトの名無しさん:2007/11/18(日) 14:54:18
やっと終焉しましたね。
190デフォルトの名無しさん:2007/11/18(日) 15:00:17
>>187
Rubyのように内部イテレータをメインに使う言語はそれでいい。
foreachで外部イテレータも多用されるC#では
foreachからの脱出時の軽量コールバックにDisposeが流用される。
ttp://www.okisoft.co.jp/esc/prolog/in-cs.html#4

そしてLINQのせいでますます外部イテレータ依存度が高くなった。
IEnumerator<T>.Disposeはもう殺せないよ。使われすぎてる。

例外が軽い言語だと、列挙の中断通知には例外を使う言語もあるけどね。
PythonとかECMAScript 4とか。
191デフォルトの名無しさん:2007/11/18(日) 15:54:47
スレタイにC#追加して立てといた
ふらっとC#,C♯,C#(初心者用) Part21
http://pc11.2ch.net/test/read.cgi/tech/1195368821/l50
192デフォルトの名無しさん:2007/11/18(日) 19:38:56
マウスカーソルの付近に、マウスカーソルの位置情報を表示するアイデアありますか?
マウスを高速でぐりぐり動かしても表示がもったりしないような。
もちろんC#で。

具体的にはこんな感じで

            (100,230)
           ↑
193デフォルトの名無しさん:2007/11/18(日) 19:44:16
C#でマウスと言ってるからFormsかい?
普通に、イベントはMouseMoveを取得、表示はカーソルを自分で作成する。
194デフォルトの名無しさん:2007/11/18(日) 19:52:09
BorderStyle = Noneでラベルを乗せたフォームを表示して
親フォームのMouseMoveで位置とテキストを更新すれば
195デフォルトの名無しさん:2007/11/18(日) 19:56:28
C++のスキルに自信があるなら、IDropTargetHelperをアンマネージ操作というのもあるけど。
http://www.microsoft.com/japan/msdn/windows/windows2000/ddhelp_pt1.aspx
196デフォルトの名無しさん:2007/11/18(日) 21:03:59
んなことしなくてもMouseMoveでツールチップテキストを更新するほうが
お手軽かつ確実じゃないか。

まあ、一見便利そうで鬱陶しいUIの見本みたいになりそうだけど。
ステータスバーか、もしくは専用の表示スペース作って表示するのが普通に感じる
197デフォルトの名無しさん:2007/11/18(日) 22:06:36
VisualStudio での WinForm デザイン時に特定のコードを実行させたいんですが、対応するイベント等はありますか?

具体的にいいますと http://www.codeproject.com/cs/miscctrl/XPTaskBar.asp を Vista で動かすときに
デフォルトのままだと描画に不具合が生じるのでクラシックテーマに変更するメソッドを実行させたいのです。
198デフォルトの名無しさん:2007/11/18(日) 22:12:48
何ていうか........根本的に発想が間違ってる気がするよ。
まあデザイン時か実行時かはDesignModeプロパティで一応判別ができる。
MSDNライブラリよく読まないとハマる可能性があるけど
199デフォルトの名無しさん:2007/11/18(日) 22:28:23
XPExplorerBar の中身に手をつけないで、デザイン時に特定のメソッドを呼び出したいんです。
デザイン時は親フォームの InitializeComponent しか呼び出されないので、その呼び出しをどうやって知ろうかな、と。
200デフォルトの名無しさん:2007/11/18(日) 23:01:43
派生させればー?
201デフォルトの名無しさん:2007/11/19(月) 00:22:47
>>195
IDropTargetHelperって簡単なんだな
今作ってるやつにちょこっと足したらできた
202デフォルトの名無しさん:2007/11/19(月) 00:25:11
>>201

デバイスコンテキスト関連が面倒なんじゃないか?
GDIは癖があってあまり好きになれないんだよな。
203デフォルトの名無しさん:2007/11/19(月) 01:22:55
>>202
DC関連てソースの話じゃね?
ターゲットの場合、ドラッグイメージの描画はOSつーかexplorerがやってくれるよ?
Vistaならあのでかいアイコンとコピー/移動だかのインジケータ含めて。

問題は下のウィンドウの描画みたいだけど、
Vistaなせいなのかホバーしたときの描画がたいしたことないせいなのか
IDropTargetHelper.ShowまわりはいじらなくてもOKだった

つーか訳ありでIDropTarget自前実装だから簡単だったわけだけど
204デフォルトの名無しさん:2007/11/19(月) 13:17:58
ボタンに画像を貼り付けたいのですが、
画像を貼り付けて配置をmiddlecenterにしても
中央に表示されません。どうすれば上手く表示出来ますか?
205デフォルトの名無しさん:2007/11/19(月) 13:47:49
>>204

それはふらっと向けの質問だな。
そのプロパティがどのプロパティと関連があるのかライブラリを見ておくこと。
206デフォルトの名無しさん:2007/11/19(月) 15:06:34
>>205
ありがとうございます。まだ上手くいきませんが頑張ってみます。
レスありがとうございました。
207デフォルトの名無しさん:2007/11/20(火) 10:36:17
EPS形式の画像をJpegやGifに変換するAPI、というかC#ライブラリってありますか?
208デフォルトの名無しさん:2007/11/20(火) 10:54:10
ここらのを使って一旦ビットマップにしてから変換すればおkじゃない?
ttp://www.hinet.mydns.jp/tdiary/?date=20050517

SPIのC#ラッパーはそこらに転がってると思う.
209デフォルトの名無しさん:2007/11/20(火) 11:37:43
>>208
なるほど、Susieですか。

GhostScriptを扱うAPIがあるといいんですけどねぇ。難しいのかな。
210デフォルトの名無しさん:2007/11/20(火) 20:11:49
わざわざ直接C#でやらなくても変換ソフトはいくらでもあるんだから
コマンドライン引数渡してプロセス動かせば良くね?
211デフォルトの名無しさん:2007/11/21(水) 00:00:35
TcpListener 開始前に指定したポート番号が既に使われていないかどうか調べたいのですが、
そのようなメソッドはありますか?
212デフォルトの名無しさん:2007/11/21(水) 00:02:31
使う前に未使用でも実際に使おうとしたときには使用中ということもある
素直に接続時の例外でチェックした方がいい、ぞ

netstat みたいな事をしたいというんだったら別だが
213デフォルトの名無しさん:2007/11/21(水) 11:48:37
質問です。

現在1024bitRSAを使用した通信のプログラムを作っているのですが・・・
相手の公開鍵が判明してる場合

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAParameters rsaParameters = new RSAParameters();

rsaParameters.Modulus = 相手の公開鍵(0x80byte)
rsaParameters.Exponent = {1,0,1};

rsa.ImportParameters(rsaParameters);

暗号化済みデータ = rsa.encrypt(暗号化したいデータ,false);

で、大丈夫なのでしょうか?
いまいちRSAの使い方がわからないのでわかるかたいらっしゃいましたらお願いします。
214デフォルトの名無しさん:2007/11/21(水) 19:47:56
開いたFormの領域いっぱいにTextBoxを配置したいんですがどうすればいいんでしょうか?
215デフォルトの名無しさん:2007/11/21(水) 19:48:23
Dock=Fill
216デフォルトの名無しさん:2007/11/21(水) 20:20:03
>>215
できました!ありがとうございます!
217デフォルトの名無しさん:2007/11/23(金) 01:31:53
.NET Framework 2.0 にて、Form に MenuStrip を追加し、それに TextBox を追加したんですが、
TextBox に一度フォーカスを合わせると、以降 Form の MouseWheel イベントが呼ばれなくなります。
回避方法を教えてください。
218デフォルトの名無しさん:2007/11/23(金) 02:18:05
再現したりしなかったりだけど、MenuStripとかToolStrip系は
フォーカスまわりが怪しい挙動するときがあるよね

toolStripTextBox.Leaveでform.Focus();したらどうか
219デフォルトの名無しさん:2007/11/23(金) 03:57:38
C#2.0で作成したEXEを社内のファイルサーバに置いて
共有しようとしたのですがEXEを起動させたらすぐに異常終了
してしまいます。
これは何故でしょうか?クライアントに置いて起動すると
問題なく動きます。
VB6で全く同じ内容のEXEはファイルサーバ上でも
起動できたのに・・・
220デフォルトの名無しさん:2007/11/23(金) 04:16:28
>>219
新規プロジェクトで作ったなにもコード書いてないexeでも?
221デフォルトの名無しさん:2007/11/23(金) 04:23:48
>>220
何もコードを書いていないEXEでは今のところ試していません。
内容はあるファイルをある場所へコピーするだけのプログラムです。
222デフォルトの名無しさん:2007/11/23(金) 07:06:44
>>219
ネットワーク上にあるファイルは制限ゾーンで実行される。
とくに設定をしなければInternetZone扱いで実行されるんでほとんどのプログラムは動かない。
動かしたければポリシーをいじって、\\server\hoge\* のは
FullTrustといったふうに設定することになる。
223デフォルトの名無しさん:2007/11/23(金) 10:50:10
CASとか知らないんだろうね。
その辺から勉強した方がいいよ。
224デフォルトの名無しさん:2007/11/23(金) 12:32:21
ポリシーいじるよりも署名したほうが楽じゃね?
225デフォルトの名無しさん:2007/11/23(金) 16:33:45
分かってないなら書くなw
226デフォルトの名無しさん:2007/11/23(金) 16:42:53
>>225

アンカーが無いと誰にレスしているのか分らない。
227デフォルトの名無しさん:2007/11/23(金) 18:51:48
どうみても>>224
228デフォルトの名無しさん:2007/11/23(金) 21:18:36
署名って厳密名つけるのとコード署名の2種類あるけど
どっちにしても署名だけじゃ駄目だわな。
229デフォルトの名無しさん:2007/11/23(金) 22:52:39
めんどうならクラス全体に属性つけて許可すればおkだろ
230デフォルトの名無しさん:2007/11/23(金) 23:21:14
何のために.NETFrameworkのサンドボックス機能があると思っているのやら。
231デフォルトの名無しさん:2007/11/24(土) 00:20:46
Clickワンコでいいじゃん
232デフォルトの名無しさん:2007/11/24(土) 01:07:52
Array.ClearやArray.CopyってArray型を引数に取るからなんとなく遅そうなイメージがあったけど
試してみたらfor(int i=0;i<array.Length;i++)で回すより速いね
どういう実装になってるんだろう
233デフォルトの名無しさん:2007/11/24(土) 01:29:09
コード先頭のusing をアルファベット順に並べないと気が済まない
234デフォルトの名無しさん:2007/11/24(土) 01:36:25
上から順に、
System名前空間のよく使う順(親階層が同じなら揃える)
その他外部のライブラリの名前空間
自分で作った名前空間
俺はこんな感じ
235デフォルトの名無しさん:2007/11/24(土) 01:39:30
usingの順序なんか気にする余裕があるプロジェクトでよかったね。
236デフォルトの名無しさん:2007/11/24(土) 01:40:41
エディタで選択してソートして終わり
237デフォルトの名無しさん:2007/11/24(土) 02:35:50
>>224
よう俺。
238デフォルトの名無しさん:2007/11/24(土) 02:37:01
2008だと並べ替えしてくれる
239デフォルトの名無しさん:2007/11/24(土) 08:29:13
>>238
そんな機能付いたっけ
240デフォルトの名無しさん:2007/11/24(土) 08:59:08
using勝手に自動的に付けてくれたらいいのにな
241デフォルトの名無しさん:2007/11/24(土) 12:26:12
Visual C# 2008 Express Edition beta2ってどんな感じ。バグバグだったりしない?
242デフォルトの名無しさん:2007/11/24(土) 12:31:49
英語版はもう完成してるだろ
243デフォルトの名無しさん:2007/11/24(土) 12:39:30
英語版出たからbataいつまでも使ってるなよw
244デフォルトの名無しさん:2007/11/24(土) 12:49:49
日本語版じゃないといやなので。
245デフォルトの名無しさん:2007/11/24(土) 12:52:19
ならあと1月待て
246デフォルトの名無しさん:2007/11/24(土) 12:53:54
「すみません。C#2.0でお願いします。」
これからしばらくの間、このスレでしょっちゅう見かけるに違いない
247デフォルトの名無しさん:2007/11/24(土) 12:58:06
varもLINQもラムダ式も使いたい放題だぜ
生産性あがるうううううう
248デフォルトの名無しさん:2007/11/24(土) 15:05:49
namespaceを名前空間と訳すのに違和感を感じるな

nameの意味を調べればこの違和感に気づくだろうが
249デフォルトの名無しさん:2007/11/24(土) 15:10:18
「違和感を感じる」に違和感
250デフォルトの名無しさん:2007/11/24(土) 15:50:55
岩漢
251デフォルトの名無しさん:2007/11/24(土) 16:58:12
つーか、いまだ2.0ですら浸透したか、してないかなのに3.5は早すぎる
252デフォルトの名無しさん:2007/11/24(土) 17:52:15
VS2008では.NET2.0ターゲットの開発もできるから安心です!
LINQ以外は大体C#3.0の機能が使えます!

日本語版は開発完了が年内予定か
個人で買うには高いんだよなー…一応買うつもりだけど
253デフォルトの名無しさん:2007/11/24(土) 17:58:17
2005年の終わりごろに出たのがVS2005で
2007年の終わりごろに出たのがVS2008なのはなんでだろう
254デフォルトの名無しさん:2007/11/24(土) 18:32:56
>>253
WindowsServer、SQLServer、VisualStudioを
2008シリーズとして製品をそろえたかったから、
255デフォルトの名無しさん:2007/11/24(土) 19:20:11
会社ではまだまだ3.5なんて使う機会当分ないが、家でも勉強する時間無く
禿しく置いてかれた感ある・・・。これでCLRが上がったりしたら、それこそヤル気でねえw
256デフォルトの名無しさん:2007/11/24(土) 19:45:47
VB9.0に比べたら、C#3.0はそんな大した変化じゃないだろ
VB専門ユーザーが付いてこられないこと請け合い
257デフォルトの名無しさん:2007/11/24(土) 19:47:27
もうラムダ式をメインで使う時期に来てるんだよ
Rubyが流行った原因もそれだしな
258デフォルトの名無しさん:2007/11/24(土) 20:21:55
古いシステム構成をいつまでも引きずっていることが良いと
考えている日本企業が多いからな。
外資はすでにWPF実装やSilverLightの評価を始めてるよ。
259デフォルトの名無しさん:2007/11/24(土) 21:04:06
少し枯れて安定したシステム構成が良いと全世界が思ってるよ。
260デフォルトの名無しさん:2007/11/24(土) 21:44:12
まあ新し物好きの人柱さんはせっせと頑張ってけろ
俺は生き残った技術だけで十分だ
学ぶべきことは他にいくらでもある
261デフォルトの名無しさん:2007/11/24(土) 21:54:50
いくら頑張って覚えても新技術はキリないからな・・
262デフォルトの名無しさん:2007/11/24(土) 22:07:27
お兄様方、.NETのランタイム(Dotnetfx)をセットアッププロジェクトに含んで
サイレントインストールしたいんだけど、やり方書いたサイトか方法教えて!!
263デフォルトの名無しさん:2007/11/24(土) 22:11:27
サイレントインストールのインストールオプションを指定した
セットアッププロジェクトを作成すれば良いと思うんだが?
264デフォルトの名無しさん:2007/11/24(土) 22:44:29
dll内にあるアイコンを取り出す方法ってありますか?
265デフォルトの名無しさん:2007/11/24(土) 22:52:22
そのDLLがアセンブリか否かによって手段は変わるが
266デフォルトの名無しさん:2007/11/24(土) 23:26:34
shell32からフォルダ系のアイコンを取得したいんです。
267デフォルトの名無しさん:2007/11/24(土) 23:31:10
ならExtractIconExが基本
268デフォルトの名無しさん:2007/11/25(日) 00:19:02
>>267
やってみます。
ありがとうございました。
269デフォルトの名無しさん:2007/11/25(日) 01:01:50
できました。
が、なんか見た目がアイコン抽出した時と違うんですが、
これはなんでですか?

なんかにじんでるというか。
色がめっちゃ濃い部分があります。
270デフォルトの名無しさん:2007/11/25(日) 01:16:11
>>269
読み込み時にヘマしてるか表示時にヘマしてるか
我々の予想の斜め上をいくところでヘマしてるか。

めっちゃ濃い部分に関しては単に透明色なだけかもね。
Explorer等は特定の色を描画時に透明として扱扱ってる。

まあまんべんなく調べてみれ。

>できました。

ちなみに世間ではそれを「できてない」という。
271デフォルトの名無しさん:2007/11/25(日) 01:31:07
ImageListにつっこんでColorDepthが8bitのままとかじゃね

(´−`).。oO(しかし、なんであれ8bitがデフォルトかね……
272デフォルトの名無しさん:2007/11/25(日) 01:32:47
C#とF#のそれぞれのカッコイイ点、かっこ悪い点を比較して教えて。
273デフォルトの名無しさん:2007/11/25(日) 01:38:46
ColorDepthがビンゴでした。
>>270
できてませんでした。
多分これで出来ていると思います。各環境ごとに違うのかもしれませんが。
vmかなんかで試してみます。
ありがとうございました。
>>271
ビンゴでした。
ありがとうございました。
274デフォルトの名無しさん:2007/11/25(日) 01:43:40
>>272
C# : 普通のおにいさん。超有能でもないけど、まんべんなく、そつなくこなす
F# : ノムヒョン大統領。一部で大人気。
275デフォルトの名無しさん:2007/11/25(日) 02:07:19
MSIL 逆アセンブラで不可視にできる無料ツール教えてちょ
276デフォルトの名無しさん:2007/11/25(日) 02:08:20
そんなものはない。
277デフォルトの名無しさん:2007/11/25(日) 02:51:00
C#3.0の新機能を解説した本とか出てないかね?
278デフォルトの名無しさん:2007/11/25(日) 02:52:07
難読化ツール程度で我慢しろ。
279デフォルトの名無しさん:2007/11/25(日) 03:28:23
再び質問ですいません。

アイコンの合成ってどうやるんでしょうか。
280デフォルトの名無しさん:2007/11/25(日) 03:29:24
途中で送信してしまった。
具体的にはショートカットの矢印のアイコンとフォルダのアイコンの合成です。
281デフォルトの名無しさん:2007/11/25(日) 10:46:48
SHGFI_LINKOVERLAY
282デフォルトの名無しさん:2007/11/25(日) 11:24:54
>>277
2.0までちゃんと全部理解してるならwebで十分だろ
本一冊書けるほどの変化はないよ
283デフォルトの名無しさん:2007/11/25(日) 11:59:01
284デフォルトの名無しさん:2007/11/25(日) 14:31:31
Httpを使ってXmlを返すサービスについて質問です。
HttpRequestに対してサーバが簡単なXmlを返すものなんですが、クライアント側で受け取りに失敗します。(※(2)の箇所)
サーバ側で送出したメッセージを全て読み込むためには何を使うのが定石ですか?
//サーバ側のコード
[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MyHttpService : IHttpHandler{
  public void ProcessRequest(HttpContext context){
    HttpResponse res = context.Response;
    res.ContentType = "text/xml";
    res.Write("<xml>hoge</xml>");
    res.Flush();
    res.Close();//※(1) 接続を開放しなきゃ、と思いCloseを後から追加した。
  }
}
//クライアント側のコード
private void btnMyHttpService_Click(object sender, EventArgs e){
  HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://localhost:2779/MyHttpService.ashx");
  HttpWebResponse res = (HttpWebResponse)req.GetResponse();
  using (Stream stream = res.GetResponseStream()){
    StreamReader reader = new StreamReader(stream);
//※(2) ここで「転送接続からデータを読み取れません: 接続は閉じられました。。」という例外発生
//クライアントまで到達している電文を最後まで取りたいだけなんですが・・
    string content = reader.ReadToEnd();
    stream.Close();
  }
}
※(1)にHttpResponse.Close();を追加したところ、
※(2)でSystem.IO.IOException例外が発生するようになってしまった。

1.GetResponseStream()で得られたStreamに対してStreamReader.ReadToEndを使うのがよくない
2.Httpハンドラでは普通HttpResponse.Closeを呼ぶのがよくない
とかあるのでしょうか?
285デフォルトの名無しさん:2007/11/25(日) 16:23:46
普通はCloseじゃなくてEndを呼ぶ
286デフォルトの名無しさん:2007/11/25(日) 19:37:55
普通はWeb参照してObjectそのまま受け取るんじゃね?
287284:2007/11/25(日) 20:25:55
>>285,286 レスありがとうございます。

Endだと例外が発生してしまい、パフォーマンス的に問題があるようです。
SOAPじゃなくてREST型サービスを要求されているので、その方向で調査中です。
(相手がJavaとか.NET以外なので&SOAPは遅いとか言われている・・・)

Web参照型と単純なXmlを返すWebサービスでパフォーマンスを比較してみると
Response.Endを呼ぶと明らかに遅くなってしまいますのでResponse.Endは使いたくないです。

サーバ側でResponse.Closeを呼び出すことで
クライアントの呼び出しに依存せずにサーバ側から安全に接続を切りたいのですが
Closeした場合にクライアント側でサーバが送出したメッセージを読み込むことはできないのでしょうか?
288デフォルトの名無しさん:2007/11/26(月) 00:27:49
>>283
これすげーな。えらい圧縮される
289デフォルトの名無しさん:2007/11/26(月) 08:29:42
ところでなんでCloseとかEndとかいるの?
290デフォルトの名無しさん:2007/11/26(月) 09:46:25
開けたら閉めるって、ママに習わなかったのか?
291デフォルトの名無しさん:2007/11/26(月) 10:24:06
あほかよ、HttpResponseの話だぞ。
292デフォルトの名無しさん:2007/11/26(月) 13:25:26
>>289
君にはプログラミングの勉強の前に、情報処理の勉強をお願いしたい。
293デフォルトの名無しさん:2007/11/26(月) 14:50:09
話の流れも読まずに脊髄反射しかしないボケどもめ。
294デフォルトの名無しさん:2007/11/26(月) 15:24:53
(´・ω・`)しらんがな
295デフォルトの名無しさん:2007/11/26(月) 16:12:09
なんで四則演算可能なプリミティブ型のためにICalculableみたいなインターフェイスを用意しなかったんだろう
ジェネリッククラスが書き難い
296デフォルトの名無しさん:2007/11/26(月) 16:34:48
>>295
俺もそれは思ったことあるけど、その方法って微妙なところもあるのよね。

class Rational : ICalculable // 有理数

class Galois2 : ICalculable // 位数2のガロア体
があったときに、
Rational p;
Galois2 q;
var r = p + q;
はどう扱えばいいのかとか。
297デフォルトの名無しさん:2007/11/26(月) 16:37:21
左オペランドの側に合わせて、
p.Add(q) と解釈することにして、
Add の中で型チェックすればよさそうに思えるけど、
それだと今度、
class Real : ICalculable // 多倍長・任意精度の実数
みたいなのに対して、
double x;
Real y;
var z = x + y; // double と Real 間の演算は認めたい
をどうするかで困る。

implicit なキャストと上記のルールで何とかならないでもないけど。
298デフォルトの名無しさん:2007/11/26(月) 16:58:47
異なる型の間では演算がそもそも定義されない場合もあるし
同じ型同士でも乗算は定義されるけど除算は定義されないとかあるし
299デフォルトの名無しさん:2007/11/26(月) 17:37:57
定義できる場合だけでも使えるようにすればいいと思うけどなぁ
定義できない場合は例外投げるようにするとか
あと制約条件はなんでシールクラスはだめなんだろう
300デフォルトの名無しさん:2007/11/26(月) 17:57:47
>あと制約条件はなんでシールクラスはだめなんだろう
できたところで何の意味がある?w
301デフォルトの名無しさん:2007/11/26(月) 18:10:05
>>300
制約条件にintやdoubleなんかを指定できるようになる
302デフォルトの名無しさん:2007/11/26(月) 18:24:20
structでいいじゃん
303デフォルトの名無しさん:2007/11/26(月) 18:28:29
intって書けばいいんじゃないか
304デフォルトの名無しさん:2007/11/26(月) 19:11:43
305デフォルトの名無しさん:2007/11/26(月) 20:27:06
Tの制約条件にintって書くならそのままintって書けばいいんじゃないのかと
306デフォルトの名無しさん:2007/11/26(月) 20:32:48
特殊化が出来てほしいと思うこともある。
プライマリ制約別に特殊化って感じで。
307デフォルトの名無しさん:2007/11/26(月) 20:34:01
コードで書いてみてくれんか
308デフォルトの名無しさん:2007/11/26(月) 20:34:49
>>307>>305
309デフォルトの名無しさん:2007/11/26(月) 20:36:52
特殊化から出来ないからな
まあ別に困らないけど
310デフォルトの名無しさん:2007/11/26(月) 20:37:42
void Method<T>(T num) where T : int って書くなら
void Method(int num) でいいんじゃないのかと
311デフォルトの名無しさん:2007/11/26(月) 20:53:26
ああなるほど
312デフォルトの名無しさん:2007/11/26(月) 21:09:48
値型なら実行時に特殊化されるけど
313デフォルトの名無しさん:2007/11/26(月) 23:21:41
Close/Endを呼び出さないと
Closeしないクライアントがサーバ側のリソースを無駄に消費してしまう
ということはありませんか?

Closeした方がブラウザで途中までレンダリングされるのが早いのでは?
と思っていたのですが、簡単なサービス呼び出しで実験したところ特に有意な差はなかったです。

もしかして、Close/Endって必要ないですか?
314デフォルトの名無しさん:2007/11/27(火) 01:46:59
HttpWebRequest は Close しても切断してくれなかったりとかあって時々困る
315デフォルトの名無しさん:2007/11/27(火) 02:13:40
HttpWebRequestはCloseなんて持ってませんが…
316デフォルトの名無しさん:2007/11/27(火) 02:20:29
ジェネリクス&四則演算関連でこんなの見つけた
http://blogs.wankuma.com/trapemiya/archive/2006/07/06/31783.aspx
参考にはなったけど型引数は1個で済ませられるよね
317デフォルトの名無しさん:2007/11/27(火) 02:20:31
人によってはCloseが見えたりするらしいよ。
318デフォルトの名無しさん:2007/11/27(火) 02:35:34
間違えた。HttpWebResponse のほうの Close
319デフォルトの名無しさん:2007/11/27(火) 02:36:49
1.0でRequestすればいいよ
320デフォルトの名無しさん:2007/11/27(火) 03:01:45
そもそも接続キャッシュしてるし。
サーバ側で毎回Closeなんて普通遅くなるだけだし。
接続のオープンクローズの方が維持より重いし。
ページは処理完了しないとレンダリングできないから途中で書き出しなんかできないし。
サーバ側でCloseできるってことは全部書き終わってるタイミングだから結局ほとんど差なんて無いし。
321デフォルトの名無しさん:2007/11/27(火) 05:15:47
リソース内のDll(ネイティブ)にアクセスする方法とかありますかね?
322デフォルトの名無しさん:2007/11/27(火) 09:04:46
>>313
特殊な状況ではEndは使われるが
Closeなんかいつ使うんだよ。

勝手に要ると思い込んで遅くなるって
まずに自分の思い込みを疑え。
323デフォルトの名無しさん:2007/11/27(火) 10:27:48
>>321
LoadLibrary
324デフォルトの名無しさん:2007/11/27(火) 14:43:46
お初失礼します。
最近C#でアプリ開発を始めたのですが、配列の変換で悩んでいます。

Byte[,] Temp1 = new Byte[4096,4096];

と定義して、各種メソッドの引数であるByte[];へ
Temp1[0,0]などとアドレスを渡したいのですが、
(例えば、Socket.BeginReceiveの引数1 byte[] の受信ポインタへ、
 Temp[0,0]のアドレスを指定したい。)
コンパイル時に変換エラーが出てしまいます。

どなたかよい方法をご存知ありませんでしょうか。
325デフォルトの名無しさん:2007/11/27(火) 14:53:57
>>324
byte[,]じゃなくてbyte[][]使えば?
byte[][] temp = new byte[4096][];
for(int i=0;i<temp.Length;i++)
temp[i] = new byte[4096];
でバッファ確保してtemp[0]で0番目の配列がbyte[]として渡せる
326デフォルトの名無しさん:2007/11/27(火) 15:00:03
配列は構造体、素直にジェネリクス使った方が分かりやすいよ。
327デフォルトの名無しさん:2007/11/27(火) 15:06:48
>>326
何でジェネリクスが出てくる?
しかも配列は構造体じゃないぞ
328デフォルトの名無しさん:2007/11/27(火) 15:19:37
324です。

>>325さんの方式でコーディング続けてみます。
ありがとうございました!
329デフォルトの名無しさん:2007/11/27(火) 15:19:57
>>324
C/C+;やってた人?
byte[,]は二次元配列。
byte[][]は配列の配列で二次元配列とは別物。
引数のbyte[]のとこではポインタ渡しじゃなくて配列の参照渡しをしてる。
330デフォルトの名無しさん:2007/11/27(火) 15:22:11
何でtextbox内で全角小文字のjとかlは入力できませんか

ちなみにkは入力できます
331デフォルトの名無しさん:2007/11/27(火) 15:26:57
>>329さん

324です。仰るとおりCプログラマでして、今回C#初挑戦です。
VBで簡単な開発はしたことあるので、C#も大丈夫だろうとタカを
くくってましたが、便利そうで不便なところもあり、
無駄なコードを書くことが多いなというのが感想でしょうか。

解説ありがとうございました!
332デフォルトの名無しさん:2007/11/27(火) 15:27:01
jもlも入力できるよ
333デフォルトの名無しさん:2007/11/27(火) 15:27:37
>>331
何にも分かっちゃいねえぜ
334デフォルトの名無しさん:2007/11/27(火) 15:37:14
>>331
典型的なC厨だな・・・
335デフォルトの名無しさん:2007/11/27(火) 16:32:51
まぁそうけなすなよ
仲間が増えていい事じゃないか
336デフォルトの名無しさん:2007/11/27(火) 16:57:25
ポインタ使いたければアンマネージコード
337デフォルトの名無しさん:2007/11/27(火) 17:33:03
のこぎりしか使ったことの無いきこりがチェーンソーを手に入れた
だが、使い方を知らないのでのこぎりのようにチェーンソーを使い、言った

「こんな使いにくいものよりのこぎりのほうが良く切れるぜ!」
338デフォルトの名無しさん:2007/11/27(火) 17:53:57
>>295 
自分で定義すれば良いんじゃね?
339デフォルトの名無しさん:2007/11/27(火) 18:43:04
>>338
うん
とりあえずこんなのを作った
public struct Number<T> :ICalculable<T>, IComparable, IComparable<T>
where T : struct, IComparable, IComparable<T>, IFormattable, IConvertible, IEquatable<T>
Tはbyte〜ulong、float、double
340デフォルトの名無しさん:2007/11/28(水) 11:43:35
var hoge = new { Boke = new Hage( delegate( string msg ){ Console.WriteLine( msg ); } } はおkで、
var hoge = new { Boke = delegate( string msg ){ Console.WriteLine( msg ); } }はだめなのね(´・ω・`)
341デフォルトの名無しさん:2007/11/28(水) 11:49:03
デリゲート型が推論できんからな。
var hoge = new { Boke = new Hage(msg => { Console.WriteLine(msg); }) };
342デフォルトの名無しさん:2007/11/28(水) 11:50:55
戻り値なしは規定でAction,戻り値ありなら規定でFuncにしてくれれば済む話だとおもうんだがなあ
343デフォルトの名無しさん:2007/11/28(水) 12:28:34
あれ?varってクラスメンバーの宣言には使えんの?(´・ω・`)
344デフォルトの名無しさん:2007/11/28(水) 12:34:27
使えんなあ
345デフォルトの名無しさん:2007/11/28(水) 12:36:20
>>344
・・・それは使えんなあ(´・ω・`)
346デフォルトの名無しさん:2007/11/28(水) 12:45:24
>>342
Action/Funcなら引数の型の明示が必要なんでnew書くのと大して変わらなくなるな
347デフォルトの名無しさん:2007/11/28(水) 12:54:52
var action = new Action<string>(msg => Console.WriteLine(msg));

var action = (string msg) => Console.WriteLine(msg);

だいぶ違うと思うんだがなあ
型を<>の中に書くことが可読性をひどく低下させるような気がする
348デフォルトの名無しさん:2007/11/28(水) 12:59:02
>>347
うーん、どっちも一長一短・・・
下の方が見やすいけど、
action の型が分かりにくくなるのは嫌だなぁ。

個人的に、右辺値を見れば型が明らかなときにだけ var 使いたい。
その場だと、
Action<string> action = msg => Console.Write(msg);
と書きたいかなぁ。
349デフォルトの名無しさん:2007/11/28(水) 13:00:18
ああ、あと、LINQ がらみと匿名型が絡むときは var 使うけど。
350デフォルトの名無しさん:2007/11/28(水) 13:24:58
>>348 lambdaはそもそも変数に代入せずにメソッド引数で使うのがいいと思うが。 あと左辺から型がわかるのでmsgは余計。 Action<string> action = Console.Write;
351デフォルトの名無しさん:2007/11/28(水) 13:33:23
俺はもうvarで統一してる
foreach(var match in regex.Matches(...))

って書けないのが死ぬほど気持ち悪い
352デフォルトの名無しさん:2007/11/28(水) 15:09:55
あれ?
コンストラクタで
public Hoge(string name,int id,double val){
_name=name;_id=id;_val=val;
}
みたいなのをかかなくていい技なんかなかったっけ?
353デフォルトの名無しさん:2007/11/28(水) 15:17:11
プロパティなら直接代入できる。

new Hoge{ _name = name, _id = id};

こんなんだったかな。
Fieldでは無理だったんじゃなかったか
354デフォルトの名無しさん:2007/11/28(水) 15:22:18
むーんコンストラクタ以外でいじりたくないときは使えんな・・・
暮らす面罵でvarがつかえなかったり、なんかこうかゆいところに手が届かない幹事。
LINQもターゲットが.NET3.5限定になるので使えないかもしれんし・・・
355デフォルトの名無しさん:2007/11/28(水) 15:30:22
1つのEXEファイルで配布したいという要請に従って、EnterpriseLibraryのdllを内包した形で
ビルドしてEXEを作ることって可能でしょうか?

ELのソースを全部取り込むのは無しの方向で・・・。
356デフォルトの名無しさん:2007/11/28(水) 15:30:54
C#は楽をさせることを第一に考えて作られた言語じゃないからな
コンストラクタぐらい書けよという話なんだろう
357デフォルトの名無しさん:2007/11/28(水) 15:39:18
自動プロパティとかは楽させるため以外の何者でもないやん
楽のさせ方が中途半端すぎ
358デフォルトの名無しさん:2007/11/28(水) 15:45:15
>>355
static libraryのことか?
359デフォルトの名無しさん:2007/11/28(水) 15:56:30
自動プロパティは匿名型との整合性を考えたんじゃないか?
しかし中途半端で使いにくいのは確かだ
存在しないものと考えてコーディングした方がいいような気がする
360デフォルトの名無しさん:2007/11/28(水) 15:59:49
>>358
そうかもしれませんが、.NETってできるのですか?
そういえば、MFCの頃に静的リンクの指定によって出来ましたよね。

今、ググって見たら、
http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en
こんなの出て来たのですが、これで1つに出来るのでしょうか・・・。
361デフォルトの名無しさん:2007/11/28(水) 16:47:46
暮らす面罵にvarとか言ってる奴ってvarを動的型と勘違いしてないか
362デフォルトの名無しさん:2007/11/28(水) 17:01:18
>>361
お舞こそ型推論の仕組みを理解してなくないか? 
var objList=new List<object>();
で暮らす面罵だろうがきっちり型推論できますが何か?
363デフォルトの名無しさん:2007/11/28(水) 17:20:53
>>362
それが出来たところで別にうれしくないということだろ
364デフォルトの名無しさん:2007/11/28(水) 21:31:21
暗号だらけだなあ
前はこんな状況じゃなかったのに…

そのまえにアプリ作ってんのかお前ら?
365デフォルトの名無しさん:2007/11/28(水) 21:40:20
最近はライブラリ作ってる
366デフォルトの名無しさん:2007/11/28(水) 21:43:04
言語仕様自体の話が多いのはいいことだと思うけどな
.NET Frameworkのクラスの使い方なんて大抵自分で調べたらすぐわかるだろ
367デフォルトの名無しさん:2007/11/28(水) 21:45:18
だなあ
言語仕様の話おもしろい
368デフォルトの名無しさん:2007/11/28(水) 21:48:11
で、結局それで何を作ったの?
369デフォルトの名無しさん:2007/11/28(水) 21:50:39
アプリ作るより子を作れ
370デフォルトの名無しさん:2007/11/28(水) 21:57:11
作り方の話ばかりしたいんだったらVB.NETスレに行くといいよ
必死な人たちが君の助けを待ってる
371デフォルトの名無しさん:2007/11/28(水) 22:18:07
たまに見るけど「アプリ作ってんのか?」ってひょっとして煽りなの?
んなもんみんな腐るほど作ってるだろうからいまいち意図が読めない。
372デフォルトの名無しさん:2007/11/28(水) 22:22:07
すまん最近サボっている
373デフォルトの名無しさん:2007/11/28(水) 23:19:05
アプリ=市販のパッケージアプリまたはフリーウェアまたはシェアウェア
374デフォルトの名無しさん:2007/11/28(水) 23:20:00
世界のプログラムの90%以上はそれらに属さない
375デフォルトの名無しさん:2007/11/28(水) 23:34:26
うっかり公開なんてしたらキチガイのサポートしなきゃいかんし
376デフォルトの名無しさん:2007/11/28(水) 23:49:08
アプリ作りなんて大半は言語に関係ないゴミ作業なんだから
わざわざ言語スレでやることもないだろ。
377デフォルトの名無しさん:2007/11/29(木) 03:01:56
>>376
このレス明らかに・・・働いてから言え
378284:2007/11/29(木) 06:52:37
PRB: Response.WriteFile は、大きなファイルはダウンロードできません。
http://support.microsoft.com/kb/812406/
>>323 Closeが使われているサンプル

>サーバ側でCloseできるってことは全部書き終わってるタイミング
なのにもかかわらず、クライアント側でStreamReader.ReadToEndが使えないのが??と思いました。
通常はCloseする必要が無いようですね。ありがとうございました。
379デフォルトの名無しさん:2007/11/29(木) 22:10:56
>>376
逆に何やってんのw

テストコードしか書いてないとか。
まさかそんなことは。。。
380デフォルトの名無しさん:2007/11/29(木) 22:49:55
>>377,379
妙な勘違いしてるうえにしつこいな。
面白い内部デザインや肝になるコーディングなんてアプリ作りの全作業量のせいぜい1割ぐらいだろ。
他のゴミみたいなルーチンワークがそんなに好きなのか?
381デフォルトの名無しさん:2007/11/29(木) 23:02:24
私タイピストなのでわかりません><
382デフォルトの名無しさん:2007/11/30(金) 00:18:02
・プログラミングは、できなさそうな処理を如何に実現するか
・時間かかる処理をどう高速化するか
これが楽しい。仕様書作りとかは時間の無駄・・・
383デフォルトの名無しさん:2007/11/30(金) 00:36:52
>>380
其処までまかせっきりに出来てうらやましいよ
384デフォルトの名無しさん:2007/11/30(金) 00:49:29
続きはマ板にてお楽しみ下さい。
それではC#の話題をどうぞ。
385デフォルトの名無しさん:2007/11/30(金) 01:07:16
>>380

君はFormsやASP.NETでイベント記述する程度のことしか作業したことがないんだね。
ソケット通信やスレッドを扱えばわかると思うが、ゴミどころかミスひとつで致命的な
エラーが発生するシステムも存在することをお忘れなく。
386デフォルトの名無しさん:2007/11/30(金) 01:11:26
そこはどう考えても「肝」だろ
つまらん見栄の張り合いはもういいっつの
387デフォルトの名無しさん:2007/11/30(金) 08:05:51
XAMLソースをジェネレートしたり
DataSetとUI、DBのマッピングフレームワーク作ったり。

最近の開発言語環境は、メタプログラミングができて楽しいぞ。
つまらないルーチンワークなんてのは、できる限りコンピュータにやらせるもんだ。
388デフォルトの名無しさん:2007/11/30(金) 11:08:10
>>387
きわめて同意。これでソース-セマンティクス-ILへの相互変換フレームワークあればもっと面白かったのに。
CodeDOMとかExpressionとか微妙に中途半端
389デフォルトの名無しさん:2007/11/30(金) 17:02:59
Formをそのまま拡大縮小することってできますか?エクセルとかでCtrl+ホイールを使ったときのようにそのままレイアウトを変えずに拡大・縮小。
AutoScalingModeとかの辺りを見てみたけどDPIにしてもなんか期待していた動作にならず。Control.Scaleなどもあるけれどこれも同じ。
コントロールが沸けわからない基準でレイアウトが変わってしまいます(´・ω・`)
390デフォルトの名無しさん:2007/11/30(金) 17:08:49
WPFに期待しましょう
391デフォルトの名無しさん:2007/11/30(金) 17:09:46
そういうことするのってWPFの領域なんじゃね?

無理やりやるならばAutoScaleModeをFontにして、
Formのフォントのサイズを変えるとアンビエントなままな子のフォントも追従して
スケールが変わる
個別にフォント設定してたらだめだけど
392デフォルトの名無しさん:2007/11/30(金) 18:00:47
Sizer For .NETとかいうコントロールがそれできるみたいだけどどうやってるんだろ。
393デフォルトの名無しさん:2007/11/30(金) 18:12:42
なんだそのwxWidgets
394デフォルトの名無しさん:2007/11/30(金) 18:48:46
すでに起動している自身のアプリケーションと通信するのってどうすればいいんでしょうか?
395デフォルトの名無しさん:2007/11/30(金) 18:55:04
ソケット開く
396デフォルトの名無しさん:2007/11/30(金) 19:26:21
それ以外になんかないっすか?
397デフォルトの名無しさん:2007/11/30(金) 19:37:30
名前付パイプ
398デフォルトの名無しさん:2007/11/30(金) 19:41:38
一つに制限しといて、複数起動してるように見せかけるとか
399デフォルトの名無しさん:2007/11/30(金) 20:46:27
>>394
IpcChannel使うのが常道じゃない?
400デフォルトの名無しさん:2007/11/30(金) 20:53:18
今ならWCFで…どうなんだろ触ったことないけど
401デフォルトの名無しさん:2007/11/30(金) 21:45:43
WCFはただの通信規約のフレームワークだよ。
プロセス間通信も忘れないように。
402デフォルトの名無しさん:2007/11/30(金) 23:00:04
AppDomain.AppendPrivatePathを使わずにPrivatePathを動的に追加する方法ってありませんか?
AppDomainSetupを使おうにもすでに自分自身が起動しているので自分自身のAppDomain
があるので意味ないし、AppDomain.AppendPrivatePathは切り捨てられてるし、
アプリケーション構成ファイルを毎回作るにしてもそのたびに再起動しなければいけないので
だるいし…
やっぱりAssemblyResolveを使うしかないですかね?
403デフォルトの名無しさん:2007/11/30(金) 23:07:13
状況がまるで想定できない
404デフォルトの名無しさん:2007/12/01(土) 00:13:05
>>396
WM_COPYDATA
405デフォルトの名無しさん:2007/12/01(土) 03:01:20
>>403
プラグインなどを使用するときに、個々で設定ファイルを保存する場合はばらけないように
各プラグインでディレクトリを分けると思うんですが、そいつらをPrivatePathに入れるには
アプリケーション構成ファイルに予めパスを書いておくか、AppDomain.AppendPrivatePath
を使わないといけないので、どうしようかなと。
そもそもこういう使い方自体が間違ってるのかもしれませんが…
406デフォルトの名無しさん:2007/12/01(土) 16:39:27
もうアセンブリ名のサブディレクトリでいいやん。
407デフォルトの名無しさん:2007/12/01(土) 22:54:50
>>406
よくわからないのですが、アセンブリ名と同じディレクトリ作って
AssemblyResolveで読み込むってことですか?
408デフォルトの名無しさん:2007/12/01(土) 23:00:58
409デフォルトの名無しさん:2007/12/02(日) 07:31:19
ツリービュウー等のアイテムが追加された後に呼び出される
イベントとかってないですか?
ノード自身が親(ツリービュー)を見つけられる方法が欲しいんですが。
410デフォルトの名無しさん:2007/12/02(日) 12:24:19
ふらっと向けの質問がこのごろ多すぎ。
411デフォルトの名無しさん:2007/12/02(日) 12:26:16
そういやこことふらっととどう使い分ければいいの?
412デフォルトの名無しさん:2007/12/02(日) 12:29:29
ふらっと=初心者 コントロールや基本的な言語仕様等
相談室=中上級者 ネットワーク、DB、スレッド、ネイティブやWin32API呼び出し等 
413デフォルトの名無しさん:2007/12/02(日) 12:31:27
なーるほど
414デフォルトの名無しさん:2007/12/02(日) 12:31:52
質問内容よりもむしろ質問者自身が何がわからないのかわかってるかどうか
415デフォルトの名無しさん:2007/12/02(日) 12:56:45
……なコントロールないですか?

(´・ω・`)MSDN読んだらいいがな

……なイベントってないですか?

(´・ω・`)MSDN読んだらいいがな

なんかエラーがでます。どうしたらいいですか?

(´・ω・`)しらんがな
416デフォルトの名無しさん:2007/12/02(日) 16:40:47
初心者=MSDNに書いてあることを聞いてくる。
中級者=MSDNに書いてないことを聞いてくる。
上級者=WEB、本に書いてないことを聞いてくる。
417デフォルトの名無しさん:2007/12/02(日) 17:01:38
初心者=MSDNに書いてあることを聞いてくる。
中級者=MSDNに書いてないことを聞いてくる。
上級者=WEB、本に書いてないことを聞いてくる。
ーーーーーーー素人の壁ーーーーーーーーーー
プロ=WEB、本に書いてないことに答える。
418デフォルトの名無しさん:2007/12/02(日) 17:12:27
419デフォルトの名無しさん:2007/12/02(日) 17:20:58
コピペ君って馬鹿だな、まで読んだ。
420デフォルトの名無しさん:2007/12/02(日) 17:39:44
初心者=MSDNに書いてあることを聞いてくる。
中級者=MSDNに書いてないことを聞いてくる。
上級者=WEB、本に書いてないことを聞いてくる。
−−−−−素人の壁−−−−−
プロ=WEB、本に書いてないことに答える。
−−−−−プロの壁−−−−−
エスパー=まともな質問でない、意味不明な質問、質問が支離滅裂な状態、でも答える。
421デフォルトの名無しさん:2007/12/02(日) 17:47:56
下らん。
まあ何が上級者で何が初心者だか知らないが、
こういうくだらないことに血道を上げる奴が低能であることは自信をもって断言できるよ。
422デフォルトの名無しさん:2007/12/03(月) 08:35:42
(2ch)初心者=ネタにマジレス
(2ch)中級者=(ry
423デフォルトの名無しさん:2007/12/03(月) 10:39:31
フォームなプログラムで稼働中のログを表示するために
コンソール窓を後から表示することはできますか?
424デフォルトの名無しさん:2007/12/03(月) 10:48:29
コンソールアプリをProcess.Createしてプロセス間通信
425デフォルトの名無しさん:2007/12/03(月) 12:15:20
コンソールじゃなくても、テキストボックスとかにリダイレクトすればいいんじゃね
TextBoxWriterでぐぐったらいろんな人が実装したのが見つかる
426デフォルトの名無しさん:2007/12/03(月) 12:38:32
コンソールアプリで作ってフォーム足すとか
427デフォルトの名無しさん:2007/12/03(月) 17:47:39
AllocConsole
428デフォルトの名無しさん:2007/12/04(火) 08:30:44
Bitmap.FromHbitmap()についての質問なんですが、これってα付きのHBITMAPって
読めないのでしょうか?
BITMAPV4HEADERから作った場合、bV4V4Compressionの値がBI_RGBの時は
成功するのですが、BI_BITFILEDにするとBitmap.FromHbitmap()実行時に
ArgumentExceptionが発生します
429デフォルトの名無しさん:2007/12/06(木) 16:42:18
自分で定義したオブジェクトをグリッドにバインドする方法ってどうやるの?
stringだけのオブジェクトだとLengthって列しか表示されないです・・・orz
430デフォルトの名無しさん:2007/12/06(木) 17:16:32
グリッドって具体的には何さ
431デフォルトの名無しさん:2007/12/06(木) 23:46:36
外部DLL関数をdllimportで呼んで使ってるのですが、呼び出す関数が多すぎて
1つ1つに [DllImport("hoge.dll")]と書くのが面倒になってきました。
もっと簡単でスマートな方法ないでしょうか?
432デフォルトの名無しさん:2007/12/06(木) 23:47:54
public static externを[DllImport("hoge.dll")]public static externに置換すれば
433431:2007/12/06(木) 23:59:07
>>432
実にスマートですね。そうします。。。
434デフォルトの名無しさん:2007/12/07(金) 08:49:19
ヘッダによっては頑張って置換しまくればちょっと手で直すだけで使えたりする
435デフォルトの名無しさん:2007/12/08(土) 23:22:28
hage
436デフォルトの名無しさん:2007/12/09(日) 00:20:11
インストーラーのVersionNTでOS限定したいんだが、この値はOSアップグレードした場合などは
ちゃんと更新されるのですか?
437デフォルトの名無しさん:2007/12/09(日) 00:23:32
すいませんでした。質問直後に自己解決しました。
438デフォルトの名無しさん:2007/12/09(日) 00:43:29
>>437
もうくるな。
439デフォルトの名無しさん:2007/12/09(日) 01:00:29
他の言語にあってC#にはない有用な言語仕様がを挙げてください。
(例えば、C#に継続ってあるんでしたっけ?)
440デフォルトの名無しさん:2007/12/09(日) 01:05:03
>>439
市ね。すれ違い
441デフォルトの名無しさん:2007/12/09(日) 01:06:08
>>439
日本語でおk
442デフォルトの名無しさん:2007/12/09(日) 01:06:53
他の言語にあってC#にはない有用な言語仕様を挙げてください。
(例えば、C#に継続ってあるんでしたっけ?)
443デフォルトの名無しさん:2007/12/09(日) 01:08:27
継続って何だろうな
continueのこと?
444デフォルトの名無しさん:2007/12/09(日) 01:09:45
Shemeの継続、実行コンテキストのことかな。
445デフォルトの名無しさん:2007/12/09(日) 01:10:38
ないことが有用な仕様って
446デフォルトの名無しさん:2007/12/09(日) 01:12:42
他の言語にあってC#にはない「有用な言語仕様」を挙げてください。
あってもうれしくない無用な言語仕様を挙げる必要はありません。
(例えば、C#に継続ってあるんでしたっけ?)
447デフォルトの名無しさん:2007/12/09(日) 01:14:34
なんか質問のしかたが、はてなとかgooみたいだな。
448デフォルトの名無しさん:2007/12/09(日) 01:15:08
>>446
他でやれw
449デフォルトの名無しさん:2007/12/09(日) 01:16:06
おい、おまいら、他の言語にあってC#にはない「有用な言語仕様」をおしえれ。
450デフォルトの名無しさん:2007/12/09(日) 01:17:04
聞いてどうする?
ヘジか?
451デフォルトの名無しさん:2007/12/09(日) 01:17:23
ヘジって何?
452デフォルトの名無しさん:2007/12/09(日) 01:18:27
ヘジを知らんのか
あんまりC#やってない人?
453デフォルトの名無しさん:2007/12/09(日) 01:19:20
あんまりやってない。
454デフォルトの名無しさん:2007/12/09(日) 01:19:27
デストラクタがないな。
スコープはずれたタイミング呼び出されるメソッド。
455デフォルトの名無しさん:2007/12/09(日) 01:19:30
ここで聞くよか、C#否定派に聞いたほうが出てくるんじゃまいかw
456デフォルトの名無しさん:2007/12/09(日) 01:21:32
>>454
あれ、デストラクタってないんだっけ?
dispose()(だっけ?)とかクラス名に~付けたメソッドってなかったっけ?
457デフォルトの名無しさん:2007/12/09(日) 01:23:01
>>454
Disposeの事?
458デフォルトの名無しさん:2007/12/09(日) 01:24:37
一応MSDNにはデストラクタとして書いてあるけどな
459デフォルトの名無しさん:2007/12/09(日) 01:25:03
>>455
C#否定派ってどこにいるの?
460デフォルトの名無しさん:2007/12/09(日) 01:26:36
Rubyスレあたりに居そうな気が
461デフォルトの名無しさん:2007/12/09(日) 01:27:30
>>459
マ板にはいっぱいいるよ
ついて来れてないだけの人達だけどね
462デフォルトの名無しさん:2007/12/09(日) 01:28:56
>>456
それはusing使わないと呼び出されないじゃん。
あとは、GCに呼び出されるやつもあるけど、C++とかDみたいにスコープをはずれた
タイミングで呼び出されるやつはない。
463デフォルトの名無しさん:2007/12/09(日) 01:35:07
usingとDisposeでC++やDと同じ事ができるし
usingを使わないことで違う事もできるってだけなんだが
なんで無い事になるのかい
464デフォルトの名無しさん:2007/12/09(日) 01:38:27
>>463
usingはネストが深くなる。

using(a)
using(b)
using(c) {
}

みたいに書けって言われるけど、こうはかけない状況が多々ある。

465デフォルトの名無しさん:2007/12/09(日) 01:40:28
>>460
Rubyスレでは既に聞いたw

>>462
そうなんだ。それはC#の弱点なの?
466デフォルトの名無しさん:2007/12/09(日) 01:42:30
C#の弱点を聞きに来たのかw
467デフォルトの名無しさん:2007/12/09(日) 01:42:41
全く同じ構文が欲しいってだけじゃね
468デフォルトの名無しさん:2007/12/09(日) 01:45:00
>>465
弱点ってほどでもないけど、個人的にはあってほしい機能だよ。
469デフォルトの名無しさん:2007/12/09(日) 01:47:03
usingはつけるの忘れたら終わりだろ

File.Using("hoge.txt", file =>{
...
});

そろそろこうする時期に来てると思うんだ
470デフォルトの名無しさん:2007/12/09(日) 01:49:59
そっか
471デフォルトの名無しさん:2007/12/09(日) 01:51:05
>>466
そうだね。
というか、最強言語を探しに来て、C#が一番近そうだと思ったから、
C#が最強言語になるために足りないものを調べている。
472デフォルトの名無しさん:2007/12/09(日) 01:51:51
なんだ中学生か
473デフォルトの名無しさん:2007/12/09(日) 01:51:54
typedefがないなあ
強力なマクロもない
多重継承も無い
474デフォルトの名無しさん:2007/12/09(日) 01:53:37
>>473
無いというかわざわざ省いたものじゃないのか
475デフォルトの名無しさん:2007/12/09(日) 01:53:51
多重継承のように、無い理由付けがされている機能はなくてもいいと思う。
あると便利なのにスルーされている機能があったら教えて。
476デフォルトの名無しさん:2007/12/09(日) 01:54:13
何に対して最強なんだ
477デフォルトの名無しさん:2007/12/09(日) 01:55:43
メソッドスコープの静的変数
478デフォルトの名無しさん:2007/12/09(日) 01:55:48
>>471
俺もそういう話というか考察は好きだ
479デフォルトの名無しさん:2007/12/09(日) 01:56:22
プログラミング言語の中での最強。
他の言語使いに、無いと言って馬鹿にされない様に完全無欠を目指す。
多重継承のように、無いと言われた時に理由を話せれば無くても問題ない。
480デフォルトの名無しさん:2007/12/09(日) 01:56:26
Delphiにある委譲自動化が欲しい
実質多重継承だけど
481デフォルトの名無しさん:2007/12/09(日) 01:56:58
ダックタイピングが出来ない
482デフォルトの名無しさん:2007/12/09(日) 01:57:24
>>474
ジェネリックをネストして型名が長くなったとき、typedef欲しいと思う。
483デフォルトの名無しさん:2007/12/09(日) 02:00:28
関数型言語の原理主義者あたりからすると、もうぜんぜんダメなんじゃね?
484デフォルトの名無しさん:2007/12/09(日) 02:00:47
RubyとSchemeとOCamlとPrologを撃破できれば最強になると思うんだけど
これらと比べてC#に足りない点はないかな。
485デフォルトの名無しさん:2007/12/09(日) 02:04:32
>>483
どこら辺がダメかな。
λ式は制圧したよね。継続はよくわからないけど。遅延評価はあるんだっけ?
486デフォルトの名無しさん:2007/12/09(日) 02:07:09
遅延評価はFunc<T>で十分
487デフォルトの名無しさん:2007/12/09(日) 02:08:07
実はもう最強?
488デフォルトの名無しさん:2007/12/09(日) 02:08:55
>>485
オブジェクトがImmutableでないから。
489デフォルトの名無しさん:2007/12/09(日) 02:10:25
C++におけるconstってない気がする
490デフォルトの名無しさん:2007/12/09(日) 02:44:14
無くても足りてるから
491デフォルトの名無しさん:2007/12/09(日) 11:42:34
設計者が「インテリセンスを拡張すれば…」とか言っちゃうくらいだからな
あんまり言語だけで語るのは意味無いよ
VC#のインテリセンスは神
492あにす ◆sGTL1yK0.6 :2007/12/09(日) 11:44:14
>>477
あ、やっぱり無いんだ?
C#でメソッド内にstatic hoge mona = orz;って書いたら怒られるから、
「VB.NETのSharedはどこにあるんだろう…」
と思いながらクラス変数にしてた。
493デフォルトの名無しさん:2007/12/09(日) 11:56:25
いつでも付けられるけどあんまり意味のない機能はとりあえず付けない方向なんじゃね
自動プロパティなんかそうだったし
494デフォルトの名無しさん:2007/12/09(日) 11:58:37
C#の機能じゃないけど、プロジェクトの循環参照って出来るようにならんもんだろうか。
これが出来ないから、プロジェクトA内のクラスを使うプロジェクトBは、
自分の持つクラスをプロジェクトAに対して公開できない。

というと、そんな状況になるのはそもそもプロジェクトやクラスの切り分けが
間違ってるからだ、という声が聞こえてくるようだ。

最初は俺自身そのように考えていたんだけど、どうも必ずしもそうでもない場合が
あるような気がする。
適切な例を提示できなくて申し訳ないんだけど。
495デフォルトの名無しさん:2007/12/09(日) 11:59:51
>>492
C#では全ての関数がクラスやインスタンスに属してるから、
フィールドで事足りるってことだろう。
496デフォルトの名無しさん:2007/12/09(日) 12:02:51
>>492
揚げ足取りみたいになるが、メソッドスコープの静的変数なんてVBにもないでしょ。
VBのSharedフィールドはC#のstaticフィールドと同じでしょ。

VBのStatic付きのローカル変数は「メソッドスコープの静的変数」じゃないよ。
あれは機能的には「特定のメソッド内からしかアクセスできないフィールド」
という感じ。
497デフォルトの名無しさん:2007/12/09(日) 12:06:41
CILに静的変数ないからな。

フィールドをあたかもローカル変数のように見せかける構文糖を用意するしかない
498あにす ◆sGTL1yK0.6 :2007/12/09(日) 12:24:48
>>496
勉強になた。やっぱ恥は晒すものね。
C#で同じことが出来たらいいのに。

あと、C#にもWithEvents相当の機能が干し犬。
499デフォルトの名無しさん:2007/12/09(日) 12:47:13
WithEventsなんてあったからって特別便利になるようなものじゃないだろ
複数のコントロールで共通のイベントハンドラを使うようデザイナで指定することもできるし
手で書くなら手間はWithEventsと変わらんし
500デフォルトの名無しさん:2007/12/09(日) 12:56:03
Typedefだってシンタックスシュガーで出来ると思うんだけど
ヘジはILレベルで変えなきゃならんから時既に遅しとかいってたな
501デフォルトの名無しさん:2007/12/09(日) 12:58:02
>>500
C#の世界だけなら構文糖でいけるだろうけど、
他の言語との相互呼び出しやILレベルでの強いtypedefを実現するのは無理じゃなかろうか。
502あにす ◆sGTL1yK0.6 :2007/12/09(日) 13:03:24
>>499
Private Sub ガッ(byval sender As Object, byval e As EventArgs) Handles >>499.ぬるぽ
    Dim orz As Nanasi = DirectCast(sender, Nanasi)
    Call Sendガッ(orz)
End Sub
みたいな時にHandlesの後を見れば
何のイベントプロシージャか分かるのはエレガントだと思うぬ。
503デフォルトの名無しさん:2007/12/09(日) 13:09:51
ファイル内なら今でもできるわけで。
定義側でやりたいって話だから必然的に情報の埋め込みは必要になる。

属性レベルで保持して構文糖でサポート、レベルならできそうだけどね。
CLR内でもまともに扱おうとしたら無理があるな。
504デフォルトの名無しさん:2007/12/09(日) 13:15:22
>>503
ファイル内でも弱いtypedefしかできないと思うが。

いや、どっちの話をしてるのかわかんないけど。
505デフォルトの名無しさん:2007/12/09(日) 13:23:32
うわほんとだ
usingで出来るんだな
知らなかったwwwww
506デフォルトの名無しさん:2007/12/09(日) 19:13:25
VBはもう見たくないから、巣に帰ってくれんか・・・
507デフォルトの名無しさん:2007/12/09(日) 20:00:45
>>504ああ、もち弱い方、構文糖レベルの。
508デフォルトの名無しさん:2007/12/09(日) 20:40:33
もうtypedefがずらずらならんでるのなんか見たくないお・・・
typedef IntPtr HWND
509デフォルトの名無しさん:2007/12/09(日) 20:48:43
>>508
dllimportをコピペするのに便利かもw
510デフォルトの名無しさん:2007/12/09(日) 20:56:15
ヘッダを基にしてdllimportしまくるときにusingでやったことあるw
511デフォルトの名無しさん:2007/12/09(日) 21:41:23
>>499
WithEvents とHandlesを組み合わせた機構は無茶苦茶便利だぞw
便利な上に>>502が言わんとしているような利点、つまり「それ」がイベントハンドラで
あることを明示する機能もある。

実際使わずに想像だけで物言っちゃダメだよ。
あれはC#に導入してもいいと思うよ。
512デフォルトの名無しさん:2007/12/09(日) 22:07:45
このスレもVB厨沸いてんのか、VB使っとけよ
513デフォルトの名無しさん:2007/12/10(月) 05:10:34
>>511
C#に必要かどうかはおいといて、eventのより抽象化された実装としては悪くないと思うよ。
C#のは良くも悪くも生っぽいというかILの基本的な仕掛けがそのまま見えるところが特徴だしな。
逆にVBのDispose/Finalize周りがC#と同じでむき出しの実装になってることに違和感を覚えた。
いまならC++/CLIのような仕組みにすべきなんだろうと思う。
514デフォルトの名無しさん:2007/12/10(月) 11:50:53
リソース管理としてはC++/CLIの形が理想だな

ttp://jeanne.wankuma.com/tips/cpp/programming/dispose.html

ここなんかにはusingしてさらにCloseもしろとか書いてあるが
515デフォルトの名無しさん:2007/12/10(月) 12:35:45
スプリットコンテナの線に.....みたいのが付いていて
ダブルクリックすると出たり隠れたりするやつはどうやって作るの?
516デフォルトの名無しさん:2007/12/10(月) 13:19:56
ただC++/CLIでは値型ローカル変数とマネージポインタ変数の型が明示的に表現されるから

FileStream fs(L"hoge.txt");
FileStream^ fs = gcnew FileStream(L"hoge.txt");

これで書き分けることが出来るのだろう
よく知らんけど
C#だとusingになっちゃうのはまあ仕方ないことかもしれない
517デフォルトの名無しさん:2007/12/10(月) 14:05:33
>>514
そこの例にあるCloseは全部不要だな

C++/CLIのは良さそうに見えるけど実際使ってみたら結構分かりにくいと感じた
どっちみち意識しないといけないんだから、目立つC#のusingの方が好き
518デフォルトの名無しさん:2007/12/10(月) 14:25:34
Close取ったらシンメトリーが崩れる
519デフォルトの名無しさん:2007/12/10(月) 14:30:45
マニュアルに Close == Disposeと明記してあるならいらないと思う。
明記してないなら用心でCloseも呼んどく。
バッファをフラッシュせずにハンドルだけ閉じないかとか心配してしまうから。
520513:2007/12/10(月) 14:35:53
>逆にVBのDispose/Finalize周りがC#と同じでむき出しの実装になってることに違和感を覚えた。 
ここは朝っぱらだったので端折りすぎた。

言いたかったのはusingのことではなくて、
~ClassA() { }
!ClassA() { }
のこと。本物のDispose/Finalizeは隠されていて、
この2つはDispose(bool)から呼び出されるメソッドだということ。
GC.SuppressFinalizeを直接書かなくていいだけでもだいぶすっきりしてると思う。
521デフォルトの名無しさん:2007/12/10(月) 14:36:14
CloseとDisposeの違いはCloseだと再びOpen出来るんだっけ
CloseだけしてDisposeしないのがアウトになったりされると余計にわかりにくいな
522デフォルトの名無しさん:2007/12/10(月) 14:39:26
!ClassA()はC#にも取り入れられるべきな気がする
523デフォルトの名無しさん:2007/12/10(月) 14:43:37
!ClassAはどちらかというとC#の~ClassA相当
524デフォルトの名無しさん:2007/12/10(月) 14:44:20
>>521
System.IO.StreamReaderはこうなってて違いはない。Close後の再オープンは出来ない。
public override void Close() {
    this.Dispose(true);
}

525デフォルトの名無しさん:2007/12/10(月) 15:23:53
!ClassA()はFinalizeもDisposeも
Dispose(bool)もSuppressFinalizeもベースクラスのDisposeも自動で実装して
アンマネージかマネージかによる分岐もやってくれるんだろ
526デフォルトの名無しさん:2007/12/10(月) 18:30:41
>>515
ない
527デフォルトの名無しさん:2007/12/10(月) 19:49:57
俺は大抵Closeは普通に書いて、
usingと併用してるな。
記述が煩雑になるので、Closeはfinallyにしてない。
528デフォルトの名無しさん:2007/12/10(月) 21:48:36
冷害は調べないほうがいいの
529デフォルトの名無しさん:2007/12/10(月) 21:58:23
ドキュメントに書いてあって、対処できそうならキャッチ
530デフォルトの名無しさん:2007/12/11(火) 01:10:21
Visual C#を使っています

aを押したら自動候補が現れて、aだけを入力したいのにasって入力されてしまうんですが、
aだけを入力する時ってどうすればいいのでしょうか?

a→as
b→base
ってなっちゃう
531デフォルトの名無しさん:2007/12/11(火) 01:13:11
Esc
532デフォルトの名無しさん:2007/12/11(火) 01:16:33
>>531
即レスありがとうございます!
できました^
533デフォルトの名無しさん:2007/12/11(火) 13:19:41
ところで、C#は3.0になってRubyに完全勝利したの?
534デフォルトの名無しさん:2007/12/11(火) 13:21:26
IronPythonに完全敗北しました
535デフォルトの名無しさん:2007/12/11(火) 13:37:02
つまり、C#はIronRubyに歴史的大敗ってことか。
536デフォルトの名無しさん:2007/12/11(火) 13:54:24
あのくそ遅い言語で何を記述するというのですか?
スピード速いなら何でも良いです(´・ω・`)
537デフォルトの名無しさん:2007/12/11(火) 14:01:26
つC
538デフォルトの名無しさん:2007/12/11(火) 14:01:57
C# 3.0は最高だ
ラムダ式万歳
539デフォルトの名無しさん:2007/12/11(火) 14:02:52
λ式なんてRubyにもあるだろ。
540デフォルトの名無しさん:2007/12/11(火) 14:07:27
C#もS式で記述できればいいのにな
541デフォルトの名無しさん:2007/12/11(火) 14:11:13
ブロック構文の方が見た目分かりやすいと思うがC#のやつでも十分だ
何より静的型の方が俺は好きだ
542デフォルトの名無しさん:2007/12/11(火) 14:36:05
LINQって特定用途のくせに、予約語増やしまくりで生意気じゃない?
from、where、select とかって、今後も構文レベルでどんどん拡張しまくるつもりなの?
なんかおかしくね?
543デフォルトの名無しさん:2007/12/11(火) 14:37:23
特定用途のところでしか予約語にならないだろ
544デフォルトの名無しさん:2007/12/11(火) 14:41:27
でも、その特定用途のためにコンパイラ(パーサ)を拡張してるんだよね。
ライブラリでいいんじゃね?なんで言語拡張しちゃってるの?意味わからんし。
545デフォルトの名無しさん:2007/12/11(火) 14:42:12
その言語拡張を自分たちにもさせてくれ('A`)
546デフォルトの名無しさん:2007/12/11(火) 14:43:36
そのためのLispです。
547デフォルトの名無しさん:2007/12/11(火) 14:44:02
共通に使う部分は共通にするべきだ
コミュニケーションを円滑に進めるために
言語を拡張する以外の方法でそれが出来ないならそうしたらいい
548デフォルトの名無しさん:2007/12/11(火) 14:46:53
LINQが拡張されるたびにC#の言語仕様も拡張されていくのか
確かにキモいな
549デフォルトの名無しさん:2007/12/11(火) 14:48:51
お前らが勝手に拡張したらコミュニケーションが出来なくなるだろ
予約語が増えるといったって識別子が制限されるわけでもないし
550デフォルトの名無しさん:2007/12/11(火) 14:50:06
>>540
L#でも使ってろ
551デフォルトの名無しさん:2007/12/11(火) 14:54:34
>>549
ライブラリは皆が勝手に拡張しているものだが、コミュニケーションは出来ているぞ。

逆に、特定用途のために言語仕様が大きくなれば、
(その特定用途の記述は特定用途を使っていない人には理解が難しいわけだから、)
その分コミュニケーションが取りづらくなる。

言語仕様は最大公約数的であるべきだよ。
552デフォルトの名無しさん:2007/12/11(火) 15:00:59
>>551
.NET Frameworkのライブラリの使い方の質問はそこら中で出来るけど
自作クラスの使い方の質問なんて作者にしか出来ないだろ
そしてLINQはプログラミングのあらゆる場面で出て来る
特定用途でもなんでもない
構文的には特殊なものに限っていて、それによって識別子がかぶったりすることを防いでいるわけだが
553デフォルトの名無しさん:2007/12/11(火) 15:03:47
var q = hoges.Where(s => s.Length == 5).OrderBy(s => s).Select(s => s.ToUpper());
クエリ構文はあくまでも上のようなよく使う組み合わせを次のように簡潔に書くためのもので、
var q = from s in hoge where s.Length == 5 orderby s select s.ToUpper();

SQLにはあってクエリ構文にないものは拡張メソッドを直接使うことになる。
var q = ( from s in hoge where s.Length == 5 orderby s select s.ToUpper() ).Distinct();

機能を拡張してもリンク構文を増やすことはあまりやらないと思うな。
554デフォルトの名無しさん:2007/12/11(火) 15:09:07
LINQ構文なんてSQL使用者の便宜のためにあるんで
慣れたら必要なくなるんじゃないかと思うが
555デフォルトの名無しさん:2007/12/11(火) 15:09:56
そのうち
var q = ( from s in hoge where s.Length == 5 orderby s select s.ToUpper() ).Distinct();

var q = ( from s in hoge where s.Length == 5 orderby s select distinct s.ToUpper();
をC#のバージョンで切り替えるようなソースが出てくるんだろ。

気持悪すぎる。
556デフォルトの名無しさん:2007/12/11(火) 15:21:34
いやだと思うなら拡張メソッドで全部書けばいいんだよ。
クエリ構文はLINQ拡張メソッドの簡易構文なのだから。

そういえばLINQ for XMLでXMLリテラルの採用は見送ってますね。
気持ち悪いとか言う輩が多かったせいだろうか。VBにはしっかりあるけど。
var x = 
 <hello>
   <hoge>hhh</hoge>
 </hello> ;
557デフォルトの名無しさん:2007/12/11(火) 15:29:51
さすがにキモイです^^
558デフォルトの名無しさん:2007/12/11(火) 15:30:01
>>556
自分だけの問題なら別にいいんだよ。

例えば、自分がC#3のコンパイラしか持っていなくて、
C#4の言語仕様にdistinctが取り込まれてC#4のソースにdistinctが使用されたら
自分の持っているコンパイラではそのソースはコンパイルできないんだよ。それは困る。

言語仕様の拡張ではなくライブラリでの提供だけなら、ライブラリを調達するだけで対応できる。
コンパイラまで変える必要はない。

このインパクトの違いは大きい。
559デフォルトの名無しさん:2007/12/11(火) 15:31:51
どうせWindowsUpdateで入る.NETにCscついてくるわけだから、どうでもいいよ。
560デフォルトの名無しさん:2007/12/11(火) 15:32:10
C#の採用しないセンスは素敵だな
何を取り入れないかにすごく気を使っている感じがする
561デフォルトの名無しさん:2007/12/11(火) 15:34:15
>>558
C#4のソースがC#3でコンパイル出来るわけねーじゃん
今までを見てみろよ
それでも別に何の問題もなかったろ
562デフォルトの名無しさん:2007/12/11(火) 15:34:32
. も () も <> も使わないメソッド呼び出しの構文糖をユーザにも定義させてほしいよ。
563デフォルトの名無しさん:2007/12/11(火) 15:37:22
LINQの評価順は分かりにくいな
拡張メソッドで書いた方が断然読みやすい
564デフォルトの名無しさん:2007/12/11(火) 15:38:30
>>558
自分が.NET3.5とC#3のコンパイラしか持っていなくて、
.NET4.0の標準ライブラリに新たな関数が追加されて、C#4のソースにその関数が使用されたら
自分の持っているコンパイラではそのソースはコンパイルできない。

同じ話じゃん。
565デフォルトの名無しさん:2007/12/11(火) 15:39:08
言語をユーザーが勝手にいじるのは不利益が大きすぎる
言語の標準を守って節度のある使い方をしてくれる人ばかりならいけるんだろうけど
566デフォルトの名無しさん:2007/12/11(火) 15:42:13
>>564
ぜんぜん違うよ。ライブラリならその言語を使って自前で作ることができる。言語仕様を拡張されたら手も足も出せない。
567デフォルトの名無しさん:2007/12/11(火) 15:42:40
>>562のような奴がいるから言語に手を加えることが許されないんだな
568デフォルトの名無しさん:2007/12/11(火) 16:00:08
ま、コンパイルに必要なコンパイラの最低のバージョンを指定する
アトリビュートなりなんなりがあったほうがいいかもなあ。
569デフォルトの名無しさん:2007/12/11(火) 16:00:39
コンパイラはどうでもいいだろ
.NET Frameworkのバージョンは指定できるようになったし
570デフォルトの名無しさん:2007/12/11(火) 16:07:04
ここの差って、C# 3.0で大分解消された?
http://joe.truemesh.com/blog//000390.html
571デフォルトの名無しさん:2007/12/11(火) 16:13:18
ちなみにVBのクエリ構文はC#のそれよりキーワードが多い。
DISTINCTやSKIPやTAKEなどもあるし、拡張メソッドへの単純な糖衣構文でもない。
LINQの拡張毎にキーワード増やす気満々だ。VBらしいっちゃらしい。

Dim xm =
  <AAA>
    <BBB id="1">aaaaacxzc</BBB>
    <BBB id="2">aaaaaxczx</BBB>
  </AAA>
Dim rs = From x In xm...<BBB> _
   Where x.@id > 2 _
   Distinct Skip 1 Take 3 _
   Order By x.@id Descending _
   Select ID = x.@id, x
572デフォルトの名無しさん:2007/12/11(火) 16:16:41
>>570
クロージャの考え方は変わってないよ。
その違いはバグではなくてC#のクロージャはそういうものというのが正解。
C#のクロージャについてはここの前スレかその辺でだいぶ議論した記憶があるな。
573デフォルトの名無しさん:2007/12/11(火) 16:17:55
public List<Employee> Managers(List<Employee> emps) {
 return emps.FindAll(delegate(Employee e) {
  return e.IsManager;
 }
}

public List<Employee> Managers(List<Employee> emps) {
 return emps.FindAll(e => e.IsManager);
}

def managers(emps)
 return emps.select {|e| e.isManager}
end

差は縮まってきたな
574デフォルトの名無しさん:2007/12/11(火) 16:23:12
>>566
ソースに対応できるコンパイラを使え
575デフォルトの名無しさん:2007/12/11(火) 16:23:42
>>570
よく読んだらクロージャの変数バインドの話じゃなかった。>>572はなしで。
576デフォルトの名無しさん:2007/12/11(火) 16:24:17
public var Managers(List<Employee> emps) {
 return emps.FindAll(e => e.IsManager);
}

にならないかな。
577デフォルトの名無しさん:2007/12/11(火) 16:26:06
C#なら普通は

public Employee[] Managers(IEnumerable<Employee> emps) {
 return emps.Where(e => e.IsManager).ToArray();
}
こうか
public Employee[] Managers(Employee[] emps) {
 return emps.Where(e => e.IsManager).ToArray();
}
こうだと思うが
というかオブジェクト指向的には

List<Employee> list;

public Employee[] Managers() {
 return list.Where(e => e.IsManager).ToArray();
}

こうだと思うが
578デフォルトの名無しさん:2007/12/11(火) 16:29:02
>>576
戻り値の型が見ただけでわかんないだろ
最悪じゃないか
579デフォルトの名無しさん:2007/12/11(火) 16:32:58
>>577
確かに。
580デフォルトの名無しさん:2007/12/11(火) 16:41:24
いやSQL使わない職業プログラマなんか皆無だろ
581デフォルトの名無しさん:2007/12/11(火) 16:48:34
SQLになれた人間がいくらいようと
LINQ構文が拡張メソッドに慣れるまでの経過的措置なことには違いない
582デフォルトの名無しさん:2007/12/11(火) 16:49:59
世間知らずだな
583デフォルトの名無しさん:2007/12/11(火) 16:50:18
経過的措置を言語仕様に組み込むなんて美しくありませんこと
584デフォルトの名無しさん:2007/12/11(火) 16:51:18
匿名メソッドは設計チームも認めた経過的措置だったけどな
585デフォルトの名無しさん:2007/12/11(火) 16:51:20
匿名メソッドを見ろ
使い物にならん
ラムダ式があればこんなものはいらないことはMSも認めてるし
586デフォルトの名無しさん:2007/12/11(火) 17:04:16
なんでラムダ式を見越して匿名デリゲートを(int x)=>{ return x; }の形式にしなかったんだろう
かなり早くからC#3.0の仕様出てたのに
ジェネリック制約のwhereなんかは明らかに意識してるっぽいのに
587デフォルトの名無しさん:2007/12/11(火) 17:21:42
あてずっぽうなんだが、ステートメント本体を持つラムダ式を
ラムダ式とするか匿名デリゲートのままにするか意見が分かれてたのではなかろうか。
588デフォルトの名無しさん:2007/12/11(火) 17:23:29
あれ?ラムダ式だととりあえず複数行のセンテンスはかけなかったよね?
それが匿名メソッドの書き方である必要はまったくないんだが。
589デフォルトの名無しさん:2007/12/11(火) 17:28:27
{ }で囲んでreturnを省略しなければ複数ステートメントも可
590デフォルトの名無しさん:2007/12/11(火) 17:31:10
>>589
このタイプはExpressionと互換が無い。
つまりDLinqでは使えない。
591デフォルトの名無しさん:2007/12/11(火) 17:44:34
>>589
さんくすこ。前かけたような気がして匿名メソッド書かなくていいやと思ってたら、その後別のところでエラー出されてひとつの式しかかけないのかと悩んでた。
>>590
そりゃそういうものだからしょうがない。でもExpressionじゃなくてSentence的なものでも良いからセマンティクスをいじれるものがほしかったなあ( ´ー`)フゥー...
592デフォルトの名無しさん:2007/12/11(火) 17:45:01
既出だと思うけど、
匿名メソッド不要のソースはこれね
面白いから読んどくべき
http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/default.aspx?loc=jp
593デフォルトの名無しさん:2007/12/11(火) 18:02:00
あれ?DLINQのばあいはILレベルでSQLが構築されてるの?それとも実行時にコンパイルされたExpressionに基づくILにしたがってSQLが生成されて実行される?
594デフォルトの名無しさん:2007/12/11(火) 18:15:39
>>593
var query = from x in context select x; // この時点でクエリをビルド
foreach (var x in query) // この時点でDBサーバにクエリを送信
 // some action

という感じっぽい。
コンパイル時には Expression Tree になってる。
SQL文は実行時に生成。
パラメータだけが違うほとんど同じ SQL 文を何度も使いたい場合には、
CompiledQuery ってものもある。
595デフォルトの名無しさん:2007/12/11(火) 18:22:50
拡張メソッドのthisの後ろの型名って恐ろしく冗長じゃない?
何で省略できるようにしないんだろう。この言語設計者は馬鹿なのかな。
596デフォルトの名無しさん:2007/12/11(火) 18:27:27
省略して型が何かわからなくなるよりはいい
IEnumerable<T>が冗長だとも思わない
597デフォルトの名無しさん:2007/12/11(火) 18:31:00
>>594 ラジャ、
つーとデータに関係ない文をラムダ式中に複数書いた場合はむしされるのか?今やってるの落ち着いたら試してみるノシ
598デフォルトの名無しさん:2007/12/11(火) 18:34:21
>>595
省略したら推論すらできないだろ
599デフォルトの名無しさん:2007/12/11(火) 18:43:24
>>595
ahosugi
600デフォルトの名無しさん:2007/12/11(火) 18:50:13
using System;
using System.Linq.Expressions;
class Program {
 static void Main() {
  Expression<Func<int,int,int>> e = (x, y) => x + y * 1000;
  Console.WriteLine(e);
  var f = e.Compile();
  Console.WriteLine(f(3,4));
 }
}
(x, y) => (x + (y * 1000))
4003

ステートメント本体があると即コンパイルエラー
外部の関数などを呼んでたら、SQLを組み立てるときに実行時例外のはず。
601デフォルトの名無しさん:2007/12/11(火) 18:57:05
ラムダからExpressionが生成されるのはコンパイラーのおかげ?
602デフォルトの名無しさん:2007/12/12(水) 07:00:47
コンパイラーのおかげです。>>600を自前で組み立てるとこうなった。
static void Main() {
  //Expression<Func<int,int,int>> e = (x, y) => x + y * 1000;
  var ex_x = Expression.Parameter(typeof(int), "x");
  var ex_y = Expression.Parameter(typeof(int), "y");
  var ex_1000 = Expression.Constant(1000, typeof(int));
  var ex_r1 = Expression.Multiply(ex_y, ex_1000);
  var ex_r2 = Expression.Add(ex_x, ex_r1);
  Expression<Func<int,int,int>> e =
    Expression.Lambda<Func<int,int,int>>(ex_r2, new ParameterExpression[] { ex_x, ex_y });
  Console.WriteLine(e);
  var f = e.Compile();
  Console.WriteLine(f(3,4));
}
603デフォルトの名無しさん:2007/12/12(水) 12:37:34
>>601
それが、ラムダ式の「単なる匿名デリゲートの簡素化」ではない部分。

静的な命令型言語で関数型言語のクオート的なものを実現しようという要求の解答。
同じ構文で、
デリゲートに代入すれば匿名デリゲートと同じ扱い
Expression 型に代入すれば Expression Tree にコンパイルされる。
604デフォルトの名無しさん:2007/12/12(水) 15:34:01
てかvarってナニよ
605デフォルトの名無しさん:2007/12/12(水) 16:04:46
イナイイナイ var
606デフォルトの名無しさん:2007/12/12(水) 19:29:24
不覚にもワロタ
607デフォルトの名無しさん:2007/12/12(水) 19:41:13
ベェー
608デフォルトの名無しさん:2007/12/12(水) 20:26:00
ヴェル
609デフォルトの名無しさん:2007/12/12(水) 21:03:12
ヴァー
610デフォルトの名無しさん:2007/12/12(水) 21:09:28
そんなネタ今時小学生でも笑わん。
余程楽しいことがない人生を生きてるのかね
611デフォルトの名無しさん:2007/12/12(水) 21:12:12
妖怪人間♪
612デフォルトの名無しさん:2007/12/12(水) 21:28:16
>>610
よう、中学生
613デフォルトの名無しさん:2007/12/12(水) 22:13:21
暇つぶし程度のプチネタでも
この板だとレス飛び越してワロタとか言ってくれるよな。
この板って笑いの沸点低いのかね。
あ、もちろん良い意味で。
614デフォルトの名無しさん:2007/12/12(水) 22:22:54
良い意味で>>613は友達いないだろ。
615デフォルトの名無しさん:2007/12/12(水) 22:24:13
なぜC#の話をしない
616デフォルトの名無しさん:2007/12/12(水) 23:56:04
>>615
お前、周りから冷たい人って言われるだろ
617デフォルトの名無しさん:2007/12/13(木) 00:35:06
>>616
お前、明日、死ぬ
618デフォルトの名無しさん:2007/12/13(木) 00:58:45
で、C#3.0本の日本語版は、いつ出るのよ。
619デフォルトの名無しさん:2007/12/13(木) 04:46:09
C丼本はもう少しで出ると思います。
620デフォルトの名無しさん:2007/12/13(木) 09:47:11
ちとアホなこと聞いていい?
.NET Framework 2.0 から WebClient に Download*Async ってメソッドが追加されてると思うんだけど
この非同期操作の DownloadProgressChanged ってどんな条件で発生するか分かる人いるかな?
1.0 で同じようなもの作らなきゃいけなくなって気になったんだ。

ProgressChangedEventArgs.ProgressPercentage が INT32 っぽいから、単純に ProgressPercentage が変わったら、とかかな?
まさかバッファに読み込むごとに発生するとかじゃないよな…
621デフォルトの名無しさん:2007/12/13(木) 09:55:52
Enterprise Libraryを使ってる方います?
今、EL3.1のLoggingを使っているんですが、ログローテーションしないのです。
ちゃんと、Rolling設定しているのですが。

日単位でローテーションして欲しいのですが、
これって、アプリケーションが深夜0時に起動しっぱなしだと、
ローテーションしないのでしょうか?
書きっぱなしでは無いのですが。
622621:2007/12/13(木) 17:29:17
ごめんなさい、ローテーション間隔の指定はIntervalですから、Dayを指定しても、
午前0時でローテーションされるわけではなく、24時間でローテーションでした・・・。
623デフォルトの名無しさん:2007/12/13(木) 21:01:05
Enterprise Libraryはなぜか使う気がしない。
なぜだろう…
624デフォルトの名無しさん:2007/12/13(木) 22:24:07
>>620
sscli 見れば詳しく分かるんじゃないかな
625デフォルトの名無しさん:2007/12/13(木) 23:08:22
>>620
内部バッファから出力先に書き写すごと、のような気がする。
626デフォルトの名無しさん:2007/12/14(金) 01:02:36
codezineの記事で
C#使って.NETのフォームの自動テストを
自作しようみたいな記事あったはずなんだが

消えてる

誰か知らね?

invokeとか使ってhackするイメージだったはずなんだが
627デフォルトの名無しさん:2007/12/14(金) 01:03:41
リフレクションのやり方知ってりゃ自動テストなんて簡単に自作できる
628sage:2007/12/14(金) 01:09:17
>>627 
おまいUI野テストほんとにしたことあるの?
629デフォルトの名無しさん:2007/12/14(金) 01:16:23
UIのテストは手動でやるなあ
630デフォルトの名無しさん:2007/12/14(金) 01:20:42
>>626
CodeZineじゃなくて別のところというオチはないの?

例えばMSDN Magazineのこれとか。Invokeとか全然使ってないけど。
ttp://msdn.microsoft.com/msdnmag/issues/07/03/Bugslayer/default.aspx?loc=jp
631デフォルトの名無しさん:2007/12/14(金) 01:23:53
632デフォルトの名無しさん:2007/12/14(金) 11:12:19
Debug.WriteLineとかで開発ソフトの出力のとこに表示されるのを
アプリの中で表示するにはどうすればいいの?
633デフォルトの名無しさん:2007/12/14(金) 11:36:02
Debug.Listeners.Add(自分で実装したTraceListenerの派生クラスのオブジェクト);
TextBoxに出力するとか自由自在
634デフォルトの名無しさん:2007/12/14(金) 13:14:19
全部オーバーライドするのはちょっと面倒ような
635デフォルトの名無しさん:2007/12/14(金) 13:53:34
は?
636デフォルトの名無しさん:2007/12/14(金) 18:24:03
標準でいろいろ入ってるだろ。
あんまり使えないけど…
637620:2007/12/14(金) 19:42:12
>>624-625
thx
中身見てみたらどうもそれっぽかった
638デフォルトの名無しさん:2007/12/15(土) 00:08:53
Windowsサービスでログオン時、ログオフ時に処理させたいのですが、
SystemEvents.SessionSwitch が上手く働かない・・・。orz

public class Program : ServiceBase {
public static void Main(string[] args) {
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new LogonEventWatcher.Program() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
Console.ReadLine();
}
protected override void OnStart(string[] args) {
base.OnStart(args);
SensNotification.writeLogFile("Service started !");
SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
}
static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) {
SensNotification.writeLogFile("The session is switched. Reason: " + e.Reason);
}
protected override void OnStop() {
base.OnStop();
}
}

なんか対応出来ませんかね?
639デフォルトの名無しさん:2007/12/15(土) 23:01:15
今日久々にVBA触った…

少しだけコードを追加して実行。
構文エラー
少し直して実行
構文エラー

そのあと何回直しても構文エラー

よくみてみるとステートメントの後ろに ; をつけていましたorz
640デフォルトの名無しさん:2007/12/15(土) 23:04:49
あるある
641デフォルトの名無しさん:2007/12/16(日) 08:02:53
そんでVBやり込み過ぎて、C#に戻ってきたら ; を忘れるようになると言う落ち
642デフォルトの名無しさん:2007/12/16(日) 09:44:53
そんなことでは、PLSQLやTSQLとC#の並行開発なんて無理だろうなw
643デフォルトの名無しさん:2007/12/16(日) 09:56:09
lispぐらいになれば文法的には混同しようもないのだが
今度は思考レベルで
644デフォルトの名無しさん:2007/12/16(日) 11:44:59
3回に1回はDOS窓でlsと打ってしまう俺が来ました
645デフォルトの名無しさん:2007/12/16(日) 11:52:11
cygwinのbinにpathを切れば無問題。
646デフォルトの名無しさん:2007/12/16(日) 12:00:11
cygwin も入れてると、3回に1回どころではなく ls と打ってしまう。
人の PC 使うときに結構困る。

PowerShell だと Get-ChildItem に dir と ls の両方でエイリアス付いてたり。
647デフォルトの名無しさん:2007/12/16(日) 13:30:52
とってもどうでもいいけど PowerShell は sl はやめてまじで
648デフォルトの名無しさん:2007/12/16(日) 14:27:58
set-location か。
まあ、打ち間違うなって話だけど。

どんどん話し脱線するけど、
Unix のジョークソフトで sl ってタイプミスすると、
SL 機関車の AA が画面上を走る奴があったよね。
タイプミスするたびに脱力物。
649デフォルトの名無しさん:2007/12/16(日) 14:53:29
あめりかんじょーく
650デフォルトの名無しさん:2007/12/16(日) 15:00:37
C++/CLI触った後にC#やると^付けちゃったりnew忘れたりgcnewと書いちゃったり
似てるだけにVBより厄介
Javaほど似てるとかえって混乱しないんだけど
651デフォルトの名無しさん:2007/12/16(日) 15:14:27
>>649
sl は和製ソフト。
652デフォルトの名無しさん:2007/12/16(日) 15:26:06
C#は確保されたスタックの容量を調べることができますか?
数万個の構造体をスタックに置きたいのですが、容量が足りるか調べたくて
653デフォルトの名無しさん:2007/12/16(日) 15:36:54
使用は推奨されてないがThreadコンストラクタでスタックサイズ指定できるな
メインスレッドじゃ無理だが

ちなみに既定では1MBytesらしい
654デフォルトの名無しさん:2007/12/16(日) 15:37:28
>>653
ありがとうございました。
655デフォルトの名無しさん:2007/12/16(日) 15:42:56
でも普通に配列使って必要に応じてfixedする方がいいと思うけど
656デフォルトの名無しさん:2007/12/17(月) 02:28:24
あるクラスAが保持しているコントロールを
Aが保持している2つのフォーム両方に表示することはできないでしょうか?
フォームのControlsに追加してもどうやら最後に追加したフォームにしか表示されないみたいです。
657デフォルトの名無しさん:2007/12/17(月) 09:22:55
無茶ゆうな
658デフォルトの名無しさん:2007/12/17(月) 11:39:18
Control→ウィンドウハンドルを持つ
って知ってたらそんなこと考えないよ
659デフォルトの名無しさん:2007/12/17(月) 20:12:03
ウィンドウサイズ変えるとリストとかツリービューとかが一緒におっきくなってくれねえ、どうしたもんか
660デフォルトの名無しさん:2007/12/17(月) 20:19:40
WPFへどうぞ
661デフォルトの名無しさん:2007/12/17(月) 21:35:15
とってもどうでもいい上に亀だけど
>>647
Remove-Item Alias:ls
662デフォルトの名無しさん:2007/12/17(月) 22:11:21
あ、素で間違えてら、まあいいか
663デフォルトの名無しさん:2007/12/18(火) 14:28:57
Visual C# 2008 Express Edition日本語版来たな
664デフォルトの名無しさん:2007/12/18(火) 14:38:48
for (int i = 0; i < parts.Length; i++)
{
textBox1.Text = parts[i] + "\r\n";
}

これでpartsを全部表示できないどころか何もtextBox1に表示されないんですがなんででしょうか?

partsはstring[]型で、コンパイル時にエラーなんかはないです
665デフォルトの名無しさん:2007/12/18(火) 14:40:51
>>664
最後の行に空白文字しか入ってなかったとか、空文字列だったとか。
666デフォルトの名無しさん:2007/12/18(火) 14:42:15
textBox1.Text = だから、追記になってないけどいいのか?
667デフォルトの名無しさん:2007/12/18(火) 14:49:30
AppendText把握しました

コンソールの要領でやってましたごめんなさい
668デフォルトの名無しさん:2007/12/18(火) 17:27:23
C#での正規表現なんですがどうもうまくいきません。


Match m;
Regex reg = new Regex("あいうえお");
m = reg.Match(str);
if (m.Success) textBox1.Text = "hit";

ここまでしてもhitが表示されない
あいうえおを[]や()でかこっても同じだしコンパイルエラーはないしstrを表示させればあいうえおは含まれているしなんでなんでしょうかorz
669デフォルトの名無しさん:2007/12/18(火) 17:33:33
それコピペしてstr追加したけど、ヒットしたけどな
670デフォルトの名無しさん:2007/12/18(火) 17:39:22
>>668

よくわからんけど、まずはおちついてブレークポイント設定して、
一行ずつ実行してみれば?

実際のプログラムでも正規表現は本当に"あいうえお"なの?
単なる例で実際に正規表現で複雑なことを引っかけようとしているのなら
正規表現が間違っている可能性が一番高いと思うけど、正規表現をテストできる
サンプルプログラムはネット上で沢山転がっているので、それ使って、正規表現が
正しいかどうかまず確認してみては??
671デフォルトの名無しさん:2007/12/18(火) 17:57:39
別スレッドで実行してるとか
672デフォルトの名無しさん:2007/12/18(火) 19:35:49
VC# 2008 Express使ってみた方はいらっしゃるでしょうか?

新しいプロジェクト→フォームアプリケーション→デバッグなしで開始
とやっても何にも出ないのですが。
まともに使えないのは私だけでしょうか?
673デフォルトの名無しさん:2007/12/18(火) 19:42:28
普通に動くんだが
どうでもいいけど普通真っ先にWPF触ってみたくない?
674デフォルトの名無しさん:2007/12/18(火) 19:52:11
WPF重すぎwww
675672:2007/12/18(火) 19:57:00
>>673
>普通に動くんだが
そうですか。
こちらの使い方が悪いと判断してがんばってみます。

>どうでもいいけど普通真っ先にWPF触ってみたくない?
とりあえず動くかなとやってみたら、動かなかったという感じです。

それに、「デバッグ開始」ってやると、
プログラム '[484] WindowsFormsApplication1.vshost.exe: マネージ' はコード -1073741819 (0xc0000005) で終了しました。
と出て止まるし、
「新しいプロジェクト→WPFアプリケーション」ってやると、
Microsoft Visual C# でエラーが発生したため終了します。
と出てIDE自体落ちるし、何が悪いんだか・・・
676デフォルトの名無しさん:2007/12/18(火) 20:37:08
>>675
OS は何だ
677672:2007/12/18(火) 20:54:36
>>676
Windows XP Service Pack 2です。
678デフォルトの名無しさん:2007/12/19(水) 00:23:21
WPFでTabControl追加して
タブ追加してそのタブの中にボタン追加しようとしてもデザイナだけだと追加できなくない?
XAMLいじればタブ内に配置できるけど。。。。
679デフォルトの名無しさん:2007/12/19(水) 00:35:28
多重起動した際に元々起動していたアプリケーションを最前面に持ってきて表示し、
後に起動したアプリケーションは終了するソフトを作っております。

GetProcessesByName等により、元々起動していたアプリケーションのプロセスは取得可能なのですが
Form.Hide()によりFormが隠してある場合、MainWindowHandleが0のため最前面に持ってきて表示という動作が不可能な状態です。

なんとかしてHide状態の元々起動していたアプリケーションのハンドルを知ることはできないでしょうか?
もしくは代用策でもありましたら教えていただければ幸いです…
680デフォルトの名無しさん:2007/12/19(水) 00:35:57
しつもんです。

Graphics.MeasureStringだと余裕もって測られてしまうので、
Graphics.MeasureCharacterRangesでカッキリ計測して、
きっちし文字列を描画したかったんです。

ですが、Graphics.MeasureCharacterRangesからもってきたRectangleに
Graphics.DrawStringすると、今度も微妙にはみ出して文字ごとクリップされたり
ellipsisの点々がでたりしてしまいます。

数ピクセル余裕をもたせればなんとかなりますが
すべての文字列に対応できるのか分からず気持ち悪いです。

なんとかカッキリきっちし描画する方法はないんでしょうか。
681デフォルトの名無しさん:2007/12/19(水) 00:36:50
>>680
TextRendererは使ってみた?
682デフォルトの名無しさん:2007/12/19(水) 00:40:52
>>679
後から起動したのは名前付きイベントとか使ってもともと起動していたアプリに通知だけして終了。
元々起動していた方が自分をアクティブにする。
683デフォルトの名無しさん:2007/12/19(水) 00:55:09
>>681
TextRendererだとアンチエイリアスがひどいので……

ってStringFormat.GenericTypographicをつっこめばいけるみたいでした。
とりあえずこいつを相手にしてみます
すんません。。。。。
684デフォルトの名無しさん:2007/12/19(水) 08:51:58
既出かつ基本的な話ならすまんそ
デバッグで最適化入れてないにもかかわらずデバッグ時にこのメソッドは最適化されてるため評価できませんうんたら出るのはなんでなんでしょう?
匿名メソッドとかのからみ?
685デフォルトの名無しさん:2007/12/19(水) 12:55:58
>>684
obj削除して再実行してみて
686デフォルトの名無しさん:2007/12/19(水) 14:28:56
C#で質問なんですけど、
現在在庫管理のソフトを作ってます。
それで、在庫の変数をclass Declarationで宣言して
frmMainとライフタイムを同じとするように、public class Form1の内側(全てのメソッドの外側)
にpublic Declaration dec = new Declaration();とインスタンスを作成して
frmMainでボタンイベントが起こったときに、現在の在庫数をCSVで出力する用のクラス
FileInOutのInputCsv(Decralation dec) でCSVから取り込んだ値をDeclarationの変数郡に代入す際に
どうしても参照エラーになってしまいます。デバッガで確認すると
dec.sample と参照した変数は0となっており、参照できているはずだと思うんですが・・・
なぜでしょうか。どなたかご教授いただけませんか

マルチすみません。
687デフォルトの名無しさん:2007/12/19(水) 15:22:42
これはひどい
688デフォルトの名無しさん:2007/12/19(水) 16:01:48
>>685
家帰ったら試してみるノシ
AllReBuildやると同じ効果ある?
689デフォルトの名無しさん:2007/12/19(水) 16:07:27
下のコードが通ることにちょっとびっくりΣ(・∀・;)
static void Hoge(Delegate1Param<bool,Form> deleg) { }
static bool Hoge2(Control l) { return false; }
static void HogeHoge() {
Hoge(Hoge2);
}
690デフォルトの名無しさん:2007/12/19(水) 17:10:48
びっくりする箇所を教えてくれ。
691デフォルトの名無しさん:2007/12/19(水) 17:21:41
型パラメータの違うdelegateを渡してもコンパイルが通ること。
コンパイラ賢いなぁと
692デフォルトの名無しさん:2007/12/19(水) 17:27:29
キーワード:共変性・反変性
693デフォルトの名無しさん:2007/12/19(水) 18:16:55
リストボックスなのかしらんが複数列できねえ・・・janeは一体どうやってんだ

ボタンとリストで代用する作業疲れた
694デフォルトの名無しさん:2007/12/19(水) 18:17:32
リストヴューだろ
695デフォルトの名無しさん:2007/12/19(水) 18:31:11
janeはDelphiだろw
696デフォルトの名無しさん:2007/12/19(水) 18:39:40
共変・反変の概念があるなら

class A { }
class B : A { }

void F(){
  Action<A> funcA = i => { };
  Action<B> funcB = i => { };
  funcA = funcB; // エラー
}

このコードが通ってほしいよ。
697デフォルトの名無しさん:2007/12/19(水) 18:59:26
それってIEnumerableオブジェクトがICloneableオブジェクトとして扱えるようなもんだろ
698デフォルトの名無しさん:2007/12/19(水) 19:32:24
>>695
文盲乙
699デフォルトの名無しさん:2007/12/19(水) 19:51:07
さっそく教えてもらったリストビューだけど解説してるとこ少なくて敵わんです

一体どうやってデータを追加すればいいんだろう
listView1.BeginUpdate();
items = new ListViewItem[1];
items[t].SubItems.Add(title);
items[t].SubItems.Add(name);
items[t].SubItems.Add(date);
items[t].SubItems.Add(point);
listView1.EndUpdate();
こんなんしてみたりこまこま変えて試しまくってるけど見当つかないですorz
誰か詳しく載っているページとか知らないでしょうか
700デフォルトの名無しさん:2007/12/19(水) 19:57:39
>>699
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.listview(VS.80).aspx
結局一番頼りになるのはMSDN
701デフォルトの名無しさん:2007/12/19(水) 20:08:49
>>699
ふらっと行け
702デフォルトの名無しさん:2007/12/19(水) 20:15:57
>>700
ついにMSDN、把握しました
703デフォルトの名無しさん:2007/12/19(水) 20:44:04
何か困ったときは真っ先にMSDN引けよ。
Google先生に尋ねたり、2chで訊いたりするのは最後の手段。
704デフォルトの名無しさん:2007/12/19(水) 20:55:57
問題はMSDNを理解出来るか否か、さらにはあれを読み切るか否か
705デフォルトの名無しさん:2007/12/19(水) 20:56:33
ググってMSDN探すのはガチ
706デフォルトの名無しさん:2007/12/20(木) 01:43:34
>>697
IEnumerable<int>がIEnumerable<long>として扱えるようなもんだ

なんでICloneableになっちまうんだ?
707デフォルトの名無しさん:2007/12/20(木) 01:47:23
>>696
ILレベルではサポートしてるからそういう言語作ればいいと思う。
708デフォルトの名無しさん:2007/12/20(木) 01:58:59
>>692
正直今日はじめてこの言葉知った。
まぁ中でやってること、いいたいことはわかるが、その日本語見て意味がわかるやつはおらんだろ。
原語がなんていう単語か知らんが、なんか間違ってる。
709デフォルトの名無しさん:2007/12/20(木) 11:09:42
>>708
原語の直訳。
covariant, contravariant。

圏(けん、category)論っていう数学の分野の用語。
学者肌の人が言語を作るとこういう難しい用語使っちゃう。
710デフォルトの名無しさん:2007/12/20(木) 17:17:45
aspectdngでウィービングすると文字列の終端に制御文字っぽいなにかが混じってしまいます。
aspectdngのバージョンは0.9.0.0です。
なにかご存知の方よろしくお願いします。
711デフォルトの名無しさん:2007/12/20(木) 17:59:10
おかしくなる場合があるようだ
ってことは知ってるがそれ以上のことは知らない
712710:2007/12/20(木) 18:19:20
ttp://d.hatena.ne.jp/fits/20070718/1184731197
↑で「?」がついてる理由は不明っていう
この?がとれないと使い物にならないっす・・
713デフォルトの名無しさん:2007/12/20(木) 20:55:37
>>696
それが必要になるのは設計が間違ってるから
C#のジェネリックは正しく設計しないとコンパイルすら通らない
714デフォルトの名無しさん:2007/12/20(木) 21:00:17
EventHandler handler = new MouseEventHandler(Hoge);
これが通ってほしいと思うことはあるな
EventHandler<T>に統一しとけばジェネリックメソッドとか駆使して何とかなるんだけども
715デフォルトの名無しさん:2007/12/20(木) 21:55:12
それが通ったらおかしいだろどう考えても。
716デフォルトの名無しさん:2007/12/20(木) 21:56:36
MouseEventArgs 以外が渡されたらどうするんだよ、って意味な。
717デフォルトの名無しさん:2007/12/20(木) 22:44:13
EventHandler eventHandler = (object sender, EventArgs e) => { };
MouseEventHandler handler = new MouseEventHandler(eventHandler);

こうはできるな
718710:2007/12/21(金) 22:35:11
ひとり引っ張ってしまってかたじけないが
cecilのどこかで文字列末尾にU+FFFDがついてしまってる模様。
強引に末尾ちょんぎっても不正なアセンブリっていわれちゃうし・・

みなさんはAOPのライブラリってなに使ってるんでしょうか?
719デフォルトの名無しさん:2007/12/21(金) 23:16:59
使わない。
720デフォルトの名無しさん:2007/12/22(土) 10:40:31
721デフォルトの名無しさん:2007/12/22(土) 20:03:23
フラットが聞ける状態じゃないけどこっちにも書き込むのはまずいよなぁ
722デフォルトの名無しさん:2007/12/22(土) 21:18:03
かまへんで嬢ちゃん
723デフォルトの名無しさん:2007/12/22(土) 21:21:53
リストビューに関してなのですが、選択されたリストビューの項目を取得する方法がわかりません

ColumnHeader A = new ColumnHeader();
ColumnHeader B = new ColumnHeader();
ColumnHeader C = new ColumnHeader();
...
こんな具合でA列B列C列・・・とあり、ここにデータが追加された状態で、
ある行をクリックするとその行の特定列の情報を得たいです。

private void listView1_SelectedIndexChanged(object sender, EventArgs e){}
こいつの中でうまくやればいいのはわかるのですがいまいち他コントロールとは勝手が違う為よくわからないでいます

|A|B|C|
|.1|.2|.3|
|.4|.5|.6|
|.7|.8|.9|
...
こんな具合で2行目をクリックすると4,5,6部分が選択され、例えばその中のB列にある5を取得するといったかんじです

それではよろしくお願いします

こいつです(http://pc11.2ch.net/test/read.cgi/tech/1197802312/293
724デフォルトの名無しさん:2007/12/22(土) 21:43:44
まるちいくない
725デフォルトの名無しさん:2007/12/22(土) 21:47:24
何が分からんのかが分からん
SelectedIndexを知らんだけか?
726デフォルトの名無しさん:2007/12/22(土) 21:53:34
リストビューでselectedindexあったっけ
727723:2007/12/22(土) 21:55:56
選択したリストビュー内の行の情報を得たいんですが、うまくいかなく
選択した行の特定列を得たい、だけかけばよかったかなorz

リストボックスならSelectedIndexもありますし、リストビューにも似たものがあったのですが同じようには使えなかったのでおそらくハズレです
728デフォルトの名無しさん:2007/12/22(土) 22:01:45
>>726
そういえば無かったなw

SelectedIndicesなりSelectedItemsなりから取れるよ
ListViewは複数選択可能なのが多いからか取得できるのは選択アイテムのコレクションのみ
729デフォルトの名無しさん:2007/12/22(土) 22:03:24
>>727
SelectedItemsじゃいかんの?
730デフォルトの名無しさん:2007/12/22(土) 22:13:50
>>728-729
どちらも試したのですが、その二つそれぞれの下にある関数でそれらしいものがなかったため違うのかと思っていました
いろいろとToStringで表示させてみたのですがその二つを表示させた時もその行の情報がでてくれなくorz

何か勘違いしてるんでしょうか
731デフォルトの名無しさん:2007/12/22(土) 22:22:24
ちょっとはヘルプの使用例を見ろという話ですよ
732デフォルトの名無しさん:2007/12/22(土) 22:23:18
「下にある関数」って何だろう
733デフォルトの名無しさん:2007/12/22(土) 22:29:52
インテリセンスに出てくる候補だ絽
734デフォルトの名無しさん:2007/12/22(土) 22:34:22
ListView.SelectedListViewItemCollection items =
this.ListView1.SelectedItems;

これくらいしかヘルプからはわからなかったけどこれも無理だったorz
素直に今回は諦めておきます
735デフォルトの名無しさん:2007/12/22(土) 22:51:45
MSDNに使用例載ってるだろ…
まずはコピペしてみろよ
736デフォルトの名無しさん:2007/12/22(土) 22:59:23
MSDNからのコピペは一通りやっています、すぐ上のもそれです

おそらく知識不足な為調べ方も悪いんだと思われます
737デフォルトの名無しさん:2007/12/22(土) 23:01:23
>>720
.NET1.x時代で開発終わってるものばかりで、AspectDNG以外はLoomくらいなもんで
Loomは使ってみたけど元のコードを変更しないとWeavingできないみたいだし使いづらい。
消去法的にDNGなんだけどU+FFFD問題が・・(DNGっていうよりcecilの問題っぽいんだけども)
た す け て・・・
738デフォルトの名無しさん:2007/12/22(土) 23:08:00
AOPイラネ宣言もあったしな
739デフォルトの名無しさん:2007/12/22(土) 23:11:22
へじたんはAOPがお嫌い
740デフォルトの名無しさん:2007/12/23(日) 00:06:47
>>734
this.listView1.SelectedItems[0].SubItems[0].Text
SubItems[0]の数値を適当に変えてみろ。

ヘルプ見ろとか言ってるヒマあるなら答え教えてやれよ
741710:2007/12/23(日) 23:22:00
レスくれた方もいたので一応報告。
PostSharpを試してみてなかなかよさげだったんだけど、PInvokeメソッドがうまくいかなくてこれまた断念。
結局AspectDNGでCecilを最新版にして、そのInjectメソッドのシグネチャが変わってたので呼び出し部分を修正。
目的はPInvokeしてるメソッドたちのプロファイリングだったんだけどこれでなんとかうまくいきました。
742デフォルトの名無しさん:2007/12/25(火) 23:28:18
フライドチキン
743デフォルトの名無しさん:2007/12/26(水) 03:33:50
PInvoke初心者です。

C/Migemo(1.2)の超簡単なラッパーを作ってみたんですが、
こんなんでいいんでしょうか。
批評をお願いします。

http://gamdev.org/up/img/10781.zip
744デフォルトの名無しさん:2007/12/26(水) 08:54:21
C/MigemoにもとからC#のラッパついてるじゃん
745デフォルトの名無しさん:2007/12/26(水) 11:35:34
まじで?
746デフォルトの名無しさん:2007/12/26(水) 13:16:29
>>744
どこ?欲しい。
747デフォルトの名無しさん:2007/12/26(水) 14:15:13
Migemo.cs
748デフォルトの名無しさん:2007/12/26(水) 14:55:28
ほんまやtoolsフォルダに入っとった。
だけどこれdllの場所決め打ちだね
749デフォルトの名無しさん:2007/12/26(水) 14:59:18
置換すればいいだろ
750デフォルトの名無しさん:2007/12/26(水) 15:04:17
この人(ry
751デフォルトの名無しさん:2007/12/26(水) 15:35:48
こんなちょっとしたアンマネージドDLLの呼び出しに、
P/Invoke使わないなんて車輪の再発明もいいところだろ。
752デフォルトの名無しさん:2007/12/26(水) 15:42:40
誰がそんなこと言った?
753デフォルトの名無しさん:2007/12/26(水) 15:46:47
>>752
>>743の中身
754749:2007/12/26(水) 15:46:49
>>743見たら理解した
>>749は忘れてくれ
755デフォルトの名無しさん:2007/12/26(水) 15:55:03
>>743
ライブラリのロードに失敗したときに適切な例外を投げたりしないのは実用上問題があるよね。
普通に[DllImport]使ったほうがいいと俺も思うよ。
756デフォルトの名無しさん:2007/12/26(水) 19:52:43
関数ポインタを delegate に代入するとき、
(HogeDelegate)Marshal.GetDelegateForFunctionPointer(p, typeof(HogeDelegate));
みたいに2回同じ型を指定するのがわずらわしかったので、

// T は delegate、p は GetProcAddress で取得する関数ポインタ
static T GetDelegate<T>(IntPtr p)
{
Delegate d=Marshal.GetDelegateForFunctionPointer(p, typeof(T));
return (T)d;
}

みたいにしてみたが、キャストするところで
「型 'System.Delegate' を型 'T' に変換できません。」
とコンパイルエラーになる。
うまくやる方法は何かない?
757デフォルトの名無しさん:2007/12/26(水) 19:56:50
Delegate型じゃなくてObject型で受けたら
758デフォルトの名無しさん:2007/12/26(水) 20:15:35
>>757
お、うまくいった。ありがとう。
しかし GetDelegateForFunctionPointer の戻り値って Delegate だし、
Generic使わなければ Delegateで受けてもキャストできるのに。
謎だ。
759デフォルトの名無しさん:2007/12/26(水) 20:30:56
where T : Delegate とすればいい
といいたいところなんだけどC#ではコンパイル通らない
760デフォルトの名無しさん:2007/12/27(木) 00:15:37
フォームの最大化ボタンを押されたときに処理をするにはどうすればいいの?
サイズ変更する前に。と言うか揉み消ししたい場合。
761デフォルトの名無しさん:2007/12/27(木) 00:19:44
多分WndProc乗っ取らないと無理
762デフォルトの名無しさん:2007/12/27(木) 00:26:16
WM_SYSCOMMAND
SC_MAXIMIZE
763デフォルトの名無しさん:2007/12/27(木) 00:54:27
protected override void WndProc( ref Message m )
{
if ( ( int )m.Msg == 0x0112 ) //WM_SYSCOMMAND
{
if ( (int)m.WParam == 0xF030 ) //SC_MAXIMIZE
{
MessageBox.Show( "そうはいくか!" );
return;
}
}
base.WndProc( ref m );
}
764デフォルトの名無しさん:2007/12/27(木) 01:02:12
できました。乙です。
765デフォルトの名無しさん:2007/12/27(木) 01:52:14
if((int)WParam & 0xFFF0) == 0xF030)
でないとタイトルバーダブルクリックがスルーされるぞ
766デフォルトの名無しさん:2007/12/27(木) 08:12:44
そんな「意地悪」が意味をもつ場面って想像できないなあ。。

最大化できないならそれと分かるようにしとけよヴォケ、
あーあーこんな糞ソフト作った奴の顔が見たいよ、と俺なら思っちゃうと思う
767デフォルトの名無しさん:2007/12/27(木) 08:32:17
最大化ボタンを消せばいいんじゃないのか
768デフォルトの名無しさん:2007/12/27(木) 08:33:39
>>760が期待してる回答ってFormのプロパティだけで済むんじゃないか?>エスパー
769デフォルトの名無しさん:2007/12/27(木) 08:43:43
そうなんでそうしない。あえて難しくかんがえてるよ
最大化ボタンをけしてもだめなの
770デフォルトの名無しさん:2007/12/27(木) 09:01:09
最大化でフルスクリーン移行なアプリとかじゃないのどうせ
771デフォルトの名無しさん:2007/12/27(木) 09:45:59
>>770
正解です。
772デフォルトの名無しさん:2007/12/27(木) 09:57:12
>>770
エスパー力精進します
773デフォルトの名無しさん:2007/12/27(木) 10:11:02
そんなら最大化を検出したときにフルスクリーンに移行でいいんじゃないの?
774デフォルトの名無しさん:2007/12/27(木) 10:17:03
ttp://blogs.msdn.com/nickkramer/archive/2006/03/18/554235.aspx
WPFだとその手の処理がちょっと面倒になってるな。
普通にオーバーライドさせてくれればいいのに。
775デフォルトの名無しさん:2007/12/27(木) 11:53:20
C#からC++のDLLを使おうとしてるんだけど
DLLにコールバック関数を渡してそれを維持している必要があって
C#に用意した関数をGetFunctionPointerForDelegateでポインタをDLLに渡してるんだけど
同時にいろんなスレッドが動いててC#のコードでガベージコレクションが動く
ここでDLLを呼び出すとC#で用意したコールバックが移動して見当たらなくなる

そこでDLLの関数を呼び出す前に
ガベージコレクションのWaitForPendingFinalizersで待つ
再度GetFunctionPointerForDelegateで取ったコールバックのポインタをDLLに渡す
DLLの関数を実行(処理してコールバックを呼ぶ)

ってやってて、なんとなく動いてるんだけど
DLL側が処理している瞬間に関数のアドレスが移動する可能性を否定できないのは
どうしようもないのかな?
それともDLLから帰ってくるまで他のC#のスレッドを全部止めれれば
回避できるって考え方でいいのかな?
776デフォルトの名無しさん:2007/12/27(木) 12:03:43
わざわざ関数ポインタ取得する必要ないだろ? 素直にデリゲートの参照そのまま渡しとけ
呼び出しから帰ってくるまで保持するだけでいいならローカル変数で問題ないし
777デフォルトの名無しさん:2007/12/27(木) 12:32:21
なるほど、なんかすでに頭がこんがらがって本末転倒になってたぽいです
ありがとうです
778デフォルトの名無しさん:2007/12/27(木) 13:24:26
OnSysCommand()みたいなMFCに普通にある物がなくてなんだか…
779デフォルトの名無しさん:2007/12/27(木) 14:54:37
>>778
MFC使えばいいんじゃないか?
780デフォルトの名無しさん:2007/12/27(木) 18:30:25
>>773
ここまで当たってるか知らんがフルスクリーンの方法がWindowed=FALSE
でResetならWindowは本当に最大化すると居座ってしまって邪魔なだけ。
アニメもウザいし

781デフォルトの名無しさん:2007/12/27(木) 19:47:14
>>778
むしろAPIに戻ったと思えばOK
782デフォルトの名無しさん:2007/12/27(木) 21:30:45
protected: virtual void WndProc(Message% m) override
{
if(m.Msg == 0x0112)
{
if((m.WParam.ToInt32() & 0xF030) == 0xF030)
{
MessageBox::Show("むりぽ", this->Text, MessageBoxButtons::OK, MessageBoxIcon::Warning);
return;
}
}
Form::WndProc(m);

}
783デフォルトの名無しさん:2007/12/27(木) 21:40:39
変態言語
784デフォルトの名無しさん:2007/12/27(木) 21:49:50
C++/CLIのコードの見た目はインパクトがあって好きw
785デフォルトの名無しさん:2007/12/28(金) 01:53:04
インパクトだけならもっと凄いのがいろいろあるぞ
786デフォルトの名無しさん:2007/12/28(金) 05:48:44
whitespace とか brainfu*k とかなw
787デフォルトの名無しさん:2007/12/28(金) 13:57:15
for (var i = 0;... とか書く奴って、馬鹿丸だしって感じww
788デフォルトの名無しさん:2007/12/28(金) 14:02:22
>>787
forループ奴って(ry
789デフォルトの名無しさん:2007/12/28(金) 14:06:58
forループとか書く奴って(ry だな。
Enumerable.RangeかわいいよEnumerable.Range
790デフォルトの名無しさん:2007/12/28(金) 14:11:46
またえぴすか
791デフォルトの名無しさん:2007/12/28(金) 14:11:56
伝わってねー
ではあらためて。

for (int i = 0;... と書くべきところで
for (var i = 0;... とか書く奴って、馬鹿丸だしって感じww
var擁護してる奴ってガキばっか
チームでvar擁護してる奴は即行クビだなwww
792デフォルトの名無しさん:2007/12/28(金) 14:14:52
>チームでvar擁護してる奴は即行クビだなwww
意味不明。
煽りたいなら、日本語ぐらいちゃんとしろ。
かっこ悪w
793デフォルトの名無しさん:2007/12/28(金) 14:17:12
アホはスルーしましょう。
794デフォルトの名無しさん:2007/12/28(金) 14:26:10
まあ、煽り云々はさておき、「varは、使わなくてもいいなら使わない」というのには同意しとく。
795デフォルトの名無しさん:2007/12/28(金) 14:41:01
明示的に宣言できる型に汎用型を多用するようなプログラミングは
好ましくないだろう。
C++でなぜ、スパゲッティコードが多発したのか原因を良く考えることだ。
796デフォルトの名無しさん:2007/12/28(金) 14:46:26
>>795
templateのせいってこと?
797デフォルトの名無しさん:2007/12/28(金) 14:48:17
forのintはインテリセンスが書いてくれるからわざわざvarに変えたりしないだろ
798デフォルトの名無しさん:2007/12/28(金) 15:42:36
一瞬javascriptスレかと思ったぜ。
799デフォルトの名無しさん:2007/12/28(金) 15:46:15
for (int i = 0; ... なんて書くなら foreach するよ・・・
800デフォルトの名無しさん:2007/12/28(金) 16:25:17
どうぞどうぞ
801デフォルトの名無しさん:2007/12/28(金) 17:58:25
foreachだと配列の中身変えられないじゃん・・・
802デフォルトの名無しさん:2007/12/28(金) 19:30:14
int i = 0;
foreach (object obj in list){
 i++;
}
803デフォルトの名無しさん:2007/12/28(金) 19:57:29
            ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
804デフォルトの名無しさん:2007/12/28(金) 20:34:49
型が明らかな場合長ったらしい型を書くよりvarにした方が可読性は高い
805デフォルトの名無しさん:2007/12/28(金) 21:53:20
現在、mshtml.IHTMLDocument2でwriteメソッドを使い
直接htmlソースを入力しHTMLドキュメントを生成しています。

mshtml.HTMLDocumentClassのcreateDocumentFromUrlメソッドを
使った場合と殆ど同じものを得る事ができるのですが
上記の方法ではurlの部分がabout:blankになってしまいます。

このurlの部分のみをあとから修正する方法はないでしょうか?
806デフォルトの名無しさん:2007/12/28(金) 22:00:57
ないと思うけど、urlいじってどうしたいのさ?
807デフォルトの名無しさん:2007/12/28(金) 22:07:01
レスありがとうございます。

今クローラを作っていてこの生成したHTMLドキュメントをあとから
利用するときのためにurl情報も残しておきたいと思っているのです。
808デフォルトの名無しさん:2007/12/28(金) 22:15:24
URL情報がIHTMLDocument2にある必要はないと思うのだけど
クローラならHTML解析さえ済ませればIHTMLDocument2は用済みじゃない?
809デフォルトの名無しさん:2007/12/28(金) 22:21:29
たしかに仰るとおりですね。
ただ今のところ解析結果の情報を他に移すことなくそのまま利用しているので。
ちょっと修正が大掛かりになりそうなので
簡単にurlの部分だけ更新できれば、と思い相談させて頂きました。
810デフォルトの名無しさん:2007/12/28(金) 23:03:17
横槍だけどurlがabout:blankのままだと
imgノードとかのsrcを得たい時に困るんじゃないの?
811デフォルトの名無しさん:2007/12/28(金) 23:15:07
ヴァリアント てーっ!
812デフォルトの名無しさん:2007/12/28(金) 23:22:12
>>810
まさにそこの部分で困っていました。
DOMツリーを辿ってIMGノードのmshtml.IHTMLImgElementの
srcを取ろうとしたらabout:../image/01.jpgのようになってしまいました。
813デフォルトの名無しさん:2007/12/29(土) 01:10:30
いないいないvar
814デフォルトの名無しさん:2007/12/29(土) 01:20:45
>>812
以前いろいろ考えてみたが、その時はあきらめてbase要素をHTMLに仕込んだな
815デフォルトの名無しさん:2007/12/29(土) 01:51:20
ありがとうございます。
writeするHTMLにbase要素を仕込む方法試してみました。しかし
baseUrl' は、型 'System.NotImplementedException' の例外をスローしました。
となります。
816デフォルトの名無しさん:2007/12/29(土) 01:56:23
C#で.netのGUIアプリケーションを作りたいのですが
入門サイトなどをみると、CUIでハローワールドやら値の入出力やらの説明がされており
GUIで例えば
テキストボックスから値を取ってボタンを押されたら入力された値を表示する
という簡単な動作をやってみたくても参考にできるサイトが見つかりません

ttp://ufcpp.net/study/csharp/st_basis.htmlのサイトの
GUIプログラム例を元にやってみたら動かなかったし…
どこか良いサイトなどありますでしょうか?
817デフォルトの名無しさん:2007/12/29(土) 02:16:14
VS なり VC#Express なり使ってるなら、適当にコントロール張り付けたり、
プロパティグリッドでプロパティいじったりイベント一覧からハンドラつけたり
あんまり悩むところもないと思うのだが
818デフォルトの名無しさん:2007/12/29(土) 03:20:52
>>815
それ「baseUrlプロパティに設定」しようとしてないか?
819デフォルトの名無しさん:2007/12/29(土) 08:45:22
820デフォルトの名無しさん:2007/12/29(土) 23:19:25
J#のvjslib.dll読み込んで作ったアプリを別のサーバーで使おうとしたら、アセンブリ読み込めません・・
のMsg出るんだけど、なんで?.NET2.0入れててればGCAに登録してなくてもいいんじゃないの?と思って
ましたが、何か勘違いしてるのかな・・
821デフォルトの名無しさん:2007/12/29(土) 23:38:49
J#は別にランタイムが必要だったような
J#のライブラリなんて必要ある?
822デフォルトの名無しさん:2007/12/30(日) 00:23:32
>>821
そうでしたか。zipファイル扱いたかったので仕方なくvjslib.dll利用しました。
823デフォルトの名無しさん:2007/12/30(日) 12:47:27
>zipファイル扱いたかったので仕方なくvjslib.dll利用しました。
よくあることだよね。
多倍長整数なんかも、今はDLRがあるけど、以前はJ#のライブラリを使うのが
一番手っ取り早い方法だった。

>J#は別にランタイムが必要だったような
「Microsoft Visual J# 2.0 再頒布可能パッケージ」だな。
824デフォルトの名無しさん:2007/12/30(日) 19:55:25
System.IO.Packaging.ZipPackage
825デフォルトの名無しさん:2007/12/31(月) 03:09:14
.NET Framework 3.0か
そんなのあったんだな
826デフォルトの名無しさん:2007/12/31(月) 09:38:09
3.5も出てますがな
827デフォルトの名無しさん:2007/12/31(月) 22:50:18
> そんなの
ってのは
> System.IO.Packaging.ZipPackage
を指しているんじゃまいか
828825:2008/01/01(火) 02:07:35
>>827
その通りです。
3.0というとWPFってイメージしかなかったから、「そんなの(ZipPackage)あったんだな」と。
一応補足。
829デフォルトの名無しさん:2008/01/01(火) 02:53:58
というかWPFの一部だべ>ZipPackage
830デフォルトの名無しさん:2008/01/01(火) 22:48:02
Dns.GetHostEntry("218.42.128.8");
これが何でエラーになるの

> 218.42.128.8

Name: pso-mp08.sonic.isao.net
Address: 218.42.128.8

逆引きできるはずなのに
831デフォルトの名無しさん:2008/01/02(水) 12:48:08
>>830
IPHostEntryの情報を取るのに逆引き以上のことをしている。
pso-mp08.sonic.isao.net この名前で引けないし。
832デフォルトの名無しさん:2008/01/05(土) 19:46:01
ジョイパッドのボタンが押されたらイベントを発生させるコンポーネントを作ろうとしています。
フォームに表示する必要はないのでComponentから継承して、コンストラクタは(IContainer container)をパラメータにしています。
System.Threading.Threadで別スレッドを起動し、そのスレッドで
Microsoft.DirectX.DirectInput.Device.SetEventNotificationを使ってシグナルを待ってからイベントを起こそうと思っているのですが、
メインスレッドでイベントを起こすための方法に悩んでいます。
DelphiでのTThread.Synchronize相当のものを探しています。

Invokeを使うようですがControlで実装されているので、Componentから継承しているので使えません。
そこで親のフォームのInvokeを使おうとしています。

プロパティを通して親Formを設定するコードを書いてしまえば出来そうなのですが、
できるだけ汎用性を持たせたいので、IDEでフォームに乗せただけで、
自分はどのフォームに乗せられているのか知る方法はないのでしょうか?
833デフォルトの名無しさん:2008/01/05(土) 21:04:46
>>832
俺自身C#初心者なんてトンチンカンな答えかも知れないけど、
例えば次のようにUIの同期用に適当なコントロールを強制的に作っちゃうのも
一つの方法なんじゃない?

static Label mUISyncObj;
public static ISynchronizeInvoke GetUISyncObject()
{
if (mUISyncObj == null)
{
mUISyncObj = new Label();
mUISyncObj.CreateControl();
}
return mUISyncObj;
}
834デフォルトの名無しさん:2008/01/05(土) 22:27:53
Application.Formsかなんかでその上で実行させるとかでいいんじゃない?
835デフォルトの名無しさん:2008/01/05(土) 23:43:06
ContextMenuStripとかに仮想リストみたいな機能はないのかな

2000個のアイテムを追加すると(SuspendLayoutしてAddRange)2秒以上かかる。。
個数と時間考えれば遅くはないんだろうけど。
2000個もつっこむのが間違ってるよね。。。。
836835:2008/01/06(日) 01:16:12
アイテムにImageIndexがついてると重いみたい。寝る。
837832:2008/01/06(日) 09:40:41
結局、作らなくていい回避策があるハンドルは増やしたくなかったのと
ジョイスティックの初期化でもハンドルが必要なことに気づいたので、とりあえず

public Control ParentControl

というようなプロパティを持つことにしました。
アホなことに、こうすればIDEで簡単に設定できることにも気づいたし。
838デフォルトの名無しさん:2008/01/06(日) 11:36:39
ゲームパッドに初期化なんてあったっけ?
あったとしてもハンドル(ウィンドウハンドルのことを言ってるんだと思うけど)
なんて必要だったかなあ。。

いずれにせよ、ISynchronizeInvokeをグローバルで一つ持つのが一番単純で応用が利くと思うんだが。
839デフォルトの名無しさん:2008/01/06(日) 13:27:02
C#でゲームって誰が買うんだよw
840デフォルトの名無しさん:2008/01/06(日) 13:31:09
DirectXならC#でも十分なパフォーマンス出るぞ
XNAとか知らんのか
841デフォルトの名無しさん:2008/01/06(日) 13:44:40
遅いのはFormsだけだろ
842832:2008/01/06(日) 13:46:30
ISynchronizeInvokeってのには気づきませんでした。憶えておきます。

ちなみに私が作ろうとしてるのはゲームじゃないです。
パッドをリモコン代わりにいろんなソフト(主に動画・音楽再生系)をコントロールするツールです。
自分専用。
843デフォルトの名無しさん:2008/01/06(日) 13:46:42
Formsって何だろ
探偵小説?w
844832:2008/01/06(日) 13:52:23
>>838
あとDevice.SetCooperativeLevelのことです。
845デフォルトの名無しさん:2008/01/06(日) 13:56:01
System.Windows.Timerは内部でNativeWindowを持ってるよ
846デフォルトの名無しさん:2008/01/06(日) 14:13:11
MDXは封印されますた
847デフォルトの名無しさん:2008/01/06(日) 14:26:30
Managed DirectX 1.1 から XNA Framework への移行ガイド
ttp://www.microsoft.com/japan/msdn/xna/migration.aspx より

>DirectInput デバイス

>フライト スティック、ハンドル、旧式のゲームパッドなどの DirectInput デバイスは、
>XNA Framework ではサポートされて いません。
>これらのデバイスは Xbox 360 と互換性がないため、
>クロスプラットフォーム ゲームをサポートするためには適切で ありません。

>DirectInput デバイスのサポートが必要なゲームでは、
>これら のコントローラにアクセスする手段として引き続き MDX 1.1 DirectInput アセンブリが必要となります。
>DirectInput はクロス プラットフォームでは動作しないので、ほとんどの XNA Framework プロジェクトにとって推奨されません。

もの凄く中途半端な位置づけ
848デフォルトの名無しさん:2008/01/06(日) 14:31:14
ジョイスティックくらいWin32APIとかC++/CLIとかで何とでもなる
849デフォルトの名無しさん:2008/01/06(日) 14:55:59
ゲームは箱で作れ
てこと
850デフォルトの名無しさん:2008/01/07(月) 11:30:41
質問です、WebBrowserコントロールでExcelファイルを表示したばあい、そこで使われている
Excel本体のProcessオブジェクトはどのような形でつかむことができるでしょう。
たとえばHtmlDocumentのようなものから手繰っていくのでしょうか、よろしくお願いします。
851デフォルトの名無しさん:2008/01/07(月) 21:45:40
WebBrowserコントロールのDocumentは何になってる?
852デフォルトの名無しさん:2008/01/07(月) 23:25:34
タイトルバーにボタンを追加したんですけど、サンプルありますか?
853デフォルトの名無しさん:2008/01/07(月) 23:40:15
したんだったらいいじゃん
854デフォルトの名無しさん:2008/01/08(火) 13:10:51
>>851
>Documentは何に

と言われますと、それのプロパティで見るのでしょうか・・・。
すみません、よくわかりません。
855デフォルトの名無しさん:2008/01/08(火) 13:49:20
ブレークポイント設定してウォッチするとかしてみたら?
856デフォルトの名無しさん:2008/01/08(火) 14:44:58
もしWorkBookなら、それから.Application
ApplicationのExecuteExcel4Macroを使って
kernel32.dllのGetCurrentProcessID()で
ExcelのProcessIDが取れる
857デフォルトの名無しさん:2008/01/08(火) 16:52:04
>>856
ありがとうございます、そういうふうに行うのですか!!
これでやってみます!!
858デフォルトの名無しさん:2008/01/08(火) 21:32:17
>>856
この方法でExcelの場合のProcessをつかむことができそうでした、ありがとうございました!!
Excelのマクロを使ってしまうというのはすごい方法ですね!!

こうしたWebBrowserで走っているCOMサーバープロセスをつかむ一般的な方法と
いうようなことを考えた場合ですが、Excelも含めて対応できるものがあると便利かと
思いました。もしかしてそうしたことも可能でしょうか。今回の方法から類推して
考えてみればいいのかもしれませんが自分ではちょっと考えつきません。
もしそうしたものがありましたら教えていただけないでしょうか・・・。
859デフォルトの名無しさん:2008/01/08(火) 22:45:44
ないと思う。例えばインプロセスサーバだったらどうするの。
860デフォルトの名無しさん:2008/01/08(火) 22:47:40
それよりプロセスとって何がやりたいのか興味がある。
861デフォルトの名無しさん:2008/01/08(火) 23:57:52
>>859
そうですか、やはりないですか、わかりました。

>>860
実はExcelファイルの表示を終了してもExcelのプロセスが生き残っていたため
それを強制的に終了したかったのですが、ActiveXInstance.ExecWBでCloseコマンド
を投げるとWebBrowser自体が消えてしまいましてびっくりしました。

それでCOMのプロセスは残りやすいのではと思いまして、そうしたときの対策でと
思いました。別の方法がありましたら教えてください。
862デフォルトの名無しさん:2008/01/09(水) 00:03:02
>>861(訂正)
>ActiveXInstance.ExecWBでCloseコマンドを投げる
-> ActiveXInstance.ExecWB(OLECMDID_CLOSE, ・・・, ・・・) を投げる
863デフォルトの名無しさん:2008/01/09(水) 00:10:40
>>861
いやおまえ・・・力づくでプロセス落とそうとすんなよ・・・。
それバグだぞw
864デフォルトの名無しさん:2008/01/09(水) 00:16:38
クローズするのはプロセスじゃなくて、
ハンドルをクローズさせないといけないだろう。
まずは基礎的なCOM操作を覚えないとな。
865デフォルトの名無しさん:2008/01/09(水) 00:19:47
少し待てば終了するはずだけど。。。
866デフォルトの名無しさん:2008/01/09(水) 00:23:59
>>865
・・・・・・え?
867デフォルトの名無しさん:2008/01/09(水) 00:29:11
>>863-864
>クローズするのはプロセスじゃなくて、
>ハンドルをクローズさせないといけないだろう。
わかりました、COM操作について勉強します。
OLECMDID_SAVE ができたのでExcel自体のプロセスが終わって
くれるのかと思ってしまいました。

>>865
いつかはガーベジコレクションで消えるのでしょうか・・・
気にしないでいいでしょうか。
868デフォルトの名無しさん:2008/01/09(水) 00:40:57
C# または VB.NET で Excel.Application (というか COM) を扱う時は、
明示的に参照の解放をしなければなりません。
解放しないと、プロセス内に居座り続けるため Excel は終了しないです。
(タスク マネージャを見ると、Excel.exe がプロセスに残ったままになる)

とりあえず、参照はすべて変数に取りましょう。
必要ではなくなった時点で、System.Runtime.InteropServices.Marshal クラスにある、
ReleaseComObject メソッドで解放してください。

それと、例外発生時の対応として Try 〜 Finally を使用して、
解放を保証することを強くお勧めします。
869デフォルトの名無しさん:2008/01/09(水) 00:44:04
この話題は長くなるからな〜
呼び出しもとのプロセスを終了してもExcelが残っているなら、
それはExcelに対してClose/Quitの命令を実行してないからだと思うがね。
870デフォルトの名無しさん:2008/01/09(水) 00:47:01
この場合は、>>869でなく>>868だと思う
871デフォルトの名無しさん:2008/01/09(水) 01:17:56
TLB公開されてないオブジェクトをC#で扱うと発狂しそうになる。
872デフォルトの名無しさん:2008/01/09(水) 01:34:00
WebBrowserコントロール上のExcelの話か。ややこしい使い方してるなぁ。
873デフォルトの名無しさん:2008/01/09(水) 01:42:15
WebBrowserコントロールのDocumentが何か知らないので、
Excelを触ってないと思ったので、>>865
触ってるなら>>868
874デフォルトの名無しさん:2008/01/09(水) 01:44:03
WebBrowserコントロールはVBやDelphiの頃から鬼門だなあ
多少のメモリリークは目をつぶるしかないところがある。
875デフォルトの名無しさん:2008/01/09(水) 09:30:45
>>868
詳しいご指導を頂き、大変ありがとうございました!
>>869-874
WebBrowserで表示したのみで直接Excelのオブジェクトを
操作はしてませんでしたが、こちらのアプリケーションを終了しても
残っていました。
>>873
つまり「触って」はいなかったです。その場合はいつかはシステム上の
誰か(.NETFrameworkでしょうか?)が消してくれるのですね、
そうならば特に気にかけないことに致します。
876デフォルトの名無しさん:2008/01/09(水) 09:58:45
別でExcel実行中にたまたまこれ使ってて落とされたらたまらんなw
877デフォルトの名無しさん:2008/01/09(水) 15:29:57
だからProcessIDで特定するんだろ
878デフォルトの名無しさん:2008/01/09(水) 15:49:56
同じだって
879デフォルトの名無しさん:2008/01/09(水) 15:55:54
Excelは複数のファイルをMDIで開くからProcessIDで特定しても、
ファイルがプロセス共有してる。
ここまで、言わないと理解できないわけじゃあるまい。
880デフォルトの名無しさん:2008/01/09(水) 17:59:41
んなこといったらApplication.Quitも使えん
881デフォルトの名無しさん:2008/01/09(水) 18:08:43
^^?
882デフォルトの名無しさん:2008/01/09(水) 19:42:27
C#の話題と限ったことではないのですが、

Explorerなどで、ファイルやフォルダの「新規作成」という操作ができる
ようになっていますが、あそこに出てくるファイルの種類というものは、
何かの基準で選別されて出てきているのでしょうか?

その場合には何かの選択されるの基準や条件というものとしてどこに
情報ファイルとして格納されているということでしょうか?もしそうしたものが
あって見られるとしましたらその形式やアクセス方法などを知りたいのですが、
どなたか教えていただけないでしょうか。
883デフォルトの名無しさん:2008/01/09(水) 20:03:40
>>882
どの辺のレベルのことを聞いているかわからないけど、直接的にはFileDialog.Filterプロパティ
884デフォルトの名無しさん:2008/01/09(水) 20:15:36
新規作成 explorer レジストリ
で出てくる辺り?
885デフォルトの名無しさん:2008/01/09(水) 20:17:08
>>882
レジストリ、フォルダ、色々あるけど ShellNew でググれば大体わかるんじゃない?
886デフォルトの名無しさん:2008/01/09(水) 20:33:25
>>883-885
>FileDialog.Filterプロパティ
>新規作成 explorer レジストリ
>レジストリ、フォルダ、色々あるけど ShellNew でググれば大体わかる

おお!!ありがとうございます!!
すばらしいです、こんなにすぐにもたくさんのレスを、感謝です!!!
これらを調べてみます!!助かります!!またよろしくです。
887デフォルトの名無しさん:2008/01/09(水) 20:50:28
パフォーマンスカウンタとかも
Win32からのAPIも提供されてるってだけで
中身COMだから、そもそもサービス全滅。
888デフォルトの名無しさん:2008/01/09(水) 20:57:07
std::list<Hoge> hogelist;
std::list<Hoge>::iterator it;

for (it = hogelist.begin(); it != hogelist.end();){
if (it->inactive()) it = hogelist.erase(it); else it++;
}

こんな感じで、inactiveになっていたらリストから消すって事ををやりたいんですが、
C#だとSTLないんで、System.Collection.Genericを使うんだと思うんですが、
上の書式ってどういう風に書けばいいんでしょうか

foreach使って消すとなんか怒られるんですよね…
889デフォルトの名無しさん:2008/01/09(水) 21:02:52
enumeratorはコレクションに手を加えると無効になるから、添え字でアクセスする。
890デフォルトの名無しさん:2008/01/09(水) 21:03:57
List<Hoge> hogelist;

hogelist.RemoveAll( delegate(Hoge o) { return o.inactive; } );
891デフォルトの名無しさん:2008/01/09(水) 22:42:11
>>890
おお、RemoveAllに条件をつければよかったんですね
てっきりclearと同じ関数だと思ってました
ありがとうございます
892886:2008/01/10(木) 13:52:05
教えていただいた項目から調べてみましたところ、レジストリへの設定で可能となっている
ことがわかりました。ありがとうございました!!

ところで、このレジストり内の 「拡張子」 の項目に Shellnewで新規作成できるファイルを
追加しようと思うのですが、テンプレートファイルを複数用意しておいて、それらすべてを
一つの拡張子に割り付けて複数のファイルから選択できるようにしたいと思ったのですが、
これは可能でしょうか?

何卒よろしくお願いします。
893デフォルトの名無しさん:2008/01/10(木) 14:07:13
894デフォルトの名無しさん:2008/01/10(木) 14:28:07
>>893
誘導ありがとうございます!!あちらで聴いてみます!
895デフォルトの名無しさん:2008/01/10(木) 20:49:12
C#で
callmethod(String methodname, arg1・・・)
みたいに文字列のメソッド名を使って指定したメソッドを呼び出すみたいなことはできませんか?
896デフォルトの名無しさん:2008/01/10(木) 21:00:33
>>895
refrection
897デフォルトの名無しさん:2008/01/10(木) 21:08:52
またスクリプト脳か。
898デフォルトの名無しさん:2008/01/10(木) 22:33:08
>>895
必要性がなくね?
899デフォルトの名無しさん:2008/01/10(木) 22:38:15
次あたり「evalはありませんか?」が来る。
900デフォルトの名無しさん:2008/01/10(木) 22:46:33
あるから困ったもんだ
901デフォルトの名無しさん:2008/01/10(木) 22:48:54
文字列を変数に使いたいのですが、どうすればいいですか。
902デフォルトの名無しさん:2008/01/10(木) 22:49:48
遠慮なく使ってください。
903デフォルトの名無しさん:2008/01/10(木) 23:49:56
object o = 0xffffffff;

×IntPtr p = (IntPtr)o;  InvalidCastException
×IntPtr p = (IntPtr)(int)o;  InvalidCastException
×IntPtr p = (IntPtr)(uint)o;  OverflowException
○IntPtr p = (IntPtr)(int)(uint)o;

小一時間はまっちゃった。
どうしてこうなるの?
904デフォルトの名無しさん:2008/01/10(木) 23:53:39
0xffffffff の型は uint で、object に代入する際にボクシングされる。
んで、それを元に戻すのが uint へのキャストで、
他へのキャストはできない。

uint から IntPtr への直接のキャストでは範囲の判定が行われて、
オーバーフローになってしまう。
そこで、一旦 int を挟む必要がある。

という事なんだろう。
905デフォルトの名無しさん:2008/01/10(木) 23:59:07
IntPtr p = (IntPtr)(int)(uint)o;
              ↑ ボックス化解除
            ↑ 整数変換
        ↑ ユーザ定義キャスト
906デフォルトの名無しさん:2008/01/10(木) 23:59:13
ども。

>元に戻すのが uint へのキャストで、
>他へのキャストはできない。

なるほどなるほど……
だけどIntPtrへのキャストで範囲をチェックするのが納得いかない
UIntPtrの存在も。
907デフォルトの名無しさん:2008/01/11(金) 00:19:26
IntPtr p = (IntPtr)(uint)o;
これは、
IntPtr p = IntPtr.op_Explicit((uint)o);
とみなされて、
op_Explicit(Int64)が呼ばれるから。
908デフォルトの名無しさん:2008/01/11(金) 00:34:04
(18禁ゲーム)[050715][HOOK] _summer(AlphaROM補修済 ccd+bin)
909デフォルトの名無しさん:2008/01/11(金) 00:39:45
通りすがりだけど、unboxingとキャストを区別してなかった。
uint u = 1;
object o = u;
int i = (int)o;
で例外がでるなんて思いもよらなかった。
吊ってくる。
910デフォルトの名無しさん:2008/01/11(金) 01:12:48
なんかIntPtrあるんだからUIntPtrあったほうがなんか他の型と対称的やん






てUIntPtrの説明に書いてあるよw
911デフォルトの名無しさん:2008/01/11(金) 03:03:31
こういうデザインのフォームってどうやって作るんですか?
http://www1.bbiq.jp/blue_sky/vb6/img/04.png
912デフォルトの名無しさん:2008/01/11(金) 03:12:39
まず、Vistaを買います
913デフォルトの名無しさん:2008/01/11(金) 03:16:11
あぁ、そういうことですか。
わかりました。ありがとうございます。
914デフォルトの名無しさん:2008/01/11(金) 03:26:06
class Hoge<T> where T : ??? { }

・型パラメータの制約(where)を使って、プリミティブ型のみ使えるように制限したい
って事で悩んで小一時間調べてたんだけど、もしかして

class Hoge<T> where T : IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T> { }
と少々強引?なやりかたでもいいのでしょうか。
915デフォルトの名無しさん:2008/01/11(金) 03:55:37
別にいいけど、それらを全部満たすものがあれば、それも通るよ。
916デフォルトの名無しさん:2008/01/11(金) 04:33:43
>>915
そう思うから、何かもっと良い方法がある筈と考えてるんだけど、分からないんだよねぇ

実行時に型チェックすればプリミティブ型を一発で見分けれるんだけど、実行時に分かっても例外飛ばすしかなくなるし・・
917デフォルトの名無しさん:2008/01/11(金) 04:37:09
残念ながら、それよりよい方法は存在しない。
918デフォルトの名無しさん:2008/01/11(金) 04:38:52
型制約どうも記述力不足だよなぁ・・・
919デフォルトの名無しさん:2008/01/11(金) 05:00:19
プリミティブ型ってのはIL上で見分け付くもんなの?
920デフォルトの名無しさん:2008/01/11(金) 05:24:28
>>914
Tじゃ演算できないからICalculable<T>インターフェースみたいなのも作らないとね
演算子定義したり違う型との演算とかまで考えるとちと面倒になってくるけど
921デフォルトの名無しさん:2008/01/11(金) 08:28:44
decimalはプリミティブじゃないぜ、事実上。
922デフォルトの名無しさん:2008/01/11(金) 08:58:44
decimal以外のC#のプリミティブ型をジェネリックの型パラメータに指定したら
System.Int32とかじゃなくてIL組み込み型としての名前が付くみたいだね
区別する方法はありそうだけど
923デフォルトの名無しさん:2008/01/11(金) 09:30:01
整数はint 少数はdoubleでいいじゃない
924デフォルトの名無しさん:2008/01/11(金) 12:18:29
GCがある時点で構文がシンメトリーではない。
925デフォルトの名無しさん:2008/01/11(金) 12:20:11
プリミティブの演算をインターフェース越しにするなんて
考えただけで気持ち悪いな
926デフォルトの名無しさん:2008/01/11(金) 12:28:38
プリミティブ型だけならILGenerator使って四則演算できたような
かなり危ない感じだけど
927デフォルトの名無しさん:2008/01/11(金) 13:23:57
やだよそんなの><
928デフォルトの名無しさん:2008/01/11(金) 18:00:58
すみません、TraceSourceについてちょっと質問です。
以下のようなクラスを作り
class TextBoxTraceListener : TraceListener
{
  TextBox textBox;
  public TextBoxTraceListener(TextBox tb)
  {
    this.textBox = tb;
  }
  public override void Write(string message)
  {
    this.textBox.AppendText(message);
  }
}
class Form1 : Form
{
  public Form1()
  {
    TraceSource ts = new TraceSource(GetType().ToString());
    ts.Listeners.Add(new TextBoxTraceListener(this.textBox1));
    ts.TraceInformation("hoge");
  }
}
とやれば、hoge がテキストボックスに表示されますよね。
他のクラスでTraceSourceを作成し、トレースしても、そのインスタンスごとにリスナを登録しないとだめですよね。
でも構成ファイル(app.config)にConsoleTraceListenerとか
TextWriterTraceListenerとかを指定してやれば全てのTraceSourceのインスタンスにリスナを設定してくれますよね。
ところがTextBoxTraceListenerはTextBoxのインスタンスが必要なので、構成ファイルで設定できないのです。

複数のクラスでTraceSourceを使っていて、それらの出力を全てテキストボックスに表示させたいんです。
なんかいい方法ありませんか?
929デフォルトの名無しさん:2008/01/11(金) 18:24:40
>>928
ログの名称はアセンブリ名かアプリケーション名にしたほうがいいぞ。
GetType().Assembly.GetName().Name
930デフォルトの名無しさん:2008/01/11(金) 19:59:04
>>928
TextBoxのインスタンスは後でプロパティ経由で渡すことにして、
それまではバッファリングしとけば
931デフォルトの名無しさん:2008/01/12(土) 15:03:09
ちょっと気になったことで質問をば

UNLHA.dll(アンマネージコード)を使ってLHAファイルを解凍しています
UnlhaExtractMem関数(つまりファイルの解凍)を呼び出すときにbyte配列を渡していますが
UnlhaExtractMem関数実行中に渡したbyte配列がGCの対象になって
移動してしまうことはないかです

unsafe中では、fixedを使用すれば移動しないのが分かるのですが、
同じことは不要なのでしょうか?
マーシャリングの中で自動的に整合性を取ってくれてるように思えますがご回答願います。
932デフォルトの名無しさん:2008/01/12(土) 15:16:29
P/Invokeでアンマネージドな関数を呼ぶ場合、
関数を呼び出してから戻ってくるまでの間にGCが動くことはない。

渡したポインタをDLLが保存していて、後で使うような場合ははまる。
933デフォルトの名無しさん:2008/01/12(土) 15:21:28
>>932
呼び出しはDllImportを使用しています

>渡したポインタをDLLが保存していて、後で使うような場合ははまる。
保証の限りではありませんが、さすがにそれは無いと信じますがw
934デフォルトの名無しさん:2008/01/12(土) 15:38:57
>>932
>P/Invokeでアンマネージドな関数を呼ぶ場合、
>関数を呼び出してから戻ってくるまでの間にGCが動くことはない。

ちょっと補足させてもらうよ。

1)アンマネージドな関数Xを呼ぶ
2)Xからマネージド関数MXがコールバックされる
3)MXでGC発生
4)MXからリターン
5)Xからリターン

という可能性はあって、その場合Xの呼出し周辺のみを見ていると嵌ることがある。

>マーシャリングの中で自動的に整合性を取ってくれてるように思えますがご回答願います。

byte配列を渡したからと行って常にコピーが起きないとは限らない。
もしコピーが回避された場合、
マーシャラは1)のタイミングでfixed相当のことをやっていて、
5)のタイミングで解除している。

仮に3)でGCが起きたとしても大丈夫。
935931:2008/01/12(土) 15:59:31
>>932,934
回答ありがとうございました
お二方?とも問題ないと言うことなので、
GCによる問題は発生しないとで安心致します。
(あとEssential.NETという本を思い出して見てましたが、GCの問題の記述は見あたりませんでした)

>2)Xからマネージド関数MXがコールバックされる
こんなことも出来るんですねw
936デフォルトの名無しさん:2008/01/12(土) 16:21:57
>>934
そうだっけ?マーシャラがP/Invoke時にpin指すから3)は起こらないと思ってたけど。
937デフォルトの名無しさん:2008/01/12(土) 17:11:06
PInvokeの時のStringの既定のマーシャリングってLPTStrですよね?

http://msdn.microsoft.com/library/ja/csref/html/vcwlkPlatformInvokeTutorial.asp?frame=true
ここにはそう書いてあるんですが、

http://msdn2.microsoft.com/ja-jp/library/s9ts558h(VS.80).aspx#Mtps_DropDownFilterText
にはBStrなんて書いてあります。

もしかして前者はC#、後者は.Net Frameworkの既定値って意味ですか?
938デフォルトの名無しさん:2008/01/12(土) 19:56:20
BStr -> COM
939デフォルトの名無しさん:2008/01/12(土) 20:36:46
上のほうはサンプルコードでやろうとしていることと逆の説明じゃないか?
間違い?
940928:2008/01/12(土) 21:11:24
>>929
はい、サンプルなので適当に書きましたが、実際はそうします。
>>930
その方法でうまくいきました。

サンクスです!
941デフォルトの名無しさん:2008/01/14(月) 12:53:37
ちょっと嵌っているので、教えてください。
以下のようなコードで、hoge()をマルチスレッドで処理したいのですが、シングルCUP環境だと意図した通り
実行しますが、マルチCPU環境だと2つ目のスレッド開始時点でShareClass.m_TaskQueue.Countが0となって
1つのスレッドしか動作しません。解決のヒントを戴けないでしょうか・・・
デリゲートで非同期実行しています。

static class ShareClass{
public static Queue<string> m_TaskQueue = new Queue<string>();
private static object sync = new object();

public static void SetTarget(string item){
lock(sync) m_TaskQueue.Enqueue(item);
}
public static string GetTarget(){
lock(sync) return m_TaskQueue.Dequeue();
}
}

//別のクラス
void hoge(){
while(ShareClass.m_TaskQueue.Count != 0){
string item = ShareClass.GetTarget();
//何らかの処理
}
}
942941:2008/01/14(月) 13:02:50
ちなみに、m_TaskQueueへの追加は(hogeを含まない)別のオブジェクトから行なっています。
連投すみません。また夜におじゃまします。
943デフォルトの名無しさん:2008/01/14(月) 14:13:04
>>941
Singletonにすりゃいいんじゃね?
944デフォルトの名無しさん:2008/01/14(月) 15:15:34
>>941
Monitorを使ってちゃんと排他する。
class BlockingQueue<T> {
 object sync = new object();
 Queue<T> qu = new Queue<T>();
 public T Dequeue() { lock(sync) { 
  while (qu.Count==0) Monitor.Wait(sync);
  return qu.Dequeue(); }}
 public void Enqueue(T item) { lock(sync) { qu.Enqueue(item); Monitor.PulseAll(sync); }}
}
945デフォルトの名無しさん:2008/01/14(月) 15:26:57
もうちょっと説明すると、
.m_TaskQueue.Count を読み取る箇所にもlockが必要。
読みとって1以上だったときにDequeueするまでの間も
他の処理が入り込まないようにlockしたままにする必要がある。
>>944はそれをMonitor.Waitで実現している。
946デフォルトの名無しさん:2008/01/14(月) 16:03:27
>>941
しかしよくその環境の違いに気づいたな
947デフォルトの名無しさん:2008/01/14(月) 17:31:15
>>946
マルチスレッドのバグってCPU2個以上で表面化するものが多いから
別に不思議ではないんでは?
948デフォルトの名無しさん:2008/01/14(月) 19:01:29
元のプログラムが何をしたいものなのかいまいち分からない。
>>944>>945であってるんだろうってきはするが、
元のプログラムとは違うよな…
949デフォルトの名無しさん:2008/01/14(月) 19:08:19
waitってスプリアスウェイクアップって起こり得るの?
950デフォルトの名無しさん:2008/01/14(月) 20:25:43
XmlSerializerについてなのですが、
(ひとつめ)
プロパティP1{ get; set{ if(P2==null)return; base.A=value;}}
のとき、P2、P1の順でシリアライズできないでしょうか?
(ふたつめ)
インスタンスI1のプロパティPとI2.Pの参照が同じであるとき、
その関係を保持したままシリアライズ・デシリアライズを
することはできないでしょうか?
951デフォルトの名無しさん:2008/01/14(月) 22:11:57
>>947
誰も不思議だとは
952941:2008/01/14(月) 23:02:18
>>944-945
参考になりました。
適切にロックすることで解決できました。
Count調べてアイテム取得するまでの間に別のスレッドが取得、削除して
エラーとなってました。デバッグ環境ないPCで動かしてたので特定に時間かかってしまいました…。

ありがとうごさいました。
953デフォルトの名無しさん:2008/01/15(火) 14:52:00
大量の計算を行うプログラムで、プログレスバーを使おうとおもっているのですが、
実行中に処理を一時中断するのにThread.suspend()を使おうと思ったのですが
困ったことに.NET2008では使用が推奨されていないようです

Thread.Interrupt()を使おうかと思ったのですが
途中でsleepする部分が無い(パフォーマンスが落ちると困る)ので
停止してくれません

suspend()、resume()に相当する機能を実現するには
どうすればよいのでしょうか?
よろしくお願いいたします。
954デフォルトの名無しさん:2008/01/15(火) 15:27:24
「大量の計算」の中で、適当な間隔で実行される部分を見つけて
外部からの処理一時停止リクエストを監視して自ら待つコードを入れとく。

一秒に数回も実行されれば十分だろうから、パフォーマンスへの
影響はさほど無いでしょう。

非推奨のThread.Suspendで強引に Thread を suspend しちゃう場合には、
当該スレッドが何かの共有資源をつかんだタイミングで suspend
なんかしちゃったりして他のスレッドをブロックしちゃう可能性とか
そういうことを詳細に検証したうえで行ってください。
955デフォルトの名無しさん:2008/01/15(火) 16:34:34
MonitorとかManualResetEventとかは?
956デフォルトの名無しさん:2008/01/15(火) 17:30:56
Form1とForm2を定義して
Form1内で
Form2 f2 = new Form2();
f2.ShowDialog();
でForm2を呼び出した後にf2内のbutton_Clickイベント処理内でf2の中のテキストボックスや、コンボボックスの値をForm1で取得したいのですが
どうしたらよいでしょうか?
957デフォルトの名無しさん:2008/01/15(火) 17:37:00
そのForm2が閉じてから取得したいのか、リアルタイムで取りたいのか。
リアルタイムならShowDialogは不向き、、、つかこれふらっとスレでいいんじゃ?
958デフォルトの名無しさん:2008/01/15(火) 17:47:16
>>957
具体的に言うと、form1からform2をdialogで呼び出します。
そしてdialogの中のテキストボックスとコンボボックスに値を入れてOKボタンを押します。
そんで、form1内のデータグリッドにform2で入れた値を反映させる。
というものです。
なのでタイミング的には閉じた後でいいのかな?
959デフォルトの名無しさん:2008/01/15(火) 17:54:14
FontDialogやOpenFileDialogみたいに、ダイアログの結果として必要な値だけ
プロパティで直接公開する。コントロールを外に見せることはしない。
960デフォルトの名無しさん:2008/01/15(火) 18:13:47
>>プロパティで直接公開する
ってのはDesigner.csの必要な値のプロパティをprivateからpublicにするということでしょうか?
それとform2のその必要な値はform1からどのようにすれば参照できるのでしょうか?
961デフォルトの名無しさん:2008/01/15(火) 18:20:33
privateから以前に、そもそも存在してないものだと思うが。自分で定義するもの。
OpenFileDialog使ってみればどう取得するかは分かるだろ?
962デフォルトの名無しさん:2008/01/15(火) 18:25:26
Form2にメンバーを作って、get setを作って
外からアクセスするようにしてみ。
その後、Form2でtextboxとメンバーが同期するようにする。

つーか、参考書ないのか?
963デフォルトの名無しさん:2008/01/15(火) 18:28:19
はい、ですから
>dialogの中のテキストボックスとコンボボックスに値を入れてOKボタンを押します
ここを手動でいれます。
そのあとのOKボタンをクリックした時に、form1からform2のテキストボックスとコンボボックスの値を取り出したいということなのですが。
なにか私おかしいでしょうか?
964デフォルトの名無しさん:2008/01/15(火) 18:33:09
ふらっとレベルの質問でしょ
移動しなはれ
965デフォルトの名無しさん:2008/01/15(火) 18:53:47
というか14:07:03の時点でマルチポスト
966デフォルトの名無しさん:2008/01/16(水) 01:59:03
C#で可変長のデータを扱うのはどういうのが定石 ?

自分はリストが一番慣れているんだけど(Lispをかじっただけだけど)
そのリストの中に入れれる型を指定することできるかな。

Cell(object car, object cdr)とかやると何でも入っちゃうでしょ。
それをMLだったら[a]とかやると[Int]ならIntしか入らないし[String]ならStringしか入らないしとかやりたいんです。
(MLは使ったことないんで間違ってたらすみません)

generics使ってclass Cell <T> {public Cell(T car, T cdr)}とかやるとcarやcdrにはCellが入らなくなっちゃうんですよね。
967デフォルトの名無しさん:2008/01/16(水) 02:16:38
>>966
つ List<T>
968デフォルトの名無しさん:2008/01/16(水) 02:29:52
>>966
触ってみるマジオヌヌメ
969デフォルトの名無しさん:2008/01/16(水) 03:00:27
>>967
Thank you.

C# Listでググレばよかったんだね。

俺低脳。

これって.Net Frameworkの一部と考えていいの ?
.Net FrameworkってC#の標準ライブラリと考えていいの ?
JavaやRubyでいう公式ライブラリみたいな。

とりあえず.Net Frameworkの本買ってくる。
千葉はろくな本屋がないので週末まで待たなきゃいけないのがおっくうだ。
970デフォルトの名無しさん:2008/01/16(水) 03:11:33
>.Net FrameworkってC#の標準ライブラリと考えていいの?
うん
971デフォルトの名無しさん:2008/01/16(水) 03:16:54
>>969
Amazonって千葉にあるんじゃなかったっけ?
972デフォルトの名無しさん:2008/01/16(水) 04:34:35
>>971
千葉はまだ日本だからAmazonで買えるはずだな
973デフォルトの名無しさん:2008/01/16(水) 10:25:42
>>971のレスで両さん思い出したw
974デフォルトの名無しさん:2008/01/16(水) 12:46:27
部長の家wアマゾンw
975デフォルトの名無しさん:2008/01/16(水) 22:02:02
ADO.NETスレから来ました。

C#のTableAdapterに関して教えてください。

TableAdapterを使って関連付け(Relation)されている
テーブルのDBの行を削除することって出来ますか?
例えば以下の二つのテーブル(親:Table1 子:Table2)で
Table1のIDの"ID1"の行を削除すれば
Table2のIDの"ID1"の行が自動的に
削除されるみたいな・・・。

[Table1]
ID Name Age
----------------
ID1 Yamada 20
ID2 Hanako 18

[Table2]
ID Height Weight
-------------------
ID1 170 65
ID2 160 50
976デフォルトの名無しさん:2008/01/16(水) 23:35:45
そーいった使い方は出来ないと思う。
各々のDataTableのRowDeletedイベントとか使ってみてはどうだろか
977デフォルトの名無しさん:2008/01/16(水) 23:57:21
ちょっと相談なのですが。
たとえば、こういうコードがあったとします。

if (Result == null) {
transaction.Rollback();
MessageBox.Show("エラー0です。");
return false;
}
if ((int)Result == 1) {
transaction.Rollback();
MessageBox.Show("エラー1です。");
return false;
}
if ((int)Result == 2) {
transaction.Rollback();
MessageBox.Show("エラー2です。");
return false;
}
transaction.Commit();
return true;

これをスッキリ表記するのに何かいい手段はないですかねぇ…。
throwで例外起こしてtry〜catchってのもスッキリしなくて…
978デフォルトの名無しさん:2008/01/17(木) 00:02:30
えーっとフラット池
979977:2008/01/17(木) 00:51:48
>978
ありがとうございます。ふらっと逝ってきます。
980デフォルトの名無しさん:2008/01/17(木) 07:12:37
>>914-って>>295-とほとんど同じ話題か
どこかで見たことある気がしてた
981デフォルトの名無しさん:2008/01/17(木) 14:46:23
System.Diagnostics.ProcessでDOSプログラムを立ち上げ、
キーボードイベントを送りたいと思っています。

DOSプログラム側では kbhit()+getch() でキーコードを取得しているのですが、
RedirectStandardInput = true にして StandardInput.Write() でキーコードを送ろう
としているのですが、うまくいきません。
おそらく kbhit() が反応しないからだと思うのですが、
kbhit() で引っ掛けられるようなキーボードイベントをC#側から起こすことは可能でしょうか?

何かご存知の方がいらっしゃいましたら、よろしくお願いいたします。
982デフォルトの名無しさん:2008/01/17(木) 15:05:14
コンソールのハンドル取って、SendKeys
983981:2008/01/17(木) 15:31:01
>>982
即レスありがとうございます。
確かに、コマンドプロンプトを最小化しないで SetForegroundWindow() でアクティブにし、
SendKeysを使うことでとりあえず期待している動作を確認できました。

ただ、できればコマンドプロンプトを最小化しておきたい、
可能であれば CreateNoWindow = true でウインドウすら消して実行させたいのですが、
そのようなケースで同様の処理を実現することはできないでしょうか?

ダメならば kbhit() が書かれているコード側を修正したいと思います・・・。
984デフォルトの名無しさん:2008/01/17(木) 15:37:05
EnumWindows, SendMessage
985981:2008/01/17(木) 15:37:15
すいません、コマンドプロンプトを最小化したままでも期待している動作はしました。
初めにやったときはうまくいかなかった気がしたんだけどな。

さすがに、CreateNoWindow = true ではダメっぽいです。
フォーカスできないですもんね・・・。

引き続き、何か情報がありましたらお待ちしております。
986975:2008/01/17(木) 20:55:15
>>976

なるほど、DBのレコードの削除は
関連付けされていても一括でできないものなんですね。

RowDeletingイベントでやってみます。
987デフォルトの名無しさん:2008/01/19(土) 01:08:00
>>986
AP側で対処せず、できるならDB側でトリガー作成するのがベターじゃないかな。
988975:2008/01/20(日) 00:28:44
>>987
助言ありがとうございます。

DBも初心者なのでトリガの存在は知りませんでした。
少し調べたところによるとDBのテーブル、ビューが
更新されたときに実行されるものみたいですね。

ちょいと調査してわからなかったらまた聞きにきます。
出来たら出来たで報告しにきます。

それまでこのスレあるかな・・・。
989975:2008/01/21(月) 15:21:22
>>987
トリガについて調べたのですがわかりませんでした。

データ定義言語(DDL)にて記述が必要そうなのは
何となくわかったのですが、いろんなサイトを覗いて
いざトリガの記述をしようかと思うも全然手につきませんでした。

何か初心者にもわかりそうな
これっていうサイトはありますか?

関連するテーブルのレコードを削除するくらいだから
すぐに見つかると思っていたら大間違いでした・・・。
990デフォルトの名無しさん:2008/01/21(月) 15:30:52
何を勘違いしているのかしらんがトリガはSQLだぜ
SQLSeverならBooksOnline(MSDNライブラリに統合されてるかもしれん)あたりで
CREATE TRIGGERあたり調べるなり
991デフォルトの名無しさん:2008/01/21(月) 16:34:00
何も勘違いしてない気がするが
気がするだけかも
992デフォルトの名無しさん:2008/01/21(月) 16:38:43
トリガなんて例がいっぱいあるじゃんか。
RDBMSによって違うから、ググる時はDBの名前も含めるといいよ。
993デフォルトの名無しさん:2008/01/21(月) 16:52:34
テンプレートを利用した
BaseClass<T>
を継承したクラスを作成したいのですが
class SubClass<T> : BaseClass<T>
みたいに宣言してもエラーが出ます。
こういうのがやりたいときはどのように記述すればよいのでしょうか?
994993:2008/01/21(月) 16:54:54
基本のクラスは
class BaseClass<T> where T : FooObj
みたいに制約をかけています。
995デフォルトの名無しさん:2008/01/21(月) 16:57:58
継承するクラスでもTの制約を記述する
996993:2008/01/21(月) 17:03:16
ありがとうございます。できました
class SubClass<T> : BaseClass<T> where T : FooObj
ですね。
997デフォルトの名無しさん:2008/01/21(月) 18:27:38
class A<T>
{
 public T Foo(T a, T b)
 {
  return a - b;
 }
}

これはエラーでるんですがこういう事はできないんでしょうか?
998デフォルトの名無しさん:2008/01/21(月) 18:34:32
うん
999デフォルトの名無しさん:2008/01/21(月) 18:45:24
ありがとうございました
Enumaで調べてみます
1000デフォルトの名無しさん:2008/01/21(月) 19:37:44
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。