[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/16 23:53 / Filesize : 244 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part46



1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part45
pc11.2ch.net/test/read.cgi/tech/1200911737/

その他テンプレ>>2-5くらい

680 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 21:57:45 ]
>>675

コレって変だと思うのはオレだけ?



681 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:03:44 ]
お前だけ
Comparer<T>.Defaultとか例を挙げたらキリがない

682 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 22:10:23 ]
ああすまんComparer<T>.Defaultは違うね
Stream.Null(実際の型はStream+NullStream)とか

683 名前:デフォルトの名無しさん [2008/06/04(水) 23:40:00 ]
>>680
君だけではないよ。
Factoryってこうやらないだろ?



684 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:59:22 ]
XmlReader.Createとかあるでしょ
一応MS的にはこういうのも「ファクトリメソッド」と呼ぶらしい

685 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:09:09 ]
どこが変だとか、どうあるべきかとか書いてくれないと答えようがない

GetEnumerator()の実装例でyield returnを使わないケースで内部クラスを使っている
なおC#の内部クラスはJavaのstaticな内部クラスと同等だから誤解のないよう

686 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 01:55:39 ]
というか基底クラスであるPersonクラスが具体的な派生クラスを知っているのが不自然。
気持ち悪い。

687 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 03:35:19 ]
既定クラスがBuilderを兼ねてるのがいやだったらPersonとファクトリーを分離するのは問題ない。
ただ、拡張可能なようにBuilderやStrategyパターンで作ってゆくと、
クラスやインターフェイスの数がすごいことになるから過剰な汎用化には反対したい。

688 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 04:39:40 ]
突然質問してごめんなさい。

皆さんはC#とかってどうやって勉強してるんですか?
こないだはじめたんだけど、資料が少なくて、学習がすすみません。
いい勉強法とかオススメの書籍があれば教えてください。

ちなみに今は実際にソフトウェア作ってみて、わからないことがあったら調べて・・・って感じです。



689 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 07:52:47 ]
C#で資料が少ないとか言ってたら何も覚えられん。

690 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:05:32 ]
MSDNに全て有る

691 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 08:47:31 ]
>563-567 >690
の質問とかぶると思うのですが。
 オープンなC#ソースでストラテジーパターンを実現しているらしき所を見かけたので、
newのコストについて教えてください。

【ソース概要】
・クラスConcreteAとConcreteBは同じParentStategyクラスの派生。
・それぞれのクラスには違う条件でこの方法で状態遷移する。
void override update(){
  ・・・
  if(hoge<hage)
    {parentStategyInstance = new ConcreteA()}
  else
    {parentStategyInstance = new ConcreteB()}
  ・・・
}
・update()は頻繁に発生する。
・各コンストラクタはメンバを一つ更新する一行のみ。
・ガベコレでメモリ使用量のコストが無いことは解ったつもり。

 C++ならキャスト一択の所と思うのですが、JITのおかげでこの書き方が
実は最高にスマートって事になっちゃいないか知りたいんです。

※JITのおかげさまで、簡単にベンチテストが作れない事が問題なんです><
※オブラートに包んだ所にミソがありそうなら、どんどん公開します。 O!S!I! O!S!I!

692 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:07:15 ]
Stategy自体選択ミスに1票

693 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:08:56 ]
switch最強伝説を更新するんですか? ('A`) >692

694 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:14:22 ]
C#自体の選択ミスに1票

695 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:19:38 ]
C#のEnum型とswitchの相性の良さは無敵だぉ!! デザパタ厨涙目! プギャー(^0^)9

696 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 09:27:05 ]
>695
私もそう言う事が聞きたかったので、ありがとうございました。

是非参考になるサイトをご紹介頂きたくお願い致します。 m(_ _)m

697 名前:デフォルトの名無しさん [2008/06/05(木) 09:28:56 ]
 ペイントを操作して、絵を描こうとしているのですが、
ドローイングエリアをうまくクリックしてくれません。
どなたか、どうすればいいのか教えていただけませんでしょうか?

