C#, C♯, C#相談室 Part60
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/06/27(日) 03:17:20前スレ
C#, C♯, C#相談室 Part59
http://pc12.2ch.net/test/read.cgi/tech/1274019232/
Visual C# 2010 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/
その他テンプレ>>1-5くらい
0153デフォルトの名無しさん
2010/07/02(金) 19:37:55だーけーど仕事で複数人で作業してる時、
不変クラス作れつったのに要求を満たしてなかったり
コンストラクタに10個以上も引数を連ねる奴は解雇されればいいと思うの
0154デフォルトの名無しさん
2010/07/02(金) 19:41:41普通、書店とかである在庫検索なんかはひらがなの並びは左から右だけど・・・。
0155デフォルトの名無しさん
2010/07/02(金) 20:25:39ん?そうかな。あ行で始まり右から左に並んでると思ったけどなー
0156デフォルトの名無しさん
2010/07/02(金) 20:44:190157デフォルトの名無しさん
2010/07/02(金) 21:18:13見てみたいなそのソース
自分の仕事では勘弁願いたいがw
0158デフォルトの名無しさん
2010/07/02(金) 22:29:35趣味ならそれでOK。
仕事なら限られた時艱の中で最高の答えを探すべき。
0159デフォルトの名無しさん
2010/07/02(金) 22:42:33その時代の直面している艱難。当面する難題。
難しい言葉知ってるな
0160デフォルトの名無しさん
2010/07/02(金) 23:44:38みたいな例も無くもない。
0161デフォルトの名無しさん
2010/07/02(金) 23:58:040162デフォルトの名無しさん
2010/07/03(土) 00:11:040163デフォルトの名無しさん
2010/07/03(土) 01:30:11おいおいおいまたこのページのコメントも全部消えたぞ。
まあ他人のコメントに対しての本人の回答コメントが消えたんだが。
こいつはいったい他人とのコミュニケーションをなんだと思ってんだよ…
0164デフォルトの名無しさん
2010/07/03(土) 01:38:01またその辺におそらく何様だとかどういう態度だとかそういう突っ込みコメントされて逃げたのかな。
コメント非承認で書き込まれたのが表示されない分、逆に殺到した可能性もあるかもな。
0165デフォルトの名無しさん
2010/07/03(土) 09:55:29さすがにちょっとイラっときた…
0166デフォルトの名無しさん
2010/07/03(土) 10:01:07「当Blogのコメント投稿について」のルールで不明なところの確認の質問だったんだぜ。
もうこの人はまともにコミュニケーションをとるつもりなどないとあきらめたわ。
スレ違いすまん、ちょっと書きたくなった。
0167デフォルトの名無しさん
2010/07/03(土) 12:02:400168デフォルトの名無しさん
2010/07/03(土) 13:21:10君たち、その批判的視線を少しは自分にも向けたらどうなの。
端的にいってそうとう「気色の悪い」人間だと思うぞ君らはw
いつも不思議なんだが、こういう奴らってよくそういう薄気味悪い自分に耐えられるよな。
0169デフォルトの名無しさん
2010/07/03(土) 13:31:010170デフォルトの名無しさん
2010/07/03(土) 14:20:27PasswordBoxがバインド出来ないから凄くめんどくさい…
0171デフォルトの名無しさん
2010/07/03(土) 15:20:350172デフォルトの名無しさん
2010/07/03(土) 15:26:27ならこれどーすんの?
バインド出来なければMVVMにならないじゃん…
0173デフォルトの名無しさん
2010/07/03(土) 16:00:400174デフォルトの名無しさん
2010/07/03(土) 17:40:06DLLインジェクションを使えばいけそうなのはわかったんだが…
0175デフォルトの名無しさん
2010/07/03(土) 17:43:270176デフォルトの名無しさん
2010/07/03(土) 18:08:15なんだこの厨房丸出しの質問は
C#で作られたDLLってネイティブコードで動いているプロセスにそのまま注入できるのか?それなら普通のセオリー通りにやればいいんじゃね。
0177デフォルトの名無しさん
2010/07/03(土) 19:07:20時間がないなら2chみてんじゃねーw
>>176
具体的な手順頼む。
ネットで調べたらDLLインジェクション自体はサンプルが落ちててできそうなんだ
だが、exeのプロセス隠蔽とDLLインジェクションが自分の中でうまく繋がらなくて
0178デフォルトの名無しさん
2010/07/03(土) 19:27:10DLLインジェクションというのは、他のプロセスにDLLをインジェクション(注入)して、そのDLLを実行させるというだけの技術。
実行されているDLLはWindows標準のタスクマネージャーには表れないから、DLLを注入して他のプロセスに実行させることで、結果的にプロセスを隠蔽しているようになるというだけの話。
0179デフォルトの名無しさん
2010/07/03(土) 19:28:13バインドはMVVMには必須じゃない。普通にイベントハンドラで書け。
MVVMのキモはViewModelがViewに依存しないことであって
それさえ守られてればViewのコードビハインド書いても問題はない。
0180デフォルトの名無しさん
2010/07/03(土) 19:30:56レスサンクス
explorer.exeにAというDLLを注入した場合、A.dllで何か処理を書かないといけないと思うんだが
普通のexeみたいに何か処理をするdllを作成するのってできるの?
0181デフォルトの名無しさん
2010/07/03(土) 19:35:00依存しないからこそViewModelの差し替えでViewの挙動を容易に変える事ができるんだよね?
イベントハンドラでデータを操作する内容をViewに書いたらMVVMの形式が崩れてしまうし
ViewのハンドラからViewModelに橋渡しするとなるとDataContextの差し替えだけではすまなくなり容易性が失われる(Viewの内容を知っていないといけない)
イベントハンドラ書いたらMVVMじゃ無くなりまするですよ…
0182デフォルトの名無しさん
2010/07/03(土) 19:36:32> 普通のexeみたいに何か処理をするdllを作成するのってできるの?
でなきゃDLLが存在する意味がないだろ。
0183デフォルトの名無しさん
2010/07/03(土) 19:38:48C#でクラスライブラリを作ったりするとdllで出力されるのはわかるんだが
dll単体で処理を行うのは無理じゃ?
0184デフォルトの名無しさん
2010/07/03(土) 19:42:320185デフォルトの名無しさん
2010/07/03(土) 19:43:140186デフォルトの名無しさん
2010/07/03(土) 19:45:39いやそもそもViewModelの差し替えなんか不可能。
ViewModelはViewの抽象化だから、
ViewModelを差し替えるのは例えればクラスの基底クラスを差し替えるようなもの。
差し替えられるのはViewの方。Viewのテストが面倒だからViewModelで抽象化して
ViewModelを単体テストできるようにしましょうっていうアイデア。
0187デフォルトの名無しさん
2010/07/03(土) 19:55:02うそーん!
共通のWindowで共通のコントロール
ただしデータが微妙に違ってそれによる制約や検証が微妙に違うものが複数ある
そしてModelは同一又はプロパティ数が同一
こう言う事って結構あるよね?
んで
View(共通のコントロール)
ViewModel(検証とCommandによる操作、及びレガシーModelの包括)
で分けてViewModelを差し替える事で使い回ししてるよ
でもここで出てきたのがView配置のPasswordBoxちゃん
こいつがDependencyObjectじゃないとBindさせねぇ〜とか言っちゃう
んで、これをどうViewModeで吸収?してModelに渡すのかがググってもさっぱりわかんない
お手上げちゃーんなのです
0188デフォルトの名無しさん
2010/07/03(土) 19:56:41回答出来ないなら黙ってていいよ
0189デフォルトの名無しさん
2010/07/03(土) 19:58:490190デフォルトの名無しさん
2010/07/03(土) 20:03:59仕込みたいんだが、どうすればいい?
プロセス隠蔽ができないとタスクマネージャ開いてばれるかもしれんし。
0191デフォルトの名無しさん
2010/07/03(土) 20:08:04そんな方法はない。
仮にあったとして、そんなセキュリティーホールが放置されてると思うか?
0192デフォルトの名無しさん
2010/07/03(土) 20:09:30仕込むの自体は手動でやるからいいんだが、
プロセスの隠蔽は普通にできるだろ?
0193デフォルトの名無しさん
2010/07/03(土) 20:11:03タスクマネージャのタスク一覧を直接弄って消すのは10年前のウィルスですらやってる事
今はサービス、他社のタスク一覧まで消す奴もある
0194デフォルトの名無しさん
2010/07/03(土) 20:11:450195デフォルトの名無しさん
2010/07/03(土) 20:17:16おまい、天才だな・・
サンクス
0196デフォルトの名無しさん
2010/07/03(土) 20:18:25そいつの心臓が弱くていきなり出たメッセージに驚いてポックリ逝ったら責任とれるのか?あ?
0197デフォルトの名無しさん
2010/07/03(土) 20:18:51本人に直接言え。
0198デフォルトの名無しさん
2010/07/03(土) 20:19:09スキルのねぇカスはひっこんでろ
0199デフォルトの名無しさん
2010/07/03(土) 20:20:330201デフォルトの名無しさん
2010/07/03(土) 20:23:20確かにタスクスケジューラなんてまず使わないけどな。
俺に言えるのは、100%確実な方法はないってことだな。
パソコンの操作を全部記録するようなソフトを入れてないとも限らないし。
0202デフォルトの名無しさん
2010/07/03(土) 20:25:29普通、タスクスケジューラなんて使わないよな?
ちょっと不安になってきたw
操作を記録するソフト入ってたら無理だなw
0203デフォルトの名無しさん
2010/07/03(土) 20:28:44スタートアップに置いといてもばれないんじゃね?
0204デフォルトの名無しさん
2010/07/03(土) 20:31:04誕生日に起動した時だけダイアログを出して他のタイミングは即座に終了して消えるようにする。
0205デフォルトの名無しさん
2010/07/03(土) 20:33:250206デフォルトの名無しさん
2010/07/03(土) 20:34:350207デフォルトの名無しさん
2010/07/03(土) 20:35:44事実は事実
0208デフォルトの名無しさん
2010/07/03(土) 20:43:33誕生日はお前以外の相手と一日中デートしててPCを起動しない可能性は?
カーチャンとかだったらごめん
0209デフォルトの名無しさん
2010/07/03(土) 20:51:35そりゃMVVMじゃなくて君が開発した別のパターンだ。
MVVMに関するMSの記事のどこを見てもそんなことは書いてない。
もちろんWPFはそのパターンを公式にはサポートしてない。頑張るのは君だ。
0210デフォルトの名無しさん
2010/07/03(土) 21:00:56えー
だってMVVMのパターンの概要を見るとViewとViewModelの分離の事は書かれてるよね
この疎結合の副作用を利用して差し替えをしてるだけであって完全マイルールってわけじゃないよー
それにイベントハンドラを書くのは結合度の観点からも勧められないと著名人達は口を揃えて言ってるよん
誰かAdorner何かを使ってTextBoxをマスク処理してるコードを格好良くみせてくれないかなーとか期待してたんだけど無理かなぁ
0211デフォルトの名無しさん
2010/07/03(土) 23:16:45仲介してもらうとかできない?
0212デフォルトの名無しさん
2010/07/03(土) 23:20:00ググるとそのやり方をやってる風なコメントがあるよねー
んー、やっぱりその方法がいいのかな
と言う前に、やってみるか!
0213デフォルトの名無しさん
2010/07/03(土) 23:45:58うむ。そうするのじゃ
0214デフォルトの名無しさん
2010/07/04(日) 00:08:00UserControl作ったって同じことでしょ
0215デフォルトの名無しさん
2010/07/04(日) 00:09:260216デフォルトの名無しさん
2010/07/04(日) 00:10:070217デフォルトの名無しさん
2010/07/04(日) 00:13:290218デフォルトの名無しさん
2010/07/04(日) 00:54:11実際のバインディングの動作には全く関係ないけどね
公式サンプルのPrismはViewがViewModelをインターフェイス経由で露に参照してる
差し替えたりしてはいないけど、バインドするVMのメンバは基本的にインターフェイスに宣言されてる
0219デフォルトの名無しさん
2010/07/04(日) 01:04:25RegisterTypeでIDataService何かのサービスをレジストしたりするのはよくやるが
0220デフォルトの名無しさん
2010/07/04(日) 01:44:52認識してて、そうなるとインタフェース必須だと思ってるんだけど違うの?
0221デフォルトの名無しさん
2010/07/04(日) 02:07:06RoutedUICommand一つとってもViewModel側にstaticで定義しないと駄目なんだぞ?
0222デフォルトの名無しさん
2010/07/04(日) 02:08:56って意味で。
そういう感じで作ればXAML共通で、VMの実処理だけ差し替えられるよな?と。
0223デフォルトの名無しさん
2010/07/04(日) 02:10:110224デフォルトの名無しさん
2010/07/04(日) 02:22:57いくつかパターンがあるんで、それをアダプタ化して差し替え可能にしてるって
ことじゃね?>>187 は。
0225デフォルトの名無しさん
2010/07/04(日) 02:25:420226デフォルトの名無しさん
2010/07/04(日) 02:48:34そこでBクラスがAクラスで実体が作られたという事を知ることはできないでしょうか?
Bクラスのコンストラクタで作られたクラスを取得したいです。
引数にでもして入力すればいいとも思うのですが自動でとれたら便利だと思いました。お願いいたします。
0227デフォルトの名無しさん
2010/07/04(日) 02:49:200228デフォルトの名無しさん
2010/07/04(日) 02:54:04これ使ってObserverを使う
0229デフォルトの名無しさん
2010/07/04(日) 07:17:080230デフォルトの名無しさん
2010/07/04(日) 11:07:45A側にもB側にも特別なコードを追加せずにnewを検知しようと思ったら
ILのリライトしかないと思うけどそんなことやってくれるの?
0231デフォルトの名無しさん
2010/07/04(日) 12:07:23Rx 進めてる時点で、>>229 はそういうイベントコード書けって事だと思うけど。
ぶっちゃけ、それなら、class B に static な NewInstance イベントでも足して、
B のコンストラクターでイベント起こせせばいい気はする。
特別なコード足したくないならそれは無理。
0232デフォルトの名無しさん
2010/07/04(日) 12:46:38ただRx強力かつ難解なんで上級者でも中々手がない代物
複数人の開発じゃ手が出しにくい
0233デフォルトの名無しさん
2010/07/04(日) 12:47:31○ただRxは強力かつ難解なんで上級者でも中々手が出せない代物
0234デフォルトの名無しさん
2010/07/04(日) 12:58:47LINQ使ってDSLっぽくイベントハンドラを作ろうというやつだよね
そんなに難しいの?
0235デフォルトの名無しさん
2010/07/04(日) 13:10:36Rx が難しいっていうよりは、C# のイベント機能が簡単すぎる気もする。
あとは、やっぱドキュメント少ない。
0236デフォルトの名無しさん
2010/07/04(日) 13:22:00using 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());
}
}
}
とか言ってみるテスト。スレッドセーフじゃないよなぁこれは。
0237デフォルトの名無しさん
2010/07/04(日) 13:24:37やっぱり非同期系は難しい
Rxよりはいるけど.Net4の並列系も使いこなしてる人がすくないよね
0238デフォルトの名無しさん
2010/07/04(日) 13:26:15C#じゃないけど、それとなく当てはめてみて
おまいらはどのレベルなの?
0239デフォルトの名無しさん
2010/07/04(日) 13:29:53レベル1とかのプログラミングの基礎知らなくても、
専門知識だけ持った人が専門知識を生かせるような簡単プログラミングの時代来ないとダメだ。
0240デフォルトの名無しさん
2010/07/04(日) 13:30:44同期スタイルなら { キーが押されるまで待機(); A(); キーが押されるまで待機(); B(); }と書けるところを
キーイベントを使った"非同期"スタイルだと状態を保持する変数を持たないといけなくて面倒だよねという話
0241デフォルトの名無しさん
2010/07/04(日) 13:32:31それで行けば専門家レベルだな
基準がぬるいよ
0242デフォルトの名無しさん
2010/07/04(日) 13:36:00その状態を保持しながら通知するから便利なんだろ?
簡単に言えばステートフルな非同期処理
だから強力なのさ
0243デフォルトの名無しさん
2010/07/04(日) 13:38:52これの初級レベルでここや初心者用で質問したら
ググれと言われて相手にされないだろwww
と思ったけど大学4年以上いっても初級レベルの奴がゴロゴロいるよな…
0244デフォルトの名無しさん
2010/07/04(日) 13:49:26void OnCreated(EventArgs arg) {
var created = Created;
if (created!=null) {
created(this, arg);
}
}
これでスレッドセーフ?
関係ないけどイベントハンドラ用のデリゲートを作りたくなかったらEventHandler<TEventArgs>
それと引数なしのEventArgsはEventArgs.Emptyを使う
0245デフォルトの名無しさん
2010/07/04(日) 13:51:38そのテクニックどっかでみたな?
どこだっけ?
0246デフォルトの名無しさん
2010/07/04(日) 13:59:09>スレッドセーフじゃないよなぁこれは。
0247デフォルトの名無しさん
2010/07/04(日) 14:07:55ロックはなしで
0248245
2010/07/04(日) 14:19:44MSDNだ、そうそうw
ttp://msdn.microsoft.com/ja-jp/library/ms173168%28VS.80%29.aspx
で、横からだけどスレッドセーフ
public event EventHandler<EventArgs> Created = (_, __) => {}
こいつはPropertyChangedなんかで使われるテクニックだわな
(Week何とかつかえとかPrism使えとか言われてるけどw)
まー、このケースで言えばこれでOKだろ
さぁ、俺を褒め称えよ!w
0249デフォルトの名無しさん
2010/07/04(日) 14:26:000251デフォルトの名無しさん
2010/07/04(日) 16:10:24揶揄してるんだと誤解してた。スレッドセーフにしてくれてたのね。
0252デフォルトの名無しさん
2010/07/04(日) 16:19:27慣れてるから
■ このスレッドは過去ログ倉庫に格納されています