トップページ⇒tech
986コメント277KB

C#, C♯, C#相談室 Part60

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/06/27(日) 03:17:20
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
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
>>150
普通、書店とかである在庫検索なんかはひらがなの並びは左から右だけど・・・。
0155デフォルトの名無しさん2010/07/02(金) 20:25:39
>>154
ん?そうかな。あ行で始まり右から左に並んでると思ったけどなー
0156デフォルトの名無しさん2010/07/02(金) 20:44:19
50音表は縦書きだから右から左でおk
0157デフォルトの名無しさん2010/07/02(金) 21:18:13
>>153
見てみたいなそのソース
自分の仕事では勘弁願いたいがw
0158デフォルトの名無しさん2010/07/02(金) 22:29:35
>>152
趣味ならそれでOK。
仕事なら限られた時艱の中で最高の答えを探すべき。
0159デフォルトの名無しさん2010/07/02(金) 22:42:33
時艱
その時代の直面している艱難。当面する難題。

難しい言葉知ってるな
0160デフォルトの名無しさん2010/07/02(金) 23:44:38
まあ、十中九十は分析が足りてないんだろうけど DateTime とか Binding コンストラクタ
みたいな例も無くもない。
0161デフォルトの名無しさん2010/07/02(金) 23:58:04
MVVMフレームワーク使うと凍結クラスつーかイミュータブルなクラスを作る事が殆ど無くなったな
0162デフォルトの名無しさん2010/07/03(土) 00:11:04
GUI はimmutableと相性悪い気がする。
0163デフォルトの名無しさん2010/07/03(土) 01:30:11
>>45
おいおいおいまたこのページのコメントも全部消えたぞ。
まあ他人のコメントに対しての本人の回答コメントが消えたんだが。

こいつはいったい他人とのコミュニケーションをなんだと思ってんだよ…
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:40
謝るくらいなら書くなよw
0168デフォルトの名無しさん2010/07/03(土) 13:21:10
お節介かもしれんが一応一言。
君たち、その批判的視線を少しは自分にも向けたらどうなの。
端的にいってそうとう「気色の悪い」人間だと思うぞ君らはw
いつも不思議なんだが、こういう奴らってよくそういう薄気味悪い自分に耐えられるよな。
0169デフォルトの名無しさん2010/07/03(土) 13:31:01
鏡で見慣れてるからな
0170デフォルトの名無しさん2010/07/03(土) 14:20:27
WPFのTextBoxのマスク処理ってどうやるの?
PasswordBoxがバインド出来ないから凄くめんどくさい…
0171デフォルトの名無しさん2010/07/03(土) 15:20:35
できない
0172デフォルトの名無しさん2010/07/03(土) 15:26:27
えええええええ
ならこれどーすんの?
バインド出来なければMVVMにならないじゃん…
0173デフォルトの名無しさん2010/07/03(土) 16:00:40
まだまだ発展途上だからね
0174デフォルトの名無しさん2010/07/03(土) 17:40:06
C#でプロセスの隠蔽をしたいんだが、誰か詳しい人説明を頼む。
DLLインジェクションを使えばいけそうなのはわかったんだが…
0175デフォルトの名無しさん2010/07/03(土) 17:43:27
詳しい人だけど時間がないので説明しない
0176デフォルトの名無しさん2010/07/03(土) 18:08:15
>>174
なんだこの厨房丸出しの質問は

C#で作られたDLLってネイティブコードで動いているプロセスにそのまま注入できるのか?それなら普通のセオリー通りにやればいいんじゃね。
0177デフォルトの名無しさん2010/07/03(土) 19:07:20
>>175
時間がないなら2chみてんじゃねーw

