1 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 03:17:20 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part59 pc12.2ch.net/test/read.cgi/tech/1274019232/ Visual C# 2010 Express Edition 日本語版 www.microsoft.com/japan/msdn/vstudio/express/vcsharp/ その他テンプレ>>1-5 くらい
227 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 02:49:20 ] A hoge = new A(); は B hoge = new B(); です、失礼しました
228 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 02:54:04 ] ttp://msdn.microsoft.com/en-us/devlabs/ee794896.aspx これ使ってObserverを使う
229 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 07:17:08 ] どうもどうも〜
230 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 11:07:45 ] Rxってイベントベースじゃなかったっけ? A側にもB側にも特別なコードを追加せずにnewを検知しようと思ったら ILのリライトしかないと思うけどそんなことやってくれるの?
231 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:07:23 ] >>230 Rx 進めてる時点で、>>229 はそういうイベントコード書けって事だと思うけど。 ぶっちゃけ、それなら、class B に static な NewInstance イベントでも足して、 B のコンストラクターでイベント起こせせばいい気はする。 特別なコード足したくないならそれは無理。
232 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:46:38 ] IEnumerable,yield,ToObservableで簡単に実装出来るけどな ただRx強力かつ難解なんで上級者でも中々手がない代物 複数人の開発じゃ手が出しにくい
233 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:47:31 ] ×ただRx強力かつ難解なんで上級者でも中々手がない代物 ○ただRxは強力かつ難解なんで上級者でも中々手が出せない代物
234 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 12:58:47 ] イベントベースの非同期プログラミングが面倒だから LINQ使ってDSLっぽくイベントハンドラを作ろうというやつだよね そんなに難しいの?
235 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:10:36 ] うーんどうだろ。 Rx が難しいっていうよりは、C# のイベント機能が簡単すぎる気もする。 あとは、やっぱドキュメント少ない。
236 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:22:00 ] using System; using System.Diagnostics; namespace OnCreate { class B { static event Action<Object, EventArgs> Created; public B() { OnCreated(new EventArgs()); } void OnCreated(EventArgs arg) { if (Created!=null) { Created(this, arg); } } static void Main(string[] args) { Created += CreateEventHandler; B b = new B(); } static void CreateEventHandler(Object obj, EventArgs arg) { Console.Out.WriteLine(new StackTrace().ToString()); } } } とか言ってみるテスト。スレッドセーフじゃないよなぁこれは。
237 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:24:37 ] Rxはおもしろ事が出来そうなんだけどドキュメント少ないし やっぱり非同期系は難しい Rxよりはいるけど.Net4の並列系も使いこなしてる人がすくないよね
238 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:26:15 ] ttp://sazameki.jp/programming/programmer-levels C#じゃないけど、それとなく当てはめてみて おまいらはどのレベルなの?
239 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:29:53 ] それ微妙に納得いかないのよねぇ。 レベル1とかのプログラミングの基礎知らなくても、 専門知識だけ持った人が専門知識を生かせるような簡単プログラミングの時代来ないとダメだ。
240 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:30:44 ] Rxでいう非同期はマルチスレッドの非同期じゃなくて 同期スタイルなら { キーが押されるまで待機(); A(); キーが押されるまで待機(); B(); }と書けるところを キーイベントを使った"非同期"スタイルだと状態を保持する変数を持たないといけなくて面倒だよねという話
241 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:32:31 ] >>238 それで行けば専門家レベルだな 基準がぬるいよ
242 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:36:00 ] >>240 その状態を保持しながら通知するから便利なんだろ? 簡単に言えばステートフルな非同期処理 だから強力なのさ
243 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:38:52 ] >>238 これの初級レベルでここや初心者用で質問したら ググれと言われて相手にされないだろwww と思ったけど大学4年以上いっても初級レベルの奴がゴロゴロいるよな…
244 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:49:26 ] >>236 void OnCreated(EventArgs arg) { var created = Created; if (created!=null) { created(this, arg); } } これでスレッドセーフ? 関係ないけどイベントハンドラ用のデリゲートを作りたくなかったらEventHandler<TEventArgs> それと引数なしのEventArgsはEventArgs.Emptyを使う
245 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:51:38 ] > var created = Created; そのテクニックどっかでみたな? どこだっけ?
246 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 13:59:09 ] >>244 >スレッドセーフじゃないよなぁこれは。
247 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:07:55 ] じゃあスレッドセーフにしてくれ ロックはなしで
248 名前:245 mailto:sage [2010/07/04(日) 14:19:44 ] あー思い出したわw MSDNだ、そうそうw ttp://msdn.microsoft.com/ja-jp/library/ms173168%28VS.80%29.aspx で、横からだけどスレッドセーフ public event EventHandler<EventArgs> Created = (_, __) => {} こいつはPropertyChangedなんかで使われるテクニックだわな (Week何とかつかえとかPrism使えとか言われてるけどw) まー、このケースで言えばこれでOKだろ さぁ、俺を褒め称えよ!w
249 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 14:26:00 ] 245△
250 名前:245 mailto:sage [2010/07/04(日) 14:34:44 ] >>249 なはw 律儀にあんがとさんw
251 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:10:24 ] すまん。>>244 の"スレッドセーフ?"と言ったのを、 >>236 の最後を見落としてて 揶揄してるんだと誤解してた。スレッドセーフにしてくれてたのね。
252 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:19:27 ] いいよ気にしないで 慣れてるから
253 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:29:03 ] >>244 これってなんでスレッドセーフになるの? 解説を聞きたい!
254 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:29:43 ] >>248 public event EventHandler<EventArgs> Created = (_, __) => {} これもなぜこれだけでスレッドセーフになるのかわからにぃ
255 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:32:20 ] >>253 null比較がスレッドセーフではないからローカル変数に一時待避でスレッドセーフ >>254 null比較しなくていいように前もって空イベント挿入でスレッドセーフ また、△ってしてもいいんだぜ!
256 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:36:57 ] >>253 if (Created!=null) { /* この間に別のスレッドがイベントを-=してCreateをnullにする可能性がある */ Created(this, arg);
257 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:43:18 ] はあ・・・また自演っぽいな
258 名前:fushianasan mailto:sage [2010/07/04(日) 16:46:58 ] 別に自演じゃないよ。 ホントにわかんないだけ。
259 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:50:31 ] >>256 var created = Created; Created-=********** --この時点でcreated -= ********* したのと同じことにはならないの? 参照型でしょイベントって。
260 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:58:33 ] add/removeしたら別オブジェクト a += b;は TDelegate c = (TDelegate)Delegate.Combine(a, b) a = c; の略で、このとき Object.ReferenceEquals(a, c)もObject.ReferenceEquals(b, c)もfalse
261 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:59:26 ] 君は var objA = new object(); var objB = objA; この時どうなると思ってんだ? ちゃんとポインタ(厳密には違うけど)はコピーされてるんだぞ
262 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 16:59:42 ] ならないの。デリゲートはStringと似たつくりになっていて、一度作成したインスタンスは変更できない。 イベントの実装はこうなってる private EventHandler _Created; public event EventHandler Created { [MethodImpl(MethodImplOptions.Synchronized)] add { _Created = (EventHandler)Delegate.Combine(_Created, value); } [MethodImpl(MethodImplOptions.Synchronized)] remove { _Created = (EventHandler)Delegate.Remove(_Created, value); } } [MethodImpl(MethodImplOptions.Synchronized)]のおかげでaddアクセサとremoveアクセサの呼び出しもスレッドセーフ。
263 名前:253,254,259(261は別人) mailto:sage [2010/07/04(日) 17:27:30 ] >>260 ,>>262 解説ありがとう。 参照型だけど毎回インスタンスが生成されるクラスなんですね。 理解しました。
264 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 17:39:38 ] 何読んだらそう言うのがわかるようになるの?
265 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 18:47:37 ] >>255 > null比較がスレッドセーフではないから そういう話じゃないような
266 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 19:01:53 ] >>265 うん、間違えたw
267 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 22:59:50 ] あほか。nullはスレッドセーフだわ、ボケ。
268 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 01:22:17 ] えっ?
269 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 01:44:53 ] >>244 実はECMAの仕様ではスレッドセーフではなかったり。
270 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 03:05:16 ] 完全なスレッドセーフなど存在しない
271 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 03:07:36 ] しかしlockを何個も書くのはかっこ悪いしめんどいんだが このオブジェクトは最初から排他仕様だからよろしくみたいなことは出来ないのか?
272 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 10:20:28 ] 比較自体はスレッドセーフじゃないからあながち間違いではないけどな
273 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 13:46:46 ] は?
274 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 14:22:32 ] >>272 だよな 間違ってないよな さすがだな
275 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 17:20:35 ] え? obj = nullは常にスレッドセーフだよ? あと obj = 0とobj = falseもさ 大丈夫?あぁネタかw
276 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 17:24:40 ] ほ?
277 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 18:27:47 ] それがどうであるかと>>244 がなぜスレッドセーフなのかはまるで関係ないよね。
278 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 18:57:15 ] >>275 obj = ""が抜けてるよ♪
279 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 22:54:43 ] >>277 >>244 がスレッドセーフであることの前提条件ではあるだろ
280 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 00:39:11 ] C#でDllMainって使うにはどうしたらいいかわかるひといる?
281 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 00:45:48 ] うん
282 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 00:49:24 ] >>281 マジで知ってるなら教えて下さいm(_ _)m
283 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 01:45:26 ] >>282 COMコンポーネントあたりでぐぐってみるといいよ サムネイル表示するのをWindows7に移植しようとC#で作ってみたが その時にそんな感じのことをした気がする 結局動かなくてテストに毎回再起動するのがまんどいので放置してるが
284 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 02:58:32 ] >>279 いや、そんなことないが。落ち着け。
285 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 03:03:12 ] とまぁ、えらそうに申しておりますが、俺も>>248 >>262 で初めて知り、 >>265 のツッコミをした程度のへっぽこです。 知らなかったらlockステートメント使ってたと思う。
286 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 03:30:32 ] んなこたあどうでもいいから>>282 に教えて上げなさい
287 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 03:39:33 ] 質問が曖昧すぎて回答できません
288 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 03:43:35 ] とりあえずクラスライブラリとかDllImportとか曖昧回答して上げなさい
289 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 03:46:10 ] ぐぐったら少ないけど情報出てくるね。
290 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 10:41:53 ] デッドロックの恐れがあるからCLR2.0以降では禁止されているという話らしいよ
291 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 12:48:59 ] 約束は破るためにあるっちゅうことやな
292 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 13:06:04 ] ところでこいつを見て欲しい。どう思う? ttp://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_22/extremecs_22_02.html Observerの変形と言えなくもない気がするが、状態オブジェクトが焼け太りしそうな悪寒。 実際んとこ、コレどんな場面で有効だと思う?
293 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 13:31:43 ] Observerとかいう次元じゃなくてアプリケーション全体の構造の話でしょ ステートが絶対に変化しないならいいんじゃないの 素直にやったら全部グローバル変数と変わらないから、テストのことを考えると IProductsStateとかインターフェイスで小分けすることになるだろうけど インターフェイス使っちゃうと後で変更がきかないよね
294 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 14:09:25 ] >「銀の弾丸」が存在しない以上、「ステート集約プログラミング」も銀の弾丸ではありえない。 >「ステート集約プログラミング」とは、あなたが“カオスの縁で踊る”ステップのバリエーションを増やすものであって、 >他のステップがなくてもよいと主張するものではない これだけでなんかオタ臭さをすげぇ感じるわ。
295 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 14:45:39 ] オタですがなにか?(-_-メ)
296 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 14:57:12 ] 状態オブジェクトの変更に弱い に尽きるな 筆者もそれはわかっててわざと誤魔化した書き方をしてるように見える 結局グローバル変数と一緒だわね
297 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 15:07:06 ] >>294 実戦で役立つなら考案者が厨二でも邪気眼でも構わんが、これは正直微妙な感じ 他の人も指摘してる通り、ちょっとヲサレなグローバル変数以外の何者でもない罠 とは言え、相互作用する状態が大量発生するような手合いだと、Observerパターンでも苦しいのは事実 なんかうまい方法はないもんか
298 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 15:28:57 ] なんかレベル低いことをわざわざ敷居高くして難しく書いてるだけな気がする。
299 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 16:35:04 ] >>280 msdn.microsoft.com/ja-jp/library/ms173266.aspx DllMainではマネージコードを実行してはいけないという制限があるので 「C#では不可能」というのが答えだな C++/CLIでそこだけネイティブコードのみで実装する必要がある
300 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:19:05 ] >>292 一つ前の記事の日本語でテスト名は書けというのは共感出来た。 ビジネスロジックのテスト名はそっちの方がわかりやすいしね。
301 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:36:41 ] だね
302 名前:292 mailto:sage [2010/07/06(火) 17:58:00 ] 皆THX. アレは文中でもある通り、DBの簡易代替に過ぎないんだろうな。 >>300 まあテスト名くらいは許容できるが、変数名を日本語で書くのは俺はあかん。 インテリセンス使えねえじゃん。
303 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:51:18 ] あかんね
304 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:13:21 ] 変数全部に/// <summary>と/// <remarks>を。
305 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:43:28 ] 日本語使うとインテリセンス使えないんだっけ? 使えたように思ったけど気のせいか
306 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:58:50 ] 変換して確定しないと候補が出てこないんだから、インテリセンスの意味なし。
307 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 20:01:19 ] 候補が出てこない訳じゃないだろう ピリオド打った後カーソルキー上下とかスクロールつまみ動かすとか まあインテリセンスのメリット低下は確かだが
308 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 20:10:16 ] そうだね
309 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 20:35:39 ] >>292 もう中身以前にい近づきたくない感じ
310 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 20:41:00 ] >>306-307 そこでイニシャル付き変数ですよ。k金額とかn日数とか。 というか、日本語の変数名を簡単に検索できるアドインを作ったら結構受けるかもな。
311 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:20:13 ] migemoを組み込むってことか?
312 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:23:28 ] 川俣に期待するなと・・・
313 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:36:21 ] なんで?
314 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:41:06 ] 匿名掲示板のレスにいちいち理由なんて期待するなと・・・
315 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:53:36 ] >>313 やってることがいろいろと可笑しすぎる。
316 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:15:34 ] MVVMのView側って何書くの? Command Binding出来ないDragDrop系とか?
317 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:23:00 ] Modelに依存しない処理。 Click系のコマンドでViewの操作のみならViewModelに書かずViewの中で完結する。 DragDropの事後処理等でModelに依存するコードがあるならその部分だけViewModelに書く。 無いならViewで完結。 間違ってもView内のハンドラでModelを触らない事。
318 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:23:18 ] 某スレに載ってたんですけど、 Jane Style 3.4 を使って2chに書込みをすると C:\\Document And Setting\【スズキ タロウ】 という部分の文字列までパケット送信してるらしいのですが、 誰か逆アセンブルして解析した方はいますか? ※前々から2ch専用ブラウザは怪しいと言われていたのですが・・・ 場合によっては警視庁ハイテク化にアプリとソースを引き渡します。
319 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:24:22 ] >>299 マジレス感謝m(_ _)m キーロガー作ってプロセスを隠蔽しようと思ったらやっぱC#じゃ無理か・・・ がんばってC++勉強します。。
320 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:25:11 ] >>317 MVPレベルキタコレ! 凄くわかりやすかったです サンクス
321 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:30:01 ] またこいつか
322 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:41:03 ] MVPと言えばいつも見てる高スキルのブロガーが落ちてたな かと思えば何もしてない人が選ばれたり… あれの選別基準がいまいちわからん
323 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:43:58 ] あれは、コミュニティを運営してる人、もしくはライター。 Most Valuable Professionalとは名ばかり。
324 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:45:15 ] むむむ… そう言う事か…
325 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:47:58 ] オレも以前受賞したことあるけど、雑誌に記事書いてたのが評価されたみたい。 他にはとくに活動してなかったし。
326 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:47:43 ] >>316 きっちりやれば、たいていの場合XAMLしか残らない。 C# 側は、テンプレ通りの InitializeComponent() のみに。 全く持ってその通りで、一部の Command Binding できないものとかのために しょうがなく View の分離コードに何か書く。
327 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:52:33 ] MVP の評価基準が、やっぱ露出度で計られるんで。 (「MS に対する貢献」って言い方されるけども、結局それは好意的な記事の露出。) コミュニティ運営と、編集の校正入るウェブ記事は評価高いっぽい。 ああ、あと、MS Connect へのフィードバック数とか、 フォーラムでの書き込みすうとか。 最終的に評価は米本社側でやるんで、 検索でどれくらいの位置、PV いくら、執筆本数いくら、会員数いくら とか、客観的な数字がある方が受けるみたい。