[StructLayout(LayoutKind.Sequential)]
public struct RECT {
public int left;
public int top;
public int right;
public int bottom;
}
const uint WM_LBUTTONDOWN = 0x201;
const uint WM_LBUTTONUP = 0x202;

public void RemotePaint() {
IntPtr hWnd;
string sClassName = "MSPaintApp";
string sWindowText = null;
sClassName = "AfxFrameOrView42u";
sWindowText = null;
hWnd = FindWindowEx(hWnd, IntPtr.Zero, sClassName, sWindowText);
SetForegroundWindow(hWnd);
RECT winRect = new RECT();
GetWindowRect(hWnd, ref winRect);
System.Threading.Thread.Sleep(1000);
PostMessage(hWnd, WM_LBUTTONDOWN, 100, 100);
System.Threading.Thread.Sleep(500);
PostMessage(hWnd, WM_LBUTTONUP, 100, 100);
}


698 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:39:13 ]
>>566
サブクラスのコンストラクタが動く前に
オーバーライドされた仮想関数が呼び出されるわけで
ちょっと気持ち悪いですね。



699 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 10:41:09 ]
>>691
あまりにも頻繁にUpdateが呼ばれるならやや効率は悪いだろうな。
でも多分誤差レベル。
大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

ただ、作りとしてはぱっとしないな。


700 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:18:52 ]
>ぱっとしないな
ぶっちゃけそこなんです。

 上の話の終わり方だと、ConcreteAとConcreteBを継承した大きなクラスを作って
処理部分だけ、switchかdelgate型で置き換え可能にする。
・JITはswitchが強いってことは何処までか?
・一つの処理がどの程度長いとdelgate型が有利になるか?
でバッチテストが作れるなと思ってました。
  っていうか、そういうテストした人の本や社員のサイトがあっても良いなと。

これも「ぱっとしないな」と思ってくれたら、むしろ愉快なんですけどね。

あと
>大抵ほかの処理でそれ以上にメモリ使ってるだろうから。

私の
>・ガベコレでメモリ使用量のコストが無いことは解ったつもり。
への返事でそんなに深い意味は無いですよね?

※最大メモリ使用量より速度優先
※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。

701 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:22:09 ]
delegateの"e"が抜けてる。

702 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:25:28 ]
デリゲートなんかは下手に保持しとくより毎回newした方が速いらしいね

703 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:32:07 ]
thx
delegateは捨てましょう。

…C的には、関数ポインタよりnewが早i(ry

JITのnewまわりの最適化を見られれば、それでも疑問は解決できます。

704 名前:702 mailto:sage [2008/06/05(木) 11:36:07 ]
>>703
意味わかってる?
デリゲートが遅いって言ってるんじゃなくて,デリゲート型のオブジェクトをnewするときの話だよ

705 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:45:56 ]
>704
ミスリードです>< すいません。

 最初に戻ると、元parentStategyInstanceを持ってるクラスを作った時に、
デリゲート型のオブジェクトをnewできます。

あとは
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

あと、
>※速度ねらいで、ConcreteA、ConcreteBに変数名の重複を許さないぐらい程度は妥協範囲。
これ、 ConcreteA、ConcreteBでずらずら並んで、20個ぐらいあったら一気に話が不毛になるな。('A`)



706 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 11:51:10 ]
だから、逆なんだ。
  if(hoge<hage)
    {exceDelege = ConcreteAexceDelege}
  else
    {exceDelege = ConcreteBexceDelege}

よりも >702は
  if(hoge<hage)
    {exceDelege = new exceDelegater(ConcreteAexce)}
  else
    {exceDelege = new exceDelegater(ConcreteAexce)}

707 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:05:13 ]
newの最適化っつっても、確保に関しては基本的にマネージヒープの
未割り当て領域へのポインタをオブジェクトサイズ分進めるだけだぞ。
もちろん頻繁にnewすればGC起動の機会を与えることになるから、
パフォーマンスを気にするならインスタンスのキャッシュは基本ではあるが。

708 名前:691 mailto:sage [2008/06/05(木) 12:34:44 ]
 話を長引かせる様な書き方をしてしまってすいません。