>>176
具体的な手順頼む。
ネットで調べたらDLLインジェクション自体はサンプルが落ちててできそうなんだ
だが、exeのプロセス隠蔽とDLLインジェクションが自分の中でうまく繋がらなくて
0178デフォルトの名無しさん2010/07/03(土) 19:27:10
>>177
DLLインジェクションというのは、他のプロセスにDLLをインジェクション(注入)して、そのDLLを実行させるというだけの技術。
実行されているDLLはWindows標準のタスクマネージャーには表れないから、DLLを注入して他のプロセスに実行させることで、結果的にプロセスを隠蔽しているようになるというだけの話。
0179デフォルトの名無しさん2010/07/03(土) 19:28:13
>>172
バインドはMVVMには必須じゃない。普通にイベントハンドラで書け。
MVVMのキモはViewModelがViewに依存しないことであって
それさえ守られてればViewのコードビハインド書いても問題はない。
0180デフォルトの名無しさん2010/07/03(土) 19:30:56
>>178
レスサンクス

explorer.exeにAというDLLを注入した場合、A.dllで何か処理を書かないといけないと思うんだが
普通のexeみたいに何か処理をするdllを作成するのってできるの?
0181デフォルトの名無しさん2010/07/03(土) 19:35:00
>>179
依存しないからこそViewModelの差し替えでViewの挙動を容易に変える事ができるんだよね?
イベントハンドラでデータを操作する内容をViewに書いたらMVVMの形式が崩れてしまうし
ViewのハンドラからViewModelに橋渡しするとなるとDataContextの差し替えだけではすまなくなり容易性が失われる(Viewの内容を知っていないといけない)
イベントハンドラ書いたらMVVMじゃ無くなりまするですよ…
0182デフォルトの名無しさん2010/07/03(土) 19:36:32
>>180
> 普通のexeみたいに何か処理をするdllを作成するのってできるの?
でなきゃDLLが存在する意味がないだろ。
0183デフォルトの名無しさん2010/07/03(土) 19:38:48
>>182
C#でクラスライブラリを作ったりするとdllで出力されるのはわかるんだが
dll単体で処理を行うのは無理じゃ?
0184デフォルトの名無しさん2010/07/03(土) 19:42:32
わかんないならあきらめろよ・・・。
0185デフォルトの名無しさん2010/07/03(土) 19:43:14
やってることはこっちだが、理解がふらっとの方に行ったほうがいいレベルだな
0186デフォルトの名無しさん2010/07/03(土) 19:45:39
>>181
いやそもそもViewModelの差し替えなんか不可能。
ViewModelはViewの抽象化だから、
ViewModelを差し替えるのは例えればクラスの基底クラスを差し替えるようなもの。
差し替えられるのはViewの方。Viewのテストが面倒だからViewModelで抽象化して
ViewModelを単体テストできるようにしましょうっていうアイデア。
0187デフォルトの名無しさん2010/07/03(土) 19:55:02
>>186
うそーん!
共通のWindowで共通のコントロール
ただしデータが微妙に違ってそれによる制約や検証が微妙に違うものが複数ある
そしてModelは同一又はプロパティ数が同一
こう言う事って結構あるよね?
んで
View(共通のコントロール)
ViewModel(検証とCommandによる操作、及びレガシーModelの包括)
で分けてViewModelを差し替える事で使い回ししてるよ