>696 >700-701 >703 >705-706
まで私ですね。

>ConcreteA、ConcreteBでずらずら並んで、20個ぐらい
は失言でしたが、>707にはそこまで考慮して貰ってありがとうございます。
「インスタンスのキャッシュは基本」
これを確認出来て良かったです。

ソースの出所が良い所ぽかったので、>704みたいな事は無いか色々勘ぐったんです。

<ちら裏>
switchしかりnewも、CLRやJITの最適化って非線形で決めてナシなんだな。
皆さん好きですか?
私は、規模が変わるたびにバッチテスト・ベンチマークテストする事になりそうで('A`)



709 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:51:30 ]
大抵現実に影響があるようなパフォーマンス問題は
そんな細かい話ではない。


710 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:53:58 ]
デリゲートがキャッシュするよりnewってのは初めて聞いたな。
どこででた話?
それかひょっとして非常に使用頻度の低いデリゲートの話?


711 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 12:56:14 ]
>709 けどそれって、C#の開発経験があるって言えるんですか?
毎日好きな言語で遊んで、顧客が限定してきた時だけC#って奴と差がないじゃん。

712 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:03:29 ]
visual studioでメッドを全部折りたたむ技ってないですか?

713 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:05:09 ]
>>711??
何のことを言ってるんだ?


714 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:06:11 ]
こういう事を
>そんな細かい話
って言い捨てること。

715 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:18:25 ]
>>714
プロならコストと効率を考えて、大して効果の上がらない箇所の最適化に
拘って労力を注ぐくらいなら、もっと他にすることがあるだろうと思うがな
そういうところをいじくり倒せるのはむしろ趣味で遊んでる奴のほうじゃね

716 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:25:04 ]
>715
>プロならコストと効率
そりゃどの言語でもそうだよ。
話をループさせてることに気付いてる? 会話下手?

俺は優しいから"C#でのコストと効率"の経験って解釈してあげるよ。

717 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:28:38 ]
>>716
煽る以外に言い返す言葉が見つからないならレスするなよ

718 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:33:19 ]
>715のプロとしてのコストと効率の経験と、趣味で遊んでる奴との混同具合が心配です。



719 名前:デフォルトの名無しさん [2008/06/05(木) 13:46:50 ]
usingを使ってStreamReaderを読んでますが、
whileで最後まで読んで、もう一度whileで読みたいのですが、
どうすればいいんでしょうか。

720 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:52:18 ]
>>719
こういうこと?
streamReader.BaseStream.Seek(0, SeekOrigin.Begin);


721 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 13:54:51 ]
>>712
アウトラインのことなら、編集 - アウトラインで

722 名前:719 mailto:sage [2008/06/05(木) 14:00:03 ]
>>720
おお!!出来ました!助かりました!
ありがとうございます!


723 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:16:28 ]
優先度の問題。
そんな細かい話を気にする必要があることだってあるが、
現実には引っかかるのはもっと別のところであることがほとんど。
もっと気をつけるべきとこは他にいっぱいある。
ってだけの話、無意味とは言わん。


724 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:08 ]
だろうね。 大概解ってるだろ。
俺、>709って初見じゃないもん。 定期的に湧く厨だと思った。

725 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:19:37 ]
条件分岐の効率なんて、文字列処理一発でも挟まれば全く無意味。
だから処理効率より設計の方を重視する方がいい、ほとんどの場合は。


726 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:24:24 ]
>>724
誰かさんはこの程度でベンチテスト毎回やるんだと言ってるから相当優先度が高いんだろ
解ってるとは思えん

727 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:29:50 ]
次のようにXMLファイルを読み込もうとしてるのですが、
どうやら読み込みに失敗している環境があるらしいのです。
if (File.Exists(Directory.GetCurrentDirectory() + "\\" + "data.xml") == true)
{
 Type[] et = new Type[] { typeof(Data) };
 System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), et);
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
そこでまず、本当にXMLファイルの読み込みに失敗しているのかメッセージボックスでチェックしたいのですが、
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch
{
MessageBox("読み込み失敗");
}
こんな風に書いちゃってもいいのでしょうか?