でもここで出てきたのがView配置のPasswordBoxちゃん
こいつがDependencyObjectじゃないとBindさせねぇ〜とか言っちゃう
んで、これをどうViewModeで吸収?してModelに渡すのかがググってもさっぱりわかんない
お手上げちゃーんなのです
0188デフォルトの名無しさん2010/07/03(土) 19:56:41
>>184>>185
回答出来ないなら黙ってていいよ
0189デフォルトの名無しさん2010/07/03(土) 19:58:49
バインドしてOKみたいなもんはTextBoxでいいよ
0190デフォルトの名無しさん2010/07/03(土) 20:03:59
誕生日になるとメッセージを表示するプログラムを本人に築かれないように
仕込みたいんだが、どうすればいい?
プロセス隠蔽ができないとタスクマネージャ開いてばれるかもしれんし。
0191デフォルトの名無しさん2010/07/03(土) 20:08:04
>>190
そんな方法はない。
仮にあったとして、そんなセキュリティーホールが放置されてると思うか?
0192デフォルトの名無しさん2010/07/03(土) 20:09:30
>>191
仕込むの自体は手動でやるからいいんだが、
プロセスの隠蔽は普通にできるだろ?
0193デフォルトの名無しさん2010/07/03(土) 20:11:03
隠蔽はあるだろ…
タスクマネージャのタスク一覧を直接弄って消すのは10年前のウィルスですらやってる事
今はサービス、他社のタスク一覧まで消す奴もある
0194デフォルトの名無しさん2010/07/03(土) 20:11:45
常駐させずにタスクスケジューラに登録しとけ
0195デフォルトの名無しさん2010/07/03(土) 20:17:16
>>194
おまい、天才だな・・
サンクス
0196デフォルトの名無しさん2010/07/03(土) 20:18:25
>>190
そいつの心臓が弱くていきなり出たメッセージに驚いてポックリ逝ったら責任とれるのか?あ?
0197デフォルトの名無しさん2010/07/03(土) 20:18:51
>>190
本人に直接言え。
0198デフォルトの名無しさん2010/07/03(土) 20:19:09
>>196
スキルのねぇカスはひっこんでろ
0199デフォルトの名無しさん2010/07/03(土) 20:20:33
それはキモいというか、普通にそんなことされたら嫌だろよ。
02001962010/07/03(土) 20:22:38
>>198
176も178も私ですけどスキルがなくてすいませんねえ
0201デフォルトの名無しさん2010/07/03(土) 20:23:20
タスクマネージャの心配はするのにタスクスケジューラはOKってどういうことだよw
確かにタスクスケジューラなんてまず使わないけどな。

俺に言えるのは、100%確実な方法はないってことだな。
パソコンの操作を全部記録するようなソフトを入れてないとも限らないし。
0202デフォルトの名無しさん2010/07/03(土) 20:25:29
>>201
普通、タスクスケジューラなんて使わないよな?
ちょっと不安になってきたw
操作を記録するソフト入ってたら無理だなw
0203デフォルトの名無しさん2010/07/03(土) 20:28:44
勝手にアプリを入れさせるようなレベルなんだし、
スタートアップに置いといてもばれないんじゃね?
0204デフォルトの名無しさん2010/07/03(土) 20:31:04
スタートアップに入れておけ。
誕生日に起動した時だけダイアログを出して他のタイミングは即座に終了して消えるようにする。
0205デフォルトの名無しさん2010/07/03(土) 20:33:25
スタートアップはたまに覗いたりしないか?
0206デフォルトの名無しさん2010/07/03(土) 20:34:35
svchost.exeって名前にしとけ
0207デフォルトの名無しさん2010/07/03(土) 20:35:44
>>200
事実は事実
0208デフォルトの名無しさん2010/07/03(土) 20:43:33
>>190
誕生日はお前以外の相手と一日中デートしててPCを起動しない可能性は?
カーチャンとかだったらごめん
0209デフォルトの名無しさん2010/07/03(土) 20:51:35
>>187
そりゃMVVMじゃなくて君が開発した別のパターンだ。
MVVMに関するMSの記事のどこを見てもそんなことは書いてない。
もちろんWPFはそのパターンを公式にはサポートしてない。頑張るのは君だ。
0210デフォルトの名無しさん2010/07/03(土) 21:00:56
>>209
えー
だってMVVMのパターンの概要を見るとViewとViewModelの分離の事は書かれてるよね
この疎結合の副作用を利用して差し替えをしてるだけであって完全マイルールってわけじゃないよー
それにイベントハンドラを書くのは結合度の観点からも勧められないと著名人達は口を揃えて言ってるよん

誰かAdorner何かを使ってTextBoxをマスク処理してるコードを格好良くみせてくれないかなーとか期待してたんだけど無理かなぁ
0211デフォルトの名無しさん2010/07/03(土) 23:16:45
WPFしらんのでテキトーだけど、UserControlをアダプタとしてPasswordBoxのせて、
仲介してもらうとかできない?
0212デフォルトの名無しさん2010/07/03(土) 23:20:00
>>211
ググるとそのやり方をやってる風なコメントがあるよねー
んー、やっぱりその方法がいいのかな
と言う前に、やってみるか!
0213デフォルトの名無しさん2010/07/03(土) 23:45:58
>>212
うむ。そうするのじゃ
0214デフォルトの名無しさん2010/07/04(日) 00:08:00
MVVMにこだわるんだったらそのUserControlのためにまた別のViewModelが必要だから
UserControl作ったって同じことでしょ
0215デフォルトの名無しさん2010/07/04(日) 00:09:26
おぬし、ViewModelを勘違いしとるぞい
0216デフォルトの名無しさん2010/07/04(日) 00:10:07
というと?
0217デフォルトの名無しさん2010/07/04(日) 00:13:29
なんで別のViewModelが必要と思ったの?
0218デフォルトの名無しさん2010/07/04(日) 00:54:11
ViewModelを差し替えたいならせめてインターフェイス通すべきだろ
実際のバインディングの動作には全く関係ないけどね
公式サンプルのPrismはViewがViewModelをインターフェイス経由で露に参照してる
差し替えたりしてはいないけど、バインドするVMのメンバは基本的にインターフェイスに宣言されてる
0219デフォルトの名無しさん2010/07/04(日) 01:04:25
Prismをかなり使い倒してるんだがそんなインターフェイスでViewとViewModelを繋いでるサンプルなんてあるか?
RegisterTypeでIDataService何かのサービスをレジストしたりするのはよくやるが

0220デフォルトの名無しさん2010/07/04(日) 01:44:52
素人としては、ViewModel をストラテジパターンの要領で差し替えて使ってると
認識してて、そうなるとインタフェース必須だと思ってるんだけど違うの?
0221デフォルトの名無しさん2010/07/04(日) 02:07:06
Prismにしろ何にしろViewModelにインターフェイスは使えないだろjk
RoutedUICommand一つとってもViewModel側にstaticで定義しないと駄目なんだぞ?
0222デフォルトの名無しさん2010/07/04(日) 02:08:56
あ、インタフェースって言ってもViewModelから呼ばれるストラテジのインタフェース
って意味で。
そういう感じで作ればXAML共通で、VMの実処理だけ差し替えられるよな?と。
0223デフォルトの名無しさん2010/07/04(日) 02:10:11
つまりどういう事だってばよ!?
0224デフォルトの名無しさん2010/07/04(日) 02:22:57
つまり、固定のViewModel と、固定の Model の間で検証したりするロジックが
いくつかパターンがあるんで、それをアダプタ化して差し替え可能にしてるって
ことじゃね?>>187 は。
0225デフォルトの名無しさん2010/07/04(日) 02:25:42
とか思ったら PasswordBox 悩む必要無さそうだな、それじゃw
0226デフォルトの名無しさん2010/07/04(日) 02:48:34
BというクラスがあったとしてAクラスで A hoge = new A(); というように実体が作られたとします。
そこでBクラスがAクラスで実体が作られたという事を知ることはできないでしょうか?

Bクラスのコンストラクタで作られたクラスを取得したいです。
引数にでもして入力すればいいとも思うのですが自動でとれたら便利だと思いました。お願いいたします。
0227デフォルトの名無しさん2010/07/04(日) 02:49:20
A hoge = new A(); は B hoge = new B(); です、失礼しました
0228デフォルトの名無しさん2010/07/04(日) 02:54:04
ttp://msdn.microsoft.com/en-us/devlabs/ee794896.aspx
これ使ってObserverを使う
0229デフォルトの名無しさん2010/07/04(日) 07:17:08
どうもどうも〜
0230デフォルトの名無しさん2010/07/04(日) 11:07:45
Rxってイベントベースじゃなかったっけ?
A側にもB側にも特別なコードを追加せずにnewを検知しようと思ったら
ILのリライトしかないと思うけどそんなことやってくれるの?
0231デフォルトの名無しさん2010/07/04(日) 12:07:23
>>230
Rx 進めてる時点で、>>229 はそういうイベントコード書けって事だと思うけど。
ぶっちゃけ、それなら、class B に static な NewInstance イベントでも足して、
B のコンストラクターでイベント起こせせばいい気はする。

特別なコード足したくないならそれは無理。
0232デフォルトの名無しさん2010/07/04(日) 12:46:38
IEnumerable,yield,ToObservableで簡単に実装出来るけどな
ただRx強力かつ難解なんで上級者でも中々手がない代物
複数人の開発じゃ手が出しにくい
0233デフォルトの名無しさん2010/07/04(日) 12:47:31
×ただRx強力かつ難解なんで上級者でも中々手がない代物
○ただRxは強力かつ難解なんで上級者でも中々手が出せない代物
0234デフォルトの名無しさん2010/07/04(日) 12:58:47
イベントベースの非同期プログラミングが面倒だから
LINQ使ってDSLっぽくイベントハンドラを作ろうというやつだよね
そんなに難しいの?
0235デフォルトの名無しさん2010/07/04(日) 13:10:36
うーんどうだろ。
Rx が難しいっていうよりは、C# のイベント機能が簡単すぎる気もする。
あとは、やっぱドキュメント少ない。
0236デフォルトの名無しさん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());
}
}
}
とか言ってみるテスト。スレッドセーフじゃないよなぁこれは。
0237デフォルトの名無しさん2010/07/04(日) 13:24:37
Rxはおもしろ事が出来そうなんだけどドキュメント少ないし
やっぱり非同期系は難しい
Rxよりはいるけど.Net4の並列系も使いこなしてる人がすくないよね
0238デフォルトの名無しさん2010/07/04(日) 13:26:15
ttp://sazameki.jp/programming/programmer-levels
C#じゃないけど、それとなく当てはめてみて
おまいらはどのレベルなの?
0239デフォルトの名無しさん2010/07/04(日) 13:29:53
それ微妙に納得いかないのよねぇ。

レベル1とかのプログラミングの基礎知らなくても、
専門知識だけ持った人が専門知識を生かせるような簡単プログラミングの時代来ないとダメだ。
0240デフォルトの名無しさん2010/07/04(日) 13:30:44
Rxでいう非同期はマルチスレッドの非同期じゃなくて
同期スタイルなら { キーが押されるまで待機(); A(); キーが押されるまで待機(); B(); }と書けるところを
キーイベントを使った"非同期"スタイルだと状態を保持する変数を持たないといけなくて面倒だよねという話
0241デフォルトの名無しさん2010/07/04(日) 13:32:31
>>238
それで行けば専門家レベルだな
基準がぬるいよ
0242デフォルトの名無しさん2010/07/04(日) 13:36:00
>>240
その状態を保持しながら通知するから便利なんだろ?
簡単に言えばステートフルな非同期処理
だから強力なのさ
0243デフォルトの名無しさん2010/07/04(日) 13:38:52
>>238
これの初級レベルでここや初心者用で質問したら
ググれと言われて相手にされないだろwww
と思ったけど大学4年以上いっても初級レベルの奴がゴロゴロいるよな…
0244デフォルトの名無しさん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を使う
0245デフォルトの名無しさん2010/07/04(日) 13:51:38
> var created = Created;
そのテクニックどっかでみたな?
どこだっけ?
0246デフォルトの名無しさん2010/07/04(日) 13:59:09
>>244
>スレッドセーフじゃないよなぁこれは。
0247デフォルトの名無しさん2010/07/04(日) 14:07:55
じゃあスレッドセーフにしてくれ
ロックはなしで
02482452010/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
0249デフォルトの名無しさん2010/07/04(日) 14:26:00
245△
02502452010/07/04(日) 14:34:44
>>249
なはw
律儀にあんがとさんw
0251デフォルトの名無しさん2010/07/04(日) 16:10:24
すまん。>>244 の"スレッドセーフ?"と言ったのを、 >>236 の最後を見落としてて
揶揄してるんだと誤解してた。スレッドセーフにしてくれてたのね。
0252デフォルトの名無しさん2010/07/04(日) 16:19:27
いいよ気にしないで
慣れてるから
■ このスレッドは過去ログ倉庫に格納されています