728 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:32:37 ]
その時も文字列処理を引き合いに出してたな。
だいたい、その辺りにC#の用途の向き不向きボーダーラインがあるんかな。
More Effective C++みたいなイメージでは不毛と。



729 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:00:24 ]
>>727
肝心の例外情報握り潰したら話にならんだろ
つか今時CurrentDirectoryかよ

730 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:02:22 ]
>729は catch の後ろに何もない事を言っている様だ。
try .. catchのヘルプに戻ろう。

731 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:35:17 ]
CurrentDirectoryの何が悪いのかわからん。
まさかレジストリやマイドキュメントに保存するのか?W

732 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:39:09 ]
カレントにするやつは無知か手抜きだろ

733 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:27 ]
exeのフォルダならともかく、
カレントは起動方法によって変わるから問題だろ
元々そういう仕様なら関係ないけど

734 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:46:32 ]
カレントディレクトリがショートカットとかで変更されたらどうするんだ?

735 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 15:49:56 ]
俺の負けだ。 言わせてくれ。
そこは

   throw; //スルー

だろ。
俺は敗者だ。 だけどなんかスッキリした。

質問者おいてこぼりだが、確かに>728の模範解答は期待。

736 名前:727 mailto:sage [2008/06/05(木) 15:54:41 ]
聞きたいのはCurrentDirectoryのところではなく、
usingステートメントをtryで囲んでもいいのかな?と思ったのです。

読み込み失敗時の例外情報はヘルプでFileStreamを調べたのですが例外の種類がわかりませんでした。
例外の種類はどうやって調べたらいいんでしょうか?

737 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:00:52 ]
起きえる例外がわからなければSystem.Exceptionで受ければいいだろ。
起きる例外はMSDNに載ってると思うけど。

738 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:13:54 ]
MSDNでFileStream コンストラクタ (String, FileMode)を引いたら例外の種類が書かれていました。
try
{
 using (System.IO.FileStream fs = new System.IO.FileStream(Directory.GetCurrentDirectory() + "\\" + "data.xml", System.IO.FileMode.Open))
 {
  DataList = (ArrayList)serializer.Deserialize(fs);
 }
}
catch(System.Exception e)
{
 MessageBox(e.ToString());
}
としましたが、usingをtryで囲ってもいいのかが知りたいです。




739 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:15:36 ]
どうして駄目だと思った?

740 名前:727 mailto:sage [2008/06/05(木) 16:31:25 ]
>>739
usingステートメントって例外が起きた時にステートメント内のdisposeを保証してくれるんですよね。
なのでtry句が複雑にネストしてしまう気がしたからです。
例外が自分の環境でも再現出来ればいいのですが、
他人の環境なので再現できないので、メッセージボックスを仕組んで原因を調べようかなと思いました。

741 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:43:55 ]
try句が複雑にネストしてしまう、の意味が分からない。

742 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:45:18 ]
usingをtry-finallyに展開してみる。
try { 
 readonly System.IO.FileStream fs = new System.IO.FileStream("data.xml", System.IO.FileMode.Open);
 try { DataList = (ArrayList)serializer.Deserialize(fs); }
 finally { fs.Dispose(); }
} catch(System.Exception e) { 
 MessageBox(e.ToString()); 

usingではcatchしてないからDeserializeで例外が起きた場合は外側のtry-catchブロックが補足する。
問題になるとすればcatchの段階でまだ開いている状態のfsにアクセスしたい場合。
Deserializeとfs.Dispose()の両方で例外が起きた場合。
こういったことが気になるなら、usingを使わずtry-catch-finally構造に変える。

743 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 16:50:38 ]
蒸し返してすまんが、CurrentDirectoryでひとこと。
コンソールアプリならカレントディレクトリは普通に使う。
GUIの場合は意味がない。
exeのあるディレクトリがカレントディレクトリであると考えているなら明らかに間違い。

Directory.GetCurrentDirectory() + "\\" + "data.xml", 
この部分は余計。相対パスならカレントからの相対パスになるので
"data.xml"
だけでで十分。

744 名前:727 mailto:sage [2008/06/05(木) 17:04:26 ]
>>742
分かりやすい説明ありがとうございました。

>>743
参考になりました。ありがとうございます。

745 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 17:21:07 ]
>>742
>Deserializeとfs.Dispose()の両方で例外が起きた場合。
キャッチされるのは後からの例外の方だったよね?

746 名前:デフォルトの名無しさん [2008/06/05(木) 20:00:17 ]
質問させていただきます。
フォーム上に画像を表示するプログラムを書きたいのですが、
イベントとして、フォームが表示されたと同時に描画したいのです。
このような場合、イベントはどのように記述すればよいのでしょうか。
もしくは、イベントを使わない方法があればそちらもご教授ください。

747 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:01:16 ]
GUIのプログラムの中で
GUIとは何の関係もないオブジェクトAが居ますが
デバッグ用途でGUIのとあるメッセージウィンドウに文字列を出力させたいとします。
オブジェクトAのようなGUIに無関係なオブジェクトが大量に居るような場面で
それらの出力文字列をGUIのとあるメッセージウィンドウに文字列を出力させたいわけですが。
どうやってそのオブジェクト達とメッセージウィンドウ間をインターフェイスさせればよいでしょうか?
Qtをちょこっと触ったことがあるのですが、その場合はsignal/slot機構を使って、わりと簡単に実現できたのですが
C#の場合はsignal/slotの代わりにeventを使うことになるかと思います。
eventの型となるdelegateをどこで宣言するかなぁ〜と考えるのですが、
どこにも宣言したくありません。
どうすればいいですか?


748 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 21:50:02 ]
メッセージ表示するもしくは通知するTraceListenerでも作ればいいんでない?




749 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 22:16:43 ]
>>735ってどういう意味?

750 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:15:02 ]
>>743
逆に言えば、カレントディレクトリがexeのあるディレクトリであることを
プログラム側で保障すれば問題ないということでもある

まあ、その場合でも相対パス使うだろうから、
Directory.GetCurrentDirectory()は不要だけどな

751 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:18:57 ]
>>750
Open/Saveダイアログを使うとカレントディレクトリが動いたりしなかったっけ。
以前はまった記憶がある。

752 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:37:16 ]
ていうか、おまいらデリゲート使うときに毎回宣言してるの?
自分はDelegate<Result,Param1>とか宣言しといて全部それつかってる。
おかげでFuncとどう整合性とろうか思案中だがなぁorz

753 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:42:08 ]
イベントハンドラはEventHandler<TEventArgs>使え

754 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 23:59:49 ]
outやrefに対応できないんだよな…


755 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:05:31 ]
class Reference<T> { public T Value { get; set; } }
こんなの作っとけば

756 名前:750 mailto:sage [2008/06/06(金) 00:07:58 ]
>>751
確かに、FileDialog使うときは

RestoreDirectory = true

にしないとまずいな
てか、既定値がfalseとかありえん

757 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 00:48:22 ]
>>755
世の中そうもいかんこともあるのよ。
リモーティングとか。


758 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 01:29:58 ]
>>752
まさにこういう使い方をするために、宣言時に識別子を省略出来たらいいのに。



759 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 04:03:17 ]
>>754
それは知恵が足りないだけ。
できるよ。

760 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 07:08:25 ]
マルチプルアイコンを含むIconインスタンスから、各アイコンを取得したいのですが、
どうすればよいのでしょうか。

761 名前:760 mailto:sage [2008/06/06(金) 07:46:58 ]
自己解決しました。
Icon.Save()でバイナリデータを得て、それを分割した上でIconコンストラクタに与えればいいですね。
もっとスマートな方法がありそうな気もしますが、とりあえずそれでいきます。

762 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 09:30:47 ]
コンストラクタでSize指定だけはできる

763 名前:747 mailto:sage [2008/06/06(金) 12:09:04 ]
>>753
>>イベントハンドラはEventHandler<TEventArgs>使え

どうもです。
こういうのがあるんですね。
ただこれだとEventArgsカスタムクラスをどこかで定義しなければならないです。
EventArgsカスタムクラスに依存するのがなんだかシャクなんで。

たとえば
talkerインターフェイスを用意するとして

interface ITalkter{
        public delegate void printf(string fmt,prams object[] args);
}

こういうことができたら、
ITalkerを継承したクラスを作ってしまえばそれでOKなんですけど
ITalkerインターフェイスに依存するのは納得できるんで。
ただ、interfaceでは型宣言出来ないらしく。。。
なんで出来ないんだろう。。。。
ちなみにtalkerは大量に居ます。
listenerは1個だけっていう想定。

何かいい方法はありませんか。


764 名前:747 mailto:sage [2008/06/06(金) 12:19:13 ]
もしくは
public event void delegate(object sender,params object[] arg) printf;
のような感じで
名無しの型を宣言すると同時に変数定義みたいなことができたらそれだけでいいですね。
こういうことって可能なんでしょうか?


765 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:25:10 ]
interface ITalkter{
 string PrintString{ get; }
}

こうとか

interface ITalkter{
 void Print(Action<string> print);
}

こうとか

interface ITalker{
void Print(IListener listener);
}

こうとかじゃだめなの?

766 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 12:46:17 ]
DebugListener/TraceListenerで十分だと思うけど。

767 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 13:27:34 ]
>>763
talkerの役割がよくわからないな。
実際に表示する部分なのか、それともメッセージを発行する元なのか?
それからdelegateをeventと1対1で作らなければいけないとか思ってないか?

768 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 14:49:41 ]
>>761
P/InvokeでExtractIconExとか。



769 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 17:41:02 ]
EventHandler<TEventArgs>を使いたくないのだったら、普通にAction<T>でも使うってのは?
オブジェクトAの中に
public event Action<string, object> printf;
を実装する。

これならカスタムクラス使わんで済むでしょ。

770 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 23:54:33 ]
>>747>>764
デリゲートを使うにはデリゲート型が事前に作成されている必要がある
また、匿名メソッドやラムダ式を使った場合でも、型が自動的に作成されることはない

なので、君がやりたいと考えていること(デリゲートを使用して云々)は恐らく不可能

まあ、本来の目的からすると、出力タイミングをGUI側で制御するなら>>765
オブジェクト側で制御するなら

interface ITalker {
  void SetPrintCallback(Action<string> print);
}

もしくは

interface ITalker {
  void SetListener(IListener listener);
}


>>769
void (object sender, T e) where T : EventArgs

に合致しないデリゲートをイベントにするのはやめれ
# MSのガイドラインなんて知らん、というなら止めはしないが

さらに言うと、
・デリゲート型の名前のサフィックスは EventHandler
・第2パラメータの型(上記 T)の名前のサフィックスは EventArgs
・2つのパラメータ名は上記の通り(sender, e)

771 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:33:51 ]
正直msのガイドラインなんか知ったこっちゃ無い


772 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 00:55:01 ]
なら使うな

773 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 06:58:46 ]
ここはCompact Frameworkの質問はおk?

774 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:03 ]
だから使わないんだって

775 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:01:24 ]
C#にからめればOK

776 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:03:46 ]
Compact FrameworkでWindows Mobile用2chブラウザを作ってるんだが、
スレ一覧にListViewを使ってるんだ。
ListViewItemCollectionにAddRangeが無くてforeachでスレデータ回してアイテム作ってAddさせてるんだが
どうにも低速なんだ。
AddRangeの代わりになるものは回してAdd以外ないだろうか。

777 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:19:17 ]
BeginUpdateやってる?

778 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:20:04 ]
>>777
やってる。



779 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:53:10 ]
ListViewへの追加はPCでもかなり遅いからなあ
1000件くらいになりそうなときはVirtualModeにしてるけど、Compactじゃ使えないのか

780 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 07:55:15 ]
>>779
2chの板のスレ一覧データだし、700項目くらいPCでやった場合ドパァッって表示されるんだがなあ。
VirtualはCFからは使えないな。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef