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


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

[プログラム板] C#, C♯, C#相談室 Part47



1 名前:名無しぃ♯ [2008/06/21(土) 17:51:22 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

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

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

448 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 08:29:40 ]
速くはあるだろうが安全じゃない。ケースによってはここまでやらないと。
int [] _hoge = new int [5];
int [] Hoge {
  get { return (int []) _hoge.Clone(); }
  set {
    if (value == null) throw new NullReferenceException();
    if (value.Length > _hoge.Length) throw new ArgumentOutOfRangeException();
    value.CopyTo(_hoge, 0);
 }
}


449 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 09:01:18 ]
>>428
君のプロパティに関する意見はどうなの?
他の人がここまで書いているんだから、何か無いの?
無いのなら、無い奴に限って枝葉末節にこだわる黄金則が‥‥。

450 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 09:45:33 ]
>>448
getで返す配列への変更が元のインスタンスに反映されないので、
プロパティじゃなくてメソッドにすべき

451 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 11:05:59 ]
ケースごとに分けて考えようぜ。

配列の参照自身が書き換わってよい場合。また内容も外部から任意に書き換えることが出来る。
 フィールドをpublicにする。
 単純に配列の参照そのもをプロパティにする。

配列内容が任意のタイミングで書き換わってよい場合。ただし配列の参照自体やサイズが変わることは禁止。
 配列の参照をgetだけするプロパティまたは取得だけの関数を使用する。 >>449はこれ

配列の内容が書き換わるタイミングを管理したい場合。配列の参照やサイズが変わることは禁止。
 インデックサかそれに準じる添え字を引数にした読み書き用の関数を使用する。
 get setのプロパティで予防的コピーを行う。 >>448はこれ


452 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 11:06:58 ]
>>451
>>449はこれ 

>>450の間違い、訂正します。

453 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:27:22 ]
今北産業

454 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:28:20 ]
インデクサ使ったほうがかっこよくね
vs
ハァ?メソッドでいいだろ

455 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:39:08 ]
x.Foo[128] = 123; // 配列プロパティでインデックサみたいなことができるよ〜
int [] f = x.Foo; f[3] = 123; // こんなことや
x.Foo = null;  // あんなことされて平気? ・・・産業


456 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:47:21 ]
>>455
や、それが平気じゃないならgetのみにするんではないか?



457 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 12:58:00 ]
配列じゃないがこういうケース、書き換わらないと思ったら値型かよ!
hoge.Point.X = 100;
正解はこちら、めんどくせ〜
hoge.Point = new Point(100, hoge.Point.Y);

>>456
3番目のケースはそれでカバーできるが、2番目のは割り切りが必要かな。

458 名前:450 mailto:sage [2008/07/29(火) 13:04:39 ]
>>451
まず、誤解の無いように言っておくと、
>>451の各ケースの意義は理解してるし、それについてどうこう言うつもりはない

で、>>450で言いたかったのは、例えば

obj.Hoge[2] = 10;

と書けるにもかかわらず、この操作が(直感に反して)意味を成さないのが問題だということ
プロパティの型が値型でなければ、そのプロパティで取得したインスタンスへの変更は
元のオブジェクトに何らかのフィードバックがあることが期待され、それを裏切る実装は避けるべき

ついでに、コピーを返すプロパティと配列を返すプロパティがガイドラインで禁止されているのも
それなりの理由があるからなので、それに違反する必然性がないのであれば従っておくべき

459 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 13:09:07 ]
Image.Paletteを考えればコピーを返すプロパティはやっぱ直感的じゃないよな

460 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 14:43:39 ]
インデクサだって・・・ダサッ

461 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 16:19:22 ]
IComparerを継承したクラスでComparerメソッドの実装を
しようとしてるんだけど、浮動小数点数の比較が上手くいかない

誰かスマートな実装方法教えてください

462 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 16:20:51 ]
上手くいかないならどう上手くいかないのか書けよ

463 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 16:37:10 ]
スマートも糞もないだろそれぐらい
あとIComparer<T>使わんの?

464 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 16:44:56 ]
あまりに低レベルな質問する奴はふらっと行けよ

465 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:04:44 ]
>>462
int ret;
float x;
float y;

ret = (int)(x-y)

みたいにやってるけど、差が0.・・・だと、丸まってしまって
0になってしまうから、駄目だと思うんだが、どうやったら
上手く比較できるのかさっぱりわからない
整数ならこれで上手くいくんだが

>>463
IComparer<T>は知らなかったので、今から調べてみます
それくらいって程簡単なの?
とりあえず簡単なら教えて欲しい、これでずっと悩んでる
ウェブでいくら探しても、整数と文字列の比較のサンプルしか無いんだ

466 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:07:15 ]
>>465
x==y/x<y/otherwise
でいいだろ。



467 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:07:53 ]
ふらっとだな。
if (x > y) return 1; とか思いつかない?

468 名前:oth mailto:sage [2008/07/29(火) 17:27:22 ]
otherWiseがコンパイル通りません

469 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:31:43 ]
>>466
すいませんが、まるでその式の意味が理解できないんですが
どのように理解したら良いんですか?

>>467
int にキャストしないで
if (ret >0)
 return 1;
のようなものは考えていたけれど、もっとスマートな処理が
あるんじゃないかと思って聞いてみたのです
Comparerの戻り値の正数ってのは、0か負の数じゃなきゃ
なんでもいいんですかね?差の値を入れなくても

470 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:36:39 ]
MSDNの解説ぐらい読めよ……

471 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:38:01 ]
ふらっと池よクズ

472 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:39:50 ]
>>469
スマートと行数が少ないは違うだろ。

比較関数で差を返すのは大昔からよく見るコードだが、
通常、整数型は正負で扱える数の範囲が違うから、何も考えずに符号を反転させるとオーバーフローする。
ちょっと考えればわかることで、まともなプログラマはそんなコードを書かない。

473 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:42:13 ]
>>469
IComparer.Compare(double x, double y)
{
return x - y;
}

474 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:44:57 ]
>>473
馬鹿はすっこんでろ。

475 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:46:08 ]
振り出しに戻る、だなw

476 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:47:20 ]
>>469
MSDN読んでこいよ
バカ丸出し



477 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:52:12 ]
return (x - y).CompareTo(0.0);

478 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:53:28 ]
>>472
そういえば、そうですね。
単純に降順の場合、ret = -ret で返してました。
っていうか、ウェブにあるサンプルってどれも
この返し方してたんで、疑問にも思いませんでした
定数を返した方が安全なんですね

>>473
え、いやそこの所を実装したいのですが
後々も拡張したいので

479 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:53:58 ]
>>477
バカ丸出しだなww
そのCompareTo()の中身が欲しいんだろwww

480 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:55:32 ]
俺が正解書いてやったのにまだやってんの?

481 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:56:07 ]
このスレ昔からそうだけど答えも知らないくせに
文句だけは言う馬鹿ばかりだなw

482 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:56:21 ]
int Compare(double a, double b)
{
if (a - b < 0d) return -1;
else if (a - b > 0d) return 1;
else return 0;
}

483 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:56:56 ]
>>481
お前もそうだろww

484 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:59:00 ]
>>483
お前もそうだろwww

485 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:59:32 ]
>>484
お前もそうだろwwww

486 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:59:53 ]
>>486
お前もそうだろwwwww



487 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 17:59:57 ]
ふらっとのがまともだな

488 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:00:06 ]
何がおもしろいのやら…
くだらない奴しかいなくなってしまったな…

489 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:00:40 ]
>>490
お前もそうだろwwwww

490 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:01:10 ]
public int CompareTo(Double value)
{
if (m_value < value) return -1;
if (m_value > value) return 1;
if (m_value == value) return 0;

// At least one of the values is NaN.
if (IsNaN(m_value))
return (IsNaN(value) ? 0 : -1);
else
return 1;
}

491 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:02:10 ]
>>488
前からずっとこうだろw
少し上のレスもそうじゃねえか
馬鹿のくせにプライドだけは高いから
すぐに荒れるw

492 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:02:53 ]
普通の比較をしたいなら
int Compare(double a, double b) {  return a.ComaperTo(b); }

独自の比較基準を追求したいなら
int Compare(double a, double b) {
  if ( よくわからない基準で同じならば(x, y) return 0;
  if ( よくわからない基準で大ならば(x, y) ) return 1;
  else return 0;
}

ってことじゃないの?

493 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:04:50 ]
ああ、荒れてしまってすいません

>>482
のようなシンプルな実装で行こうとも思います
もっと式一つで済むようなかっこ良い実装があると思ったんです
すいませんでした

ありがとうございました

494 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:07:37 ]
わざわざ引き算してるのは何で?

495 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:08:03 ]
>>416からの流れほどは荒れなかったなw

496 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:12:07 ]
>>493
君は悪くない
実力の伴わない自尊心の持ち主が多いスレなんだ

NaNの処理が必要だから>>490の実装が正解に近いよ
Reflectorを使って、System.Double.CompareTo(object value)の中身を見てみることをお薦めする



497 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:15:26 ]
>>496
正解に近いんじゃなくて正解だよ

498 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:16:22 ]
>System.Double.CompareTo(object value)
だからさ、それをそのまま使わないか不思議なんだけど

499 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:18:02 ]
>>498
拡張したいんだろ
初心者は変なことやりたがるんだからほっとけ

500 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:18:16 ]
正解に近いという言い回しは、Cカップ好きのあれ思い出すな

501 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:21:27 ]
一つの質問が投下されるたびに内容に関係無く
一悶着あるのがこのスレの掟w

502 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:23:52 ]
>>498
特別なソートしたい場合なんていくらでもあるだろ
色々やってりゃ既製の比較関数じゃ追いつかない
場面は多々出てくる

503 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:35:21 ]
>>496
自己紹介乙

504 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:40:46 ]
>>496
ソースコードを直接見ろでいいじゃない。
質問者がExpress使いという可能性はあるけどさ。

505 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 18:58:58 ]
>>490
遅レスだが、IsNaNの処理おかしくね?
非数じゃなかった場合、何でreturn 1に決め打ちしてんの?

506 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 19:06:06 ]
>>505
ソースコード見てこいよ



507 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 19:25:39 ]
>>505
何を決めうち?
// ここに到達したら少なくともどちらかは非数なので
m_valueが非数でvalueも非数ならば0
m_valueだけが非数ならば-1
m_valueが非数でないならvalueが非数なので1

508 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:05:31 ]
個人的には

if (!IsNaN(m_value)) return 1;
if (!IsNaN(value)) return -1;
return 0;

の方が、分岐が浅くなって好み

509 名前:デフォルトの名無しさん [2008/07/29(火) 22:42:53 ]
連想配列、HashMapにあたるコレクションの説明がC#の入門書では異常なほど排除されてますよね。
自分はDictionaryを見つけて使ってますが、みなさんはもしかしてインデクサをMapのように実装して使ってるんでしょうか?
まさかとは思うんですが、独学の人間にアドバイスをよろしくお願いします。

510 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 22:46:51 ]
いいえ

511 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:12:45 ]
普通にDictionaryだろどう考えても。
場合によってはHashtable使うこともあるが。


512 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:26:30 ]
>>509
Dictionary はまさに連想配列よ。
赤黒木で実装されてる。
STL の map と一緒。

513 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:30:36 ]
>>512
MSのサイトにはハッシュテーブルで実装されてるって書いてあるよ。

514 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:39:50 ]
Dictionary - ハッシュ
SortedDictionary - 赤黒木

ListとDictionaryぐらいは大抵の入門書で解説してあると思ってたわ。

515 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:39:50 ]
Dictionary<,>はただのHashtableのラッパ。

516 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:41:21 ]
Dictionary ハッシュ辞書
SortedDictionary 赤黒木
SortedList 索引をもつリスト
Hashtable Dictionaryの非ジェネリック版




517 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:42:57 ]
>>515はデタラメ

518 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 23:45:56 ]
SortedListは説明しづらいから逃げてることが多いかな。
わからなければSortedDictionaryを使うのが無難。

519 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 00:48:17 ]
MSDNライブラリとか規格書とかSSCLIのコードとか読む人あんまり居ないの?

520 名前:デフォルトの名無しさん [2008/07/30(水) 00:50:37 ]
509です。カキコして下さった皆さんに感謝しています。
インデクサが定義可能と知り、まさかなと思いまして。でもやっぱりそうでしょうね。

>>514 ListとDictionaryぐらいは大抵の入門書で解説してあると思ってたわ。
まあ、いっぺん見てやってください。Listの解説があるならずいぶん良心的なほうです。。。
>>518 SortedDictionaryは推測するにJavaのTreeMapですね。新知識でした、ありがとうございます。


521 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 03:07:07 ]
@ITってそこらの入門書より使えると思う俺

522 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 18:46:12 ]
>>517
ソース読めよ馬鹿

523 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 19:00:13 ]
>>522
reflectorで確認した限りでは使ってないな。どのあたりで使ってるの?

524 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 19:18:38 ]
DictionaryBaseと混同してるんだろう
せっかくジェネリックになったのにHashTableなんか使ってたら値型のときに速くならないじゃん

525 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 20:05:13 ]
www.itmedia.co.jp/enterprise/articles/0807/30/news076.html
.NET大勝利ですか?

526 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 20:09:49 ]
日本語がコードネーム?
Vistaは見送ったけどこれは買おうかな



527 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 20:12:12 ]
どうせ10年後くらいだろ

528 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 20:18:43 ]
横浜市緑区?
めっちゃ近所なんだが

529 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 20:23:06 ]
俺んとこの市にも緑町があるぜ、隣の市とかその向こうにも。

530 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 20:35:07 ]
>>525
大勝利って言われてもな。とりあえずWPFの普及率もっとあげてくれ。

531 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 20:59:47 ]
Singularity ベースってだけで 9 割方ネタだろとしか正直

532 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 21:54:51 ]
>>522
ソース読めよゴミ

533 名前:デフォルトの名無しさん [2008/07/30(水) 22:01:12 ]
C#によるプログラミングWindows 上/下 (マイクロソフト公式解説書)
はC#2.0でもかなり役に立つ?
C#2.0版まだ、でなさそうだし・・・・
#オライリーのC#本、手打ちしてる位のレベルなんだけど

534 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 22:18:29 ]
>>533
1.0の頃からあまり変化がない部分が中心の本だから「時代遅れ」の
心配はあまりいらないかもしれない。

ただ俺はあの人の本って一般に評価されてるほど評価する気になれんな。
網羅的なのはいいけどコード変だし。

535 名前:533 [2008/07/30(水) 22:28:27 ]
>>534
なるほど。ありがとう
明日、本屋によって現物確認してから考えるよ(確かあったはず)
とりあえず行数打って慣れるってレベルだから、いいかなと
#オライリーのも うーん と思わなくもない
#javaからshiftしきれてないからかな

536 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 23:57:26 ]
ポインタ、クラス、ジェネリックを効率的に習得するには
C -> C# -> C++ という順番がいいような気がする今日この頃。




537 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 00:04:01 ]
お前の意見なんて求めていない
消えろ

538 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 01:43:13 ]
Java、C、C#の順でやってきた
C++は危ないコード書き放題の怖い何かって認識しかない

539 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 02:39:47 ]
C++は言語仕様以外にも安全な書き方、
定番な書き方、インクルードファイルのインクルード順序とか、
まともに使えるようになるまでのインフラ整備にものすごく時間がかかるよ

C++の複雑さと心中する覚悟のある人しか使えないんじゃないかなぁ

540 名前:デフォルトの名無しさん [2008/07/31(木) 11:25:26 ]
レジストリのフルパスを表す文字列からRegistryKeyを取得する簡単な方法は
無いでしょうか?

\\HKEY_LOCAL_MACHINE\Software\hoge というキーを取得するには
Registry.LocalMachine.OpenSubKey("Software\\hoge")
で取ることは可能ですが、 OpenSubKeyメソッドがRegistryKeyのインスタンス
のサブノードしか取得できないため、まずルートキーを最低指定する必要があり
非常に面倒に感じます。

フルパスの文字列を解析して それがHKLMなのかHKCUなのか等をいちいち
判定して場合分けして、ルートキーを取得し、さらにそのサブキーを取得というのは
結構あほらしい気がするんですが…。

RegistryKey regKey = Registry.GetKeyFromPath("\\HK_LOCAL_MACHINE\\Software\\Hoge");
のように一気に取りに行く方法はFWに用意されていないんでしょうか?

541 名前:ノムヒョン [2008/07/31(木) 11:26:38 ]
using System;
using System.Collections.Generic;
using System.Text;

namespace VirtualMethods
{
class Control
{
protected int top;
protected int left;
/* 画面上でのウィンドウの位置を決めるための式 javaが懐かしい
*
*/
public Control(int top,int left)
{
this.top = top;
this.left = left;
}
// ウィンドウズへの描画をシミュレートします
public virtual void DrawWindow()
{
Console.WriteLine("Program;プログラムを描画します。座標:{0}, {1}", top, left);
}
}


542 名前:ノムヒョン [2008/07/31(木) 11:27:50 ]
public class Listbox : Control
{
private string listBoxContents;
// 基本クラスのコンストラクタより引数が1つ増えています。
public Listbox(int top, int left, string contents)
:
base(top, left) // 基本クラスのコンストラクタを呼び出します
{
ListBoxContens = contents;
}
// 派生メソッドでふるまいを変えるための上書きバージョン(キーワード)overrideに注意)
public override void DrawWindow()
{
base.DrawWindow(); // 基本クラスのメソッドを呼び出します
Console.WriteLine("ListBoxへ文字列を書き込みます:{0}", listBoxContents);
}
}
public class Button : Control
{
public Button(int top, int left)
:
base(top, left)
{
}
// 派生メソッドでふるまいを変えるためのの上書きバージョン(キーワードoverrideに注意)



543 名前:ノムヒョン [2008/07/31(木) 11:28:46 ]
public override void DrawWindow()
{
Console.WriteLine("Buttonを描画します。座標:{0}, {1}\n", top, left);
}

}
public class Tester
{
static void Main()
{
Console win = new Control(1, 2);
ListBox lb = new ListBox(3, 4, "単独のListBox");
Button b = new Button(5, 6);
win.DrawWindow();
lb.DrawWindow();
b.DrawWindow();


544 名前:ノムヒョン [2008/07/31(木) 11:30:09 ]

Control[] winArray = new Control[3];
winArray[0] = new Control(1, 2);
winArray[1] = new ListBox(3, 4, "配列中のListBox");
winArray[2] = new Button(5, 6);

for(int i=0; i<3; i++)
{
winArray[i].DrawWindow();
}
}
}



}
でアクセシビリティに一貫性がありません。基本クラス 'VirtualMethods.Control' のアクセシビリティはクラス 'VirtualMethods.Listbox' よりも低く設定されています。
とでて解決ができません。いろいろ調べてみたのですがもうどうすればいいのかと^^;


545 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 11:33:20 ]
>>540
そういうメソッド一つ作っとけばあとは使いまわすだけじゃん

546 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 11:39:05 ]
>>544
エラーメッセージのまんまだよ。
Controlクラスのアクセスレベルがpublicになってない。



547 名前:ノムヒョン [2008/07/31(木) 11:40:38 ]
<<546
ありがとうございます

548 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 12:03:00 ]
ム板ってなんで安価も付けられない糞コテばっかりなん?

549 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 13:44:27 ]
>>540
元のWin32 APIからそういう風になっているから仕方ないな。
そこもなんとかしろよ.NETとは思うけど。

単発での読み書きなら、Registory.GetValue/SetValueが使えるんだけどね。

550 名前:デフォルトの名無しさん [2008/07/31(木) 13:44:34 ]
>>545

まあ、そうなんですが。
ただあんまりあほらしいんで、車輪の再発明のような気がして
なんかライブラリに用意されているのを見落としているのかなと
思ったんですが。

551 名前:デフォルトの名無しさん [2008/07/31(木) 13:46:32 ]
>>549

WIN32からしてそうなんですか。
それじゃ無理そうですね…。


552 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 14:13:07 ]
もともとHKEY_CURRENT_USERとかはパスではなく、
Registory.CurrentUserなんかに相当するWin32の定数だった。

553 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 18:26:49 ]
デフォルトメーラーの起動で質問が有ります。

デフォルトメーラーの新規メール画面を添付ファイル付きで起動させたく、
現在MAPISendDocumentsで実装しています。

しかし、Outlook、Thunderbird、Eudra、Beckyなどは問題無いのですが
LotusNotesだとNOT_SUPPORTED=26が返されます。

エクスプローラから「送る」→「メール受信者」や、
Excelの「ファイル」→「送信」→「メールの宛先(添付ファイル)」
などはちゃんと動いており、この機能はMAPIを使っているものだと思っていますが、
(これ自体間違っているかもしれませんが・・・)
MAPIを使って他に添付ファイル付きで起動させる方法をご存じの方おりませんでしょうか?

MAPIを使わなくても別の方法でも問題有りません。
いろいろウェブで探してみましたが結論には至りませんでした・・・

554 名前:デフォルトの名無しさん [2008/07/31(木) 22:53:14 ]
Formの移動時やリサイズ時に枠線だけ動いたり変形している
のと同じ描画を行いたいのですが、別のダミーのフォームを
Style.Noneで実現しているのでしょうか。その場合はWinProcなどを
用いてWindowMessageを処理して実現可能でしょうか?

その場合はMouseをCursorオブジェクトなどを使って操作して、
OnResizeメソッドなどをプログラム側から発生させてダミーのForm側
にMouseを乗り移らせるようなことが可能なのでしょうか・・・
この辺ご存知の方、できましたらアドバイス等頂きたく(それとも、
あれはデスクトップに直接描画とかしているのでしょうか?)

555 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 23:15:37 ]
デスクトップにControlPaint.DrawReversibleFrameする簡単な実装は
お気に召さないの?

556 名前:デフォルトの名無しさん [2008/08/01(金) 00:59:41 ]
>>555
おお、そのような便利なモノがあったのですか!!
調べてみます!ありがとうございました!




557 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 11:46:10 ]
すいません、質問です。
C#をベースにしたらしい言語を使ってます。

#includeを使いたいですが、これ自体はないようなので、
どういった手法をとればよいのでしょうか?
importだかusingだかで、他から引っ張って来るような記述はあったんですが、
目的の機能ではないみたいで…。

目的としては、mainを含む上位部分を使いまわししたいんです。
で、下位部分を手動で大量に作って、共通部分の上位部と組み合わせてそれぞれコンパイルするような。

何かありますでしょうか?(´・ω・`)



558 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 11:47:18 ]
C#をベースにした言語って?

559 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 11:53:29 ]


560 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 11:53:57 ]
シーチンコ?

561 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 12:01:40 ]
特に名称はないみたいです。
ツール内のみのスクリプト扱いなので。

562 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 12:02:55 ]
ふうやれやれ

563 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 12:07:01 ]
>>561
どんなツールだか知らんけど、そのツールのベンダーフォーラムなり
ユーザーフォーラムなりそういうものはないのか?
構文だけC#に似せているのか、実際に.NET Frameworkを利用している
のかもわからんし、アドバイスのしようがない。

564 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 12:30:11 ]
>>563
確かにそうっすね。(´Д`;
フォーラム系はないっす。マニュアルもろくに整備されてなくて。
サポセンもアウアウです、はい。orz

ただ、基本的にはC#を汲んでるらしいので、
ひょっとしたらC#の手法が通るのでは?
と思って質問しました。

565 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 12:44:12 ]
C#ではCみたいなソースの使い回しはできないんじゃね?

566 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 13:00:15 ]
ソースを分割するといってもせいぜい、partial classぐらいだろうな
しかもあれはフォームデザイナーのための苦し紛れの構文だし。

むしろC#ライクな言語ってすごく不思議だな。C#をスクリプトとして使いたいならCodeDOMでコンパイルすればいいし
blogs.sqlpassj.org/yoneda/archive/2004/10/07/4724.aspx みたいなやつか?使い方は知らないがw



567 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 13:34:35 ]
>>564
そのツールって何?

568 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 13:39:18 ]
>>564
言語の出所をはっきりさせない
理由も言わない
サンプルコードも示さない
お前何しに来たの?

569 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 13:50:08 ]
>>564
ツール・・・ここらへんっすね。
ttp://www.accuratetechnologies.com/jp/products/canlab-software-179-175.html
ttp://www.necel.com/micro/ja/partner/vendor/ATI/CANLab.html

>お前何しに来たの?
C#で#includeをする方法を聞きにきました。

570 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 13:59:42 ]
その言語は知らないけどとにかくC#に#includeは無い
設計するときに無いほうがいいだろうと判断されたから無い

571 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 14:08:01 ]
DLLにしてしまうのがいいかもね

572 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 14:19:08 ]
きっとCでもこういうのincludeして悦に浸ってる人なんだよ
#define program int main() {
#define begin {
#define end return 0; }


573 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 14:30:19 ]
>>569
金払って買ったもののサポセンがないってどういうことよ
1ライセンス100万とかそういうソフトだろ

とりあえず#includeに相当するC#のキーワードは#usingだが
使い方はC++でいうところの
namespace std;
だからまるで別物

とりあえずサンプルコードでもなけりゃ助言しようもないし
上司に相談したほうがはやいと思うぞ

574 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 14:31:49 ]
×namespace std;
○using namespace std;

575 名前:554 [2008/08/01(金) 15:06:49 ]
「ドラッグ中にウインドウの内容を表示するかどうか」をWindowsの
オプション設定で決めることができますが、

ドラッグ中にウインドウの内容を - Google 検索
www.google.co.jp/search?hl=ja&lr=&q=ドラッグ中にウインドウの内容を&start=10&sa=N

この設定がされているか、されていないかを、プログラム側から
知る方法を知りたいのですが、参考になる情報をご存知でしたら
アドバイスをお願いします!


576 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 15:09:31 ]
>>572
ワロタwでも一部分だけpascalでも意味内から無駄だな。



577 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 15:10:13 ]
>575
www.google.co.jp/search?hl=ja&q=%E3%83%89%E3%83%A9%E3%83%83%E3%82%B0%E4%B8%AD%E3%81%AB%E3%82%A6%E3%82%A4%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AE%E5%86%85%E5%AE%B9%E3%80%80%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA

578 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 17:21:50 ]
>>571
DLLっすか。それで引っ張ってこれるなら・・・。
中々情報がないですが、漁って見ます。

>>573
サポセンあるにはあるんですが、質問したら
激しく役に立たないサンプルソースがヤル気なく返ってきました。('A`
相談したいんですが、社内での導入が実質初なので。
まともに使ったこと有る人、他にいないんです。

サンプルコード・・・一部抜粋して書いてみました。
役に立たなそうですが。(´Д`;

MessageItem frm_ENG;
public override void OnStart()
{
frm_ENG = GetMessage("ENG");
StartTimer("ENG",200);
Start_test();
}
[Timer("ENG",200, false , false)]
public void OnTimer_t_ENG()
{
StartTimer("ENG",200);
SendMessage(frm_ENG);
}
public void Start_test(){
WriteLine("start");
}

共通的に記述が2500行位で、それを百前後作るんで、
できれば引っ張ってきたいんですよね。

579 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 17:22:32 ]
>>577
情報、どうもありがとうございました。
助かりました、すぐ調べてみます!


580 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 19:55:51 ]
>>578
C#つかOO言語触ったことなくね?

581 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 21:24:42 ]
>>578が2chでヤル気なく質問してきた理由がわかった('A`
気の毒すぎるw
C#とWindowsAPIが混ざってるよね…

Timerを属性指定にして
メソッドに依存させてしまっているあたりセンスのなさが感じられるww

とりあえず>>578が何をやりたいかということと
サンプルソース全部と
あともう微妙にスレ違いなんで、
どっかの放棄されたスレに移るかして、
腰を据えて分析するよりないんじゃないかなw

パズル感覚で協力してくれる人いると思うよww

582 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 22:08:48 ]
codedom使ってコンパイルしてるだけでC#なんだと思うよ
つか常識的に考えて#includeで展開とか不要でそ…
どんな状況なら必要なんだよ…

583 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 22:45:15 ]
よくわからんけどincludeなんて前世代的だとおもう

584 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 23:01:12 ]
なんという蘭学事始。

585 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 23:27:49 ]
>>583
そうかもしれんが、かといってグローバルな(つまりファイルスコープじゃない)
コンパイル定数を定義しようと思ったらプロジェクトのプロパティに
ちまちま書かなければならん不便さを進歩と言ってよいのか疑問でもある。

586 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 23:32:02 ]
>>585
定数も、const じゃなくて、static readonly なプロパティ使うことが推奨されてるしなぁ。
private/internal な場合か、円周率みたいに絶対変わらない値だけ const。



587 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 23:33:43 ]
定数だったら、たとえばColor.Redみたいに、クラスのpublicな要素でぜんぜん不便を感じてないけど。
そういうことじゃなくて?

588 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 00:03:34 ]
お前は黙ってろ

589 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 00:05:26 ]
お前がだまれ。

590 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 02:37:56 ]
>>587
プリプロセッサシンボルを使いたいんだろうね
>>585はプロジェクトのプロパティでしか設定できないと思い込んでいるらしいが

591 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 05:28:26 ]
>>583
クラス定義とか、テキストエディタさえあればヘッダ除けばすぐに判る点とか、
C/C++やってきた自分としては好きですけどね



592 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 08:38:54 ]
クラス定義は嬉しいけど、インクルードする順番によってコンパイルが通らなくなったりするのは最悪だった

593 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 08:56:42 ]
>>591
俺は C++ やってるからこそ、
あのヘッダシステムのせいで
クラスの依存性切るのに pimpl みたいなおまじないが必要だし、
コンパイル速度が低下するし、
インテリセンスの効きが時々おかしくなるし、
include が大嫌いなんだが。

594 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 09:58:15 ]
C、C++のincludeが遅いのはマクロのせいでしょう

595 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:01:48 ]
C++の

の間違いじゃない?
Cはよほど下手な組み方でもしなければそうそう遅くならないでしょ

596 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:01:52 ]
#includeが欲しいだけならプリプロセッサでもかませばいいじゃん。



597 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:22:18 ]
目立つのはC++になるね。
でもCも速度としては遅いし、ヘッダーを1バイトでも書き換えたら
includeしてる全てのソースファイルを再コンパイルになるのはかわらない。
そういう意味でも遅いよ。

もしマクロがなくて、クラスや関数の定義のみであるなら
リアルタイムコンパイルも可能だよ。

598 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:22:40 ]
C みたいな関数宣言と #define だけのためにあるシステムを、
C++ でクラス定義でも使いまわしたのがそもそもの失敗じゃないか。

private な変数1個追加しただけで、#include してるファイル全部再コンパイルとか
狂ってるとしか言いようがない。

599 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:26:47 ]
そこでpimplイデオムですよってスレ違いじゃねぇかよ

600 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 10:41:17 ]
>>590
すまんその「思い込んでる」のは俺だけど、
俺の「思い込み」だというならもったいぶらずに君のいう別の方法を教えてくれよ。

分かってると思うけど議論の流れからいってIDEでプロジェクトの設定いじるより
不便な方法だったなんの意味もないわけだが、そこは踏まえて頼むよ本当。

601 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:11:56 ]
>>600
普通に教えてくれでいいんじゃね?
頼みかた感じ悪いと思う
いつもそうなん?

602 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:35:10 ]
VSのマクロでCSharpProjectConfigurationProperties3.DefineConstants触るとか

603 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:39:48 ]
>>599
既出 >>593

>>600
定数定義用の static なクラス作って、
絶対に変わらないと言い切れる定数は public const フィールド、
そうでなければ public static readonly なプロパティ。

604 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:41:14 ]
あと、#if SYMBOL 用のシンボル定義は、
むしろヘッダファイルでできるべきではなく、プロジェクトのプロパティですべき
というのが MS の判断。

605 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:54:44 ]
>>604
なんだよやっぱりプロジェクトのプロパティでしか出来ないんじゃないかw

だから「べき」って、確かにそうかもしれんがその不便さを進歩って言えるんかい、
つってんだよ。

606 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 11:55:40 ]
設定ファイルを直にいじれよ



607 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:06:03 ]
多重継承禁止とかもべき論で導入されたわけで

608 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:10:29 ]
DebugやReleaseの他にもプロジェクト構成を作って切り替えるのが正攻法
逆にいえばそれで足りる用途にしか使ってほしくないんだろう

609 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:12:34 ]
C++はtemplateを導入した時点で、#includeでマクロがどうこうといった次元からすでに超越してる。
技術的には可能でもC++のtemplateを模倣する言語は現れないだろう。

610 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:14:17 ]
C++はあと文字列mixinみたいな機能が入れば完全にプリプロセッサと縁が切れるな

611 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:17:23 ]
>>605
これのことでしょ
ttp://msdn.microsoft.com/ja-jp/library/yt3yck0x.aspx

暑いんだからあんまりぎゃーぎゃー喚くなよ

612 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:25:45 ]
>>609
Dとかどうよ

613 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:30:47 ]
>>608
それが正攻法だというのは否定してないよ。
構成の切替方法はあれで便利だし。

ただIDEのあのたった一行の入力欄に「全部の定数を定義する必要がある」のは
不便で使いにくいって言ってるだけ。

しかも(当たり前だが)作った構成の数だけ同じことをする必要がある。
そこにミスが入った場合、非常に発見しにくいとも思うんだが。。

614 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 12:38:02 ]
あっちこっちのファイルに飛び散るより遥かにましだと思うが

615 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:36:11 ]
>>605
「できる」みたいに言ってるやつと >>604 は別人だろ。

できる風に書いてるやつは多分よく読んでないだけ。
要するに、お前の書き込みによく読む価値はないと判断されてる。

616 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:50:34 ]
実に自分を世界の中心に置く「セカイ系」的発想だね。
俺やアイツの誤読はお前の文章に読む価値がないからだ、ってかw

まあ、自分を世界の中心に「俺様中華思想」もいいかもしれんが、
だったら自分の言葉を自分に適用したらどうだろう。
つまりもう少し他人にとって有益な情報を書けよって意味だが。



617 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:51:54 ]
黙ってスルーする能力もないのかよ

618 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:54:44 ]
能力というのは目的合理的に物事を推進する力のことを言う。
では「スルーする能力」という時の「スルーする」ことの目的ってなんだ?
少なくとも俺にとってはそんなものはない。

むしろ馬鹿は叩いておいた方が場のため本人のため、そして自分自身の精神衛生のため、
と思っての行動なんだけどね。

619 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 14:59:03 ]
というか .csproj はただの MSBuild の XML ファイルなんで
テキストエディタで開いてゴリゴリ編集できるんだがそういう
基本的な話は知らんのか?
VS からならプロジェクトのアンロード → **.csproj の編集。

…ついでに言うと、VS 側の CSharpPackage が変な proj ファ
イルでも普通に動くので VsPackage めんどいとき(ビルドとIDE
から適当にファイルが見えて編集できればいい)は .csproj 流用
するといいみたいな。


620 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 15:27:10 ]
csprojのほうはいいんだが、slnのほうは変なGUIDが付いてるので手でいじれん・・・
どっかに何入れればいいか公開されてるのかな?


621 名前:デフォルトの名無しさん mailto:sage [2008/08/02(土) 15:36:53 ]
適当でいい

622 名前:デフォルトの名無しさん [2008/08/02(土) 15:58:49 ]
ソリューション周りの情報なら VSSDK の

msdn.microsoft.com/it-it/library/bb165922.aspx

この辺しか知らん。
・・・が、俺は基本的にいじるのは IDE 上からだなぁ。依存関係とか。


623 名前:デフォルトの名無しさん [2008/08/03(日) 10:39:27 ]
XmlSerializerでstaticなクラスをXMLに保存できないですよね?
アプリ設定情報をstaticにしてどのクラスからもすぐに楽に参照したいんですけど、
staticクラスにするとXmlSerializerは使えないですよね?

624 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 10:41:21 ]
シングルトン

625 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 10:49:08 ]
>>623
・MySettingクラス(仮称)をstaticクラスじゃなくてsingletonにする。

または

・MySettingクラスはstaticのまま、内部の実装としては別のHogeSettingクラスの
インスタンスをもちこいつをXMLシルアル化するようにして、外部にはSaveSetting/LoadSetting
メソッドを公開する。

626 名前:デフォルトの名無しさん [2008/08/03(日) 11:20:33 ]
シングルトンでいきます

ありがとうございました!



627 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:32:44 ]
stringの配列を指定した列挙型の組み合わせに変換したいのですが、
@のところでコンパイルエラーになってしまいます。
どのように実装したらいいんでしょうか・・・


public class ConvertToEnum<T> where T : Enum ←@
{
private T _value;
public class ConvertToEnum(string[] texts)
{
foreach (string s in texts)
{
_value |= Enum.Parse(typeof(T), text, true);
}
}

public T Value
{
get { return _value; }
}

}


[Flags]
public enum TestEnum
{
AAA = 001, BBB=002, CCC=004
}
string[] texts = { "AAA", "BBB", "CCC" };
TestEnum value = ConvertToEnum<TestEnum>(texts).Value;
value : 007

628 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:45:19 ]
コンパイルエラーの内容読むこともできないの?

enumとかdelegateとかで制約は無理

629 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 15:00:54 ]
staticコンストラクタでif (!typeof(T).IsAssignableFrom(typeof(Enum))) throw new Exception();
でおk
でもその例でクラスにする意味がわからない
ConvertToEnum<T>(string[] text)でいいよね

630 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 17:51:29 ]
>>629
クラスにしたのは元のソースがクラスだからです
必要な部分だけ残したら上の形になりました

えーと、Generic制約でEnumを指定できないと、
Aの部分の | 演算子が使えません…

foreach (string s in texts)
{
_value |= Enum.Parse(typeof(T), text, true); ←A
}

_valueをint型にしてもBの部分でコンパイルエラーです…

public T Value
{
get { return (T)_value; } ←B
}

上手な実装の仕方はないでしょうか…

631 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 18:02:54 ]
リフレクション

632 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 18:24:52 ]
where T : struct, IConvertible としておいて

value = default(T);
foreach (string s in texts) {
value = (T)Enum.ToObject(typeof(T), value.ToInt32(null) | ((T)Enum.Parse(typeof(T), s, true)).ToInt32(null));
}

633 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 18:45:43 ]
List<List<int>>型変数に入ってるすべてのintを返すIEnumerable<int>がほしいんだけど、
Linqとか使うと1行で可能?

634 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 18:59:33 ]
listlist.SelectMany(list => list);

635 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 19:08:50 ]
>>634
ありがd。

636 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 19:30:09 ]
|=を使わんでも、文字列をカンマ区切りにして、
Keys k = (Keys)Enum.Parse(typeof(Keys), "Control, Alt, T", true);
みたいにすればいい。



637 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 20:49:00 ]
>>634
おおそんなのが・・・

638 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:19:43 ]
>>634
こういうのが頭の中にすんなり入ってこないorz

639 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:32:35 ]
var array = new[] { new {A="あ", B="いう"}, new { A="え",B="お" } };
var flat = array.SelectMany(x => new[] { x.A, x.B });
Console.WriteLine(string.Concat(flat.ToArray()));
こういう例のほうがわかりやすいかな

640 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:35:33 ]
ラムダ式を華麗に扱えるようになりたい

641 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:40:18 ]
C#3.0でRayToracingとかのArticleあったけれど、あのソースがラムダ使いこなしたサンプルの一つとみていいもんかね。

642 名前:デフォルトの名無しさん [2008/08/04(月) 21:46:35 ]
バイト配列の変換について教えてください。
バイナリファイルよりReadAllBytesでデータをバイト配列に格納後、指定の
バイト数分のデータを2進数の文字列に変換するメソッドを作成しています。

8バイトまではBitConverterメソッドで数値変換し、Convert.ToStringで
2進数の文字列に変換できるのですが、9バイト以上はBitConverterメソッドが
対応していません。この場合、何か良い方法があるのでしょうか?

よろしくお願いします。



643 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:48:22 ]
手抜きするならBitConverter.ToStringとString.Replace

644 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:49:07 ]
どうでもいいが数値変換したらリトルエンディアンになっちゃうぜ

645 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 22:09:26 ]
クリスタルレポートとMicrosoft.Reportingのどっちを使おうか悩む。
普通なら昔からあるものは情報も豊富でバグも枯れてて使いやすい
はずだが、クリレポは悪評ばかり・・・

646 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 23:09:18 ]
>>638
このケースではクエリ式の方がとっつきやすいかな。
from list in listlist
from x in list
select x;

慣れてくればSelectManyを思い出せるようになる。かも。
ILではどっちでも同じことなんだけど。



647 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 23:24:50 ]
>>638
SelectMany は正直無理だと思う。

そのために、
from listist in listlist
from x in list
select x
みたいな記法がある。
これで listlist.SelectMany(list => list) と同義のはず。

648 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 23:26:01 ]
>>641
あれは結構邪道だけどな。

クエリ式が関数型言語っぽい記述できるのをいいことに、
C# 内で関数型言語プログラミングしてるっていう。

クエリ式の目指すところではなくて、副産物的なものだと思う。

649 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 23:56:31 ]
Validatorクラスでの正規表現チェックって
クラサバでもwebでも使えますか?

650 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 02:19:49 ]
>>633 >>634 に便乗して、
List<List<List<int>>> listlistlist; から IEnumerable<int> を得るには、

listlistlist.SelectMany(listlist => listlist).SelectMany(list => list);
か、
listlistlist.SelectMany(listlist => listlist.SelectMany(list => list));
みたいな感じでOK?

もっと良い書き方があったりするのかな?


651 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 05:45:41 ]
>>650
それでOK。

652 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 08:49:25 ]
>>650
それでもいいけど、それは関数化すべき気がする。

static IEnumerable<T> Concat<T>(IEnumerable<IEnumerable<T>> listlist)
{
 return listlist.SelectMany(list => list);
}

を作って、Concat(Concat(listlistlist));

653 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 08:55:21 ]
メソッドと関数って何が違うの?

654 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 08:56:39 ]
メソッドはクラスの一部だけど関数はそうじゃなかったような・・・
というか関数はそもそもC時代の名残だし

655 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 09:03:34 ]
>>653
昔の名残。
OOP 用語的にはメソッド、昔の名残的にはメンバ関数。

単に関数っていうと、グローバル関数(C# では定義できない)のことだけど、
非 OOP 言語ではグローバル関数として定義するような static メソッドのことを関数って呼んだりする。

関数化ってのも、メソッドとして独立させろって意味。
サブルーチン化って言った方がいいかも。

656 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 09:08:55 ]
サブルーチンって更に化石用語な気が。



657 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 09:29:32 ]
Procedure / Function、Sub / Function のように
関数とサブルーティンを分ける言語も多いね。
サブルーティンを戻り値のない関数としたのはCあたりからだったかな。

658 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 10:25:21 ]
BackGroundWorkerとThreadってどっちがパフォーマンスいいの?

659 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 10:38:04 ]
気にするほどのもんでもない

660 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 11:21:39 ]
>>307
.Where 以降の構文は、3.5から追加されたものだと
思うのですけれども、なんと呼称されているでしょうか?

オブジェクト内のメソッド呼び出しのようですし
Linq とはまた別の新しい技法のような気がします。

てか、Where, ToList, ForEach が一般的過ぎて検索しにくい・・・

661 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 11:22:42 ]
拡張メソッド
実態は静的メソッドの呼び出し

662 名前:660 mailto:sage [2008/08/05(火) 11:39:51 ]
72.14.235.104/search?q=cache:XjAX73gxeIgJ:msdn.microsoft.com/ja-jp/library/bb342261.aspx+Where,+ToList,+ForEach+3.5+C%23&hl=ja&ct=clnk&cd=1&gl=jp&lr=lang_ja

というかドキュメント嫁、じぶん
基本型のbuiltin関数を暗黙的にオーバーロードしてる
いうのが何か引っかかる・・・Where, ToList, ForEachは
どこに所属してるメソッドなのかという、Linq難しいな…orz

663 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 11:53:22 ]
for m in Assembly.LoadFrom("Hoge.dll").GetType("Hoge.Tool").GetMethods():
 where(m => (!m.IsPublic && !m.IsPrivate && m.Name[0] == 'A')):
  for elm in m.ToList():
   Console.WriteLine(elm)

.Where(m => (!m.IsPublic && !m.IsPrivate && m.Name[0] == 'A'))
.ToList().ForEach(Console.WriteLine);

sql みたいな書き方をしてる事例ちょくちょく見かける
あれはシンタックスシュガーみたいなもんかしらん

209.85.175.104/search?q=cache:M90LdfsXoOYJ:msdn.microsoft.com/ja-jp/library/system.reflection.fieldinfo.ispublic(VS.80).aspx+IsPublic+IsPrivate&hl=ja&ct=clnk&cd=3&gl=jp&lr=lang_ja

IsPublicは fieldinfo のメソッドか・・・
C#だとメソッドもフィールドの一種なのかな、C++と違うとか

664 名前:660 mailto:sage [2008/08/05(火) 12:01:18 ]
209.85.175.104/search?q=cache:90Q7i7GDavEJ:msdn.microsoft.com/ja-jp/library/system.reflection.methodbase.isspecialname.aspx+IsPublic+IsPrivate+methodinfo&hl=ja&ct=clnk&cd=2&gl=jp&lr=lang_ja

ドよめ
滝に打たれてチネ…orz

665 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 22:50:40 ]
>>660
それもLINQ。

from x in list where x > 10 select x; みたいなのはLINQクエリ式。
list.Where(x => x > 10); みたいなのはメソッド形式のLINQ。

>>663
そう、構文糖衣。
from x in listX
from y in listY
select x * y;
みたいな構文が、メソッド形式ではどうやってもスマートな書き方できなかったから導入されたらしい。

666 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 23:37:27 ]
>>665
その例だと

listX.SelectMany(x => listY, (x y) => x * y)

こうなるけど、例としては不十分な気がする
これくらいにしないと

from x in listX
from y in listY
where x > y
select x * y;

listX.SelectMany(x => listY, (x, y) => new { x, y })
.Where(z => z.x > z.y)
.Select(z => z.x * z.y);

あと、let入るとさらに面倒になるな



667 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 23:45:10 ]
user32.dllのAnimateWindow()を呼び出しているのですが、
CPU負荷が大きくてガクガクします。
負荷を下げる方法ってありませんか?

668 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 00:03:44 ]
AddRange()に二次元配列を渡す方法はないですか?

669 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 00:13:20 ]
>>668
直接は無理。
LINQ 使って軽い変換かければ可能。

例えば、int[ , ] array なら l.AddRange(array..OfType<int>());
int[][] なら l.AddRange(array2.SelectMany(x => x));

670 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 00:57:12 ]
乙です。

671 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 02:23:30 ]
>>666
外部結合になるとクエリ式でももうわけわからん
var r2 =
 from x in "abcdefghijklmn"
 join y in "ABCDEFGHIZ"
 on x equals Char.ToLower(y) into yex
 from y in yex.DefaultIfEmpty('.')
 select new string(new char[] {x, y});


672 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 05:36:57 ]
VS2008EEを使用中です。
C#でDBを使うデスクトップアプリを作る場合、
DBは何を使うのがベストなのでしょうか?

とりあえずSQL compact3.5ってのを弄ってみましたが、
DBファイルが独立して作られてて、なんか妙な気分です。
ビルドしたらアプリに含まれるようになるんでしょうか?

ほかにXMLを使うやり方もあるそうですが、難易度高すぎる気がします。
なにか他にお勧めあったら、教えてくだちい。

673 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 08:23:08 ]
DBをアプリに含めるってのの方が変じゃね?
LINQ使えばXMLもSQL Server Compactも大差ないと思うが。

674 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 08:27:51 ]
>ビルドしたらアプリに含まれるようになるんでしょうか?
そんなん聞いたこともないわ。
Accessのイメージで言ってるのか?


675 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 09:10:50 ]
Firebird使えばできなくもないがXMLで難易度高すぎなら無理だろうな


676 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 09:32:53 ]
>>673,674
別になってるのが普通なんですね(汗
おっしゃるとおり、Accessのようなものをイメージしてましたorz
言われてみれば、Web系でもDBと処理は別になりますよね・・・

>>675
一応、ちょっとだけ弄ってみたんですが、
木構造が複雑になってしまい、これだったら慣れてるRDBのほうが楽かなと。
恥ずかしながらFirebirdは初耳でした。ちょっと調べてみます。



677 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 18:39:17 ]
>676
何がしたいのか分からないけどXmlSerializerあたり調べてみたら?

678 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 19:15:20 ]
「DBファイルが独立して〜」の意味が把握できないけど、アプリにDBを組み込ん
じゃいたいってことなら SQLite とかの組み込みDBって手があるよね。


679 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 19:34:28 ]
>678
俺も>672を読んでそう思ったので組み込みDBにできるFirebirdの名前出した。
けど>676読んだら「RDBが使いたい」ってわけじゃ無い感じがしたんでXmlSerializer言ってみた。


680 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 20:23:58 ]
コントロールのバインドはDBじゃなくてたんなる
int[]とかからも情報を取り込めるですか?

681 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 20:54:29 ]
foreach (var msg in FizzBuzz(100)) {
  Console.WriteLine(msg);
}
ということができるように、
public static IEnumerable<bool> Fizz() {
  while (true) {
    yield return false;
    yield return false;
    yield return true;
  }
}
public static IEnumerable<bool> Buzz() {
  while (true) {
    yield return false;
    yield return false;
    yield return false;
    yield return false;
    yield return true;
  }
}

682 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 20:56:28 ]
public static IEnumerable<string> FizzBuzz(int max) {
  var fizz = Fizz();
  var buzz = Buzz();
  foreach (var i in Enumerable.Range(1, max)) {
    bool isFizz = fizz.First();
    bool isBuzz = buzz.First();
    fizz = fizz.Skip(1);
    buzz = buzz.Skip(1);
    if (isFizz && isBuzz) {
      yield return "FizzBuzz";
    } else if (isFizz && !isBuzz) {
      yield return "Fizz";
    } else if (!isFizz && isBuzz) {
      yield return "Buzz";
    } else {
      yield return i.ToString();
    }
  }
}
こんな感じのメソッドを作ってみたのですが、複数のIEnumerableを並行して進めながら処理するforeachみたいなのってないのでしょうか?
自前でFizzとBuzzを1つずつ進めてるのがいまいちスマートじゃない気がして、複数のIEnumerableを並行して進める手軽な方法ってないでしょうか?
foreach (var i, isFizz, isBuzz in Enumerable.Range(1, max), Fizz(), Buzz()) {
とかみたいな雰囲気でまとめて書く方法ってないですか?

683 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 21:12:29 ]
>>682
ZipWithみたいなのが欲しいということかな?
だったら、デフォルトでは存在しない。自作している人ならちらほら居る。

684 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 21:13:24 ]
うん?
EXEとDBファイルが同じファイルになるのを期待してると思ったんだが。
Accessのイメージって言ってるし。
SQLiteもFirebirdもんなこたないんじゃないの?

SQL compact3.5だっておんなじようなもんでそ?


685 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 00:10:49 ]
サーセン676です。
684さんのおっしゃる「EXEとDBファイルが同じファイル」を期待してました。
DBもMS謹製しか使えないかと思ってましたが、
他のも結構使えるようなので、改めて調べてみます。

686 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 00:36:50 ]
C#プログラムでで正規表現を使っているのですが、
正規表現中にPerlのように
ttp://8-p.info/perl-interpolation/

string hoge = "hogehoge";
Regex r = new Regex(@".*hoge"); //hogehogeが展開される
のようにして変数を展開することはできるでしょうか?



687 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 00:46:55 ]
普通に

".*" + hoge

では駄目な理由は何?

688 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 00:46:56 ]
変数を展開って何?

689 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 00:48:21 ]
ああ、そういうことか。
string.Format かなにかで文字列化してから Regex に食わせればOK。

文字列中に ".*$hoge" みたいに変数入れたければ PowerShell 使えばいいと思う。

690 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 01:35:37 ]
685です。ありがとうございます。
変数を展開したい理由は何かと問われれば
変数hogeの文字列も外部の関数から取得してくるからです。

691 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 02:56:21 ]
>>685?ん?
色々カオスってるぞ。
>>686のリンクも行けないぞ。

692 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 03:10:51 ]
AllowsTransparencyをtrueにするとウインドウフレームが表示できなくなってしまうのですが、
System.Windows.Windowで下のSS最前面のウインドウのようにOpacityを使用するにはどうしたらいいのでしょうか?

最前面のウインドウはSystem.Windows.Formsです。
ttp://www.imgup.org/iup662583.png

693 名前:デフォルトの名無しさん [2008/08/07(木) 10:52:52 ]
質問です。
環境:C#2.0です。
あるファイルパスがあるとして、
同じディレクトリに別のファイルを作りたいとき、
どのようにファイルパスを作ればよいでしょうか。
(パスそのものを作らなくても書き込みできればよいので
FileInfoとかでもよいのですが)

string path1 = @"C:\xx\yy\aa.txt";
FileInfo file1 = new FileInfo(path1);
string path2 = file1.FullName.Replace(file1.Name, "bb.txt");

なんてもの考えましたが完全じゃないですし。
どうやるのが真っ当なやり方でしょうか。
いろいろ調べてみましたがわかりませんでした。
よろしくお願いします。

// javaで言うところの new File(directoryName, filename) なんてのが
// あればと思ったんですけど少なくともFileInfoにはなかったので

694 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 10:59:02 ]
Path.GetDirectoryNameとかPath.Combineとか

695 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 11:33:51 ]
ありがとうございます。調べてみます。

696 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:20:06 ]
objectを引数に取る関数とかobjectのプロパティとかってクラスライブラリを見ただけじゃ
何をセットすればいいのか分からない場合が多いんですがどうやって調べればいいんでしょうか?
ググって事例を探してるんですが、事例が無いと完全にお手上げです。




697 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:23:07 ]
千里の道も一歩から始まることを信じよう
それ、わんつーわんつー

698 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:26:37 ]
確かに.netはobject型を引数に取るとか多いな。JavaでObject型を引数に取るのはあんまり見ないのに。
この辺って何か思想の違いみたいなのがあるん?

699 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:32:04 ]
>>698
Javaはプリミティブ型がObjectを継承してないからじゃないの

700 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:36:16 ]
いざとなったらReflectorで中追っかけてみる

701 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:37:41 ]
>>698
そんなに多いか?
非ジェネリックなコレクション以外あまり思いつかないが…

702 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:40:11 ]
非ジェネリックコレクションとIComaprableあたりは当然として、
WriteLineやString.Format系、Thread関係のデリゲート、
EventHandlerのsender、ほかなんだっけ。

703 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:43:01 ]
ICloneable.Cloneがそう。共変性がないからobjectを返さないわけには行かない。

704 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:45:26 ]
データソース関係とかobjectに何渡すのかわかりにくくないですか?
標準じゃないけど、nplotってライブラリも何を渡すのか分からなくてちょっと困った。

705 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:47:03 ]
JavaとC#とでそういう差が出そうなGenerics関連の違いって思い浮かばないけどな。

706 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:51:09 ]
データバインディングはそうですね。あれはリフレクション使いまくってるから。



707 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:15:33 ]
C#とCだったらC#のほうが入門には適しているでしょうか?

708 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:18:56 ]
うん

709 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:20:44 ]
>>708
ありがとうございます。

それと、勉強するための本を買おうと思っているのですが
有名な物・お勧めの物はあるでしょうか?

710 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:56:16 ]
>>709
ネットで十分

711 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:58:55 ]
>>709
マジレスすると
ufcpp.net/study/csharp/index.html
がおすすめ

712 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 01:02:11 ]
>>711
ああ、それは俺もお勧め。


713 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 02:15:19 ]
>>711
読ませていただきます。
ちなみにVC#というソフトでみなさんはプログラムを書かれているんですか?

714 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 02:16:28 ]
うん

715 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 03:05:21 ]
むしろテキストエディタとWindowsSDKでやってる人がいたら尊敬する

716 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 03:14:34 ]
単なるバカだから尊敬できないな



717 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 03:16:32 ]
.Netが出始めてたころはそれでやってた人もいたようだがな
無料版のIDEも無かったし

718 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 03:21:40 ]
きちんと楽出来る環境が簡単に整えられるのに
わざわざ意味が無い苦労をする人がいたらそれは馬鹿だけど

そう言う環境が簡単には揃わない時代なら仕方ないじゃない

719 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:17:43 ]
今のVC#はテキストエディタとしても異常に快適だからな

720 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:56:00 ]
プライベートで他のクラスからアクセスする必要のないフィールドって内部クラス化した方が良い?
外部クラス?それとももっとスマートな方法ってある?

721 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:06:09 ]
>>720
そのままプライベートのフィールドで持ってたらあかんの?

722 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:13:20 ]
フィールド==インスタンスの話が何故かクラスの話になるから意味が分からなくなる

723 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:44:48 ]
>>721
それじゃインスタンス1つ分にしかならなくね?

724 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:51:40 ]
行数多くなるとVisualStudioのロードが遅くなるから分けようかと思ったんだけど、
実行時に無駄にオーバーヘッド生むよね、本末転倒だったね・・・

725 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 10:59:51 ]
partialだかそんなのなかったっけ?

726 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 11:59:03 ]
VSに負担掛けるほどたくさんの行にフィールドが宣言されてるの?
ロードの時間とか細かいパフォーマンス気にする以前の問題だろそれ
さすがに分けるべき



727 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:07:16 ]
時代はパーシャル!

728 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 18:59:02 ]
トラックで全国回ってた人だねw

729 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 22:45:56 ]
>724
JITコンパイラの最適化を少しくらい頼ってみたら?
時々例外が起きたときのスタックトレースが妙に抜けてることがあって
インライン展開されてる様子がわかるとちょっと嬉しくなるよ。

730 名前:デフォルトの名無しさん [2008/08/09(土) 18:42:15 ]
簡単なエディタを作っているんですが、
RichTextBoxを使ってて、描画領域を少し右にずらして、その空いた領域に
行番号を描画しています。Graphics.DrawStringです。
当然スクロールされたら行番号を変えなくちゃいけないですが、このとき
再描画する前に前回描画した行番号を消すには、
どんな方法が一番最適なのでしょうか。


731 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 18:56:44 ]
背景色で塗りつぶす

732 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:22:56 ]
趣味でやるぶんにはExpress Editionで十分ですか?


733 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:25:03 ]
趣味の内容によるかな。いわゆるベータ版マニアだとインストールできないアドインが
多いから十分じゃないかもしれない。

734 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:25:51 ]
>>732
十分。

735 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:27:40 ]
パッケージフェチとしてはやっぱり製品版じゃないと

736 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:32:03 ]
ドMな俺はSDKとメモ帳が最高。



737 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:35:41 ]
俺なんか仕事で評価版つかってるから大丈夫

738 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:36:52 ]
>>733
何か使えない機能があるということですか

>>734
そうですか

>>736
頑張ってください

739 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:38:12 ]
>>737
不具合はないですか?

740 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:40:25 ]
silverlight2やSQLServer2008用のアドインはSTD版以上だったかな。

741 名前:デフォルトの名無しさん [2008/08/09(土) 20:43:02 ]
TextBox.Text = str;
とやっているのですが、strが大きいと処理時間遅くなるものなのですか?

str.Lengthが4320162だったのですが、10secくらいかかります。
中身のイメージではポインタのコピーとかではなく、実データを
コピーしているから遅いのでしょうか?

これを早くする方法はないのでしょうか?


742 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 20:44:08 ]
TextBox使うのやめて、オーナードローにする

743 名前:デフォルトの名無しさん [2008/08/09(土) 21:18:00 ]
文字列代入の時だけ別スレッドで動かせばいいんですかね?

744 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:22:01 ]
コントロールにはそれを所有しているスレッドからしかアクセスできん

745 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:26:41 ]
>>742
の言ってる事は、
遅いのは文字列のコピーじゃなくて、その文字列の描画に時間が掛かってるんだよ

という事

746 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:33:15 ]
4320162ってヘタしたらXPのソースコードよりデカい気がするんだけど
そんなものTextBoxに表示してどうしろとw

ちなみに、RichTextBoxで代替したらあんがいあっさり解決しない?



747 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:39:23 ]
> XPのソースコードよりデカい
またまたご冗談を

748 名前:デフォルトの名無しさん [2008/08/10(日) 00:08:05 ]
>746
RichTextBoxだと7秒くらいでTextBoxで17秒くらいかかります。
バイナリをヘキサで表示してるんですが、大きいものだとこの7秒とかの間
かたまってしまって・・・

>745
TextBox.Text = str;
の前と後にStopWatchクラスで処理時間を出してるんですが、
この代入には描画処理も含まれているということでしょうか?
RichTextBoxはコントロールで表示されているところの描画のみ
してくれるわけではないのでしょうか?

>744
コントロールに別スレッドからでもアクセスする方法ってありません
でしたっけ?Invokeとか?

RichTextBoxには表示したいところだけバイナリを情報を代入してけば
いいんですかね?スクロールするたびに出したり消したりするとか?

749 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:11:16 ]
>>748
InvokeはUIスレッドが今やってる仕事を中断させて別の仕事をやらせる関数。


そんなでかいデータ扱うなら横着しないでユーザコントロール書けばいいだろ。

750 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:47:50 ]
>>749
しつこいね君も。
簡単に言うけどかなり面倒だしそれなりに難しいと思うよ。
表示することだけ考えてない?

751 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 00:56:37 ]
>>750
それならもう勝手にしろよw

ヘキサエディタでできあいのコモンコントロール使ってるのあったら教えてね

752 名前:デフォルトの名無しさん [2008/08/10(日) 01:03:48 ]
すいません横着させてくださいっす。新しくユーザーコントロールはきついっす。
RichTextBoxがそういう仕様ならやはりちょびちょび表示ですかねぇ。。。

753 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:11:16 ]
仮想モードでListViewでもつかえば

754 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:30:38 ]
プログラム板ってさ、低脳ばっかだよね。
OpenGLスレくらいだなマシなのは。

755 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:31:29 ]
OpenGLスレ見てみたがアホばっかりなんだが…

756 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:50:58 ]
>>755
どんなスレ見てるの?



757 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 06:43:35 ]
>>748
TextBox.AppendText()は使ってみた?
InvokeRequiredとInvoke, BeginInvokeはUIスレッドにマーシャリングしてくれるメソッド

758 名前:デフォルトの名無しさん [2008/08/10(日) 07:23:19 ]
>757
TextBox.AppendText(str)も同じくらい時間かかりました。

>753
>仮想モードでListView
kwsk

759 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:24:17 ]
zip内のファイルを実行したい(wav鳴らすとか)のですが、そのためには一時フォルダ等に
ファイルを展開しなければならないのでしょうか?
zip内に格納したままあれこれやるってのは不可能なのでしょうか?

760 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:28:07 ]
うん

761 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 10:40:14 ]
SharpZipLibでメモリに展開し、Win32APIのwaveOutWriteやDirectSoundに流せばできるんじゃね?

762 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 10:41:55 ]
Streamに展開すればいいんじゃね?

763 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 13:56:58 ]
質問です

DBからデータを取得し、その構造体を返すクラスを作成しています。
私個人としては、datasetの形でかえしたいと思っています。

しかし、速度の問題から、
listを返すようになっています。


datasetで値のやりとりをするのと、<list>でやりとりをするので
そこまで速度やパフォーマンス、メモリの負担などはかわるのでしょうか?

ただのgetsetのプロパティのついたクラスのarraylistを、データとして使うほうが
早いのでしょうか?
僕としては、ここは.NETらしくdatasetを使いたいのですが。

764 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:03:31 ]
とりあえず測ってみればいいんじゃないかな

765 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:06:39 ]
構造体返すんだったらデータセットよりも素直にコレクションで返してくれた方が
使う側としては便利だと思うけど

766 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:13:54 ]
>>758
kwskじゃなくてまずググれよ



767 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 14:14:57 ]
.NETの構造体の意味を誤解している可能性大

768 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 15:14:59 ]
代入では無くて文字列の描画に時間がかかってるなら、
ユーザードロウしない限り改善不可能じゃないか?

769 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 17:51:36 ]
>>765
そうでしょうか。

たとえば、DataSet(型付Datasetという意味です)でデータを持つか
構造体でデータを持つか
そのメリットデメリットってそもそもなんなんでしょうか

datasetだと、複数テーブルをセットして、
リレーション張ったり、
うけとった側で、フィルターかけたり、nullチェック等のメソッドが用意されていたり
デザイナでデザインできたりするところだと思うのですが

構造体にすると、なんか.NET的な組み方じゃなくなってるような気もしたりしなかったり

僕が間違っていますか。

770 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 18:05:43 ]
時と場合による

771 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 18:25:37 ]
とりあえず「構造体」というものについて勘違いしてるのはよくわかった
クラスじゃなくてほんとに構造体で返すようなデータならデータセットで返すなんてありえない

772 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 21:53:50 ]
構造体って値で返すのか

773 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 22:11:58 ]
>>771
すいません、
えっとarrayistを返すか、datasetを返すかということでした。すいません。

774 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 01:12:06 ]
作り手はdatasetのほうがいいだろうさ

使う側はどういう用途なの?

それがわからんと良いとも悪いともいえん

775 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 12:33:44 ]
MSDNライブラリには

SpinWait のコードの実行は、
複数のプロセッサが搭載されているコンピュータで発生する可能性のある問題を回避するように設計されています。
たとえば、Hyper-Threading技術を使用した複数の Intelプロセッサが搭載されているコンピュータで、
SpinWait は、特定の状況で、利用できるプロセッサ リソースがなくなることを回避します。

とあるんですが、マルチコアCPUではThread.SleepよりThread.SipnWaitを使った方が良いのでしょうか?

776 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 12:42:36 ]
ケースバイケース



777 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 15:32:52 ]
>>775
ていうかその説明は Sleep 関係ない。
Sleep と比較してどうこうじゃなくこのメソッドの実装は HT やマルチコア
みたいな環境でも問題起こりませんよっつー意味

なんでそんな注意書きがあるのかはスピンウェイト、スピンロック
あたりでググってまずそのメソッドが何するのか分かれ。
ついでに Sleep との違いも


778 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 16:12:16 ]
マルチコアだけでなくハイパースレッディング環境でも
一応うまく動くようになってるよってことじゃないの?


779 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 16:16:00 ]
マルチコアやハイパースレッディングみたいな環境でも問題起こらないって…
普通マルチコアやハイパースレッディング環境でしか使わないだろ

でハイパースレッディングの場合も一応うまく動くようになってるよってことだろ?
実装によっちゃ無意味にCPU目一杯ぶん回すだけで意味ない可能性もあるから。


780 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 16:19:36 ]
コードを見ようと思ったがネイティブに飛んでてわからなかった。
予想できることは一定時間ごとにスレッドを譲る仕掛けか、
一定時間でSleepに変更するかといったところだろう。
1CPUの場合はすぐさまスイッチしないと意味が無いし、
2CPU以上ならある程度スピンさせてても大丈夫だろう。
HTの場合はその中間くらいで手打ちしてるんじゃなかろうか。

781 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 17:44:20 ]
スピンはスレッド中断には移行しない。
だから自分でバックオフを持たなきゃならない。
まあそもそも長時間かかる可能性がないとこだけにしとくのが無難だけど。

ついでに大抵シングルコア環境では使わない。

HTの場合は処理なし命令?でスピンして、有効な処理ではないことが
CPUに分かるように実装されてるはず。


782 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 18:42:10 ]
いやシングルコアでは使わないって言うか使うよ。高精度な
というかスイッチしない待ちのとき使うものでコア数関係ない
あえて言えば Win 上で動くからか

ちなみに HT の場合の話だがシェアするからビジーさせると
それが埋め尽くしちゃってパフォーマンスが極端に低下する。
だから PAUSE 命令が追加されててスピンにそれを使う必要が
あるんだがそれ使ってますよみたいな意

783 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 19:38:13 ]
シングルコアでスイッチしない待ちをやること自体が少ないんじゃないの?


784 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 19:40:27 ]
あ、ここでのシングルコアはHTは含んでない。

785 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 21:13:56 ]
>>783
内部的でいいんなら Moniter やらの同期機構が内部で使ってる。
アプリレベルだと例えば単純にスイッチは精度が悪い(Sleep は「最低」
指定時間待つ API)ので timeBeginPeriod(or MMCSS)でスケジューラ
いじって Sleep とスピンウェイトのあわせ技がいい。
機会や直で使うジャンルが少ないのは同意。コア周り、メディア、ゲーム
系しか知らん。

というか一定時間(クロック)待つようなメソッドの使い方(ぶっちゃけタイマ
みたいなもんだ)がマルチコアしか使わないになんでなるんだよという話。
ぜんぜん別やん。
もしかしてマルチコアじゃなくマルチスレッドっていう話か?

…それはそれとして思い出したんだが iterations を現実時間から計算する
方法知っている人いたりしない?

786 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 21:55:36 ]
いや、一般にメディア、ゲーム系なんていう特殊な用途以外じゃ
まず使う機会がないって感覚だった。
Winで一定時間(クロック)待つような使い方自体が特殊用途なイメージだったわ。

ところでMonitorやらってシングル環境でもSpinWaitしとんのかね??




787 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 22:15:43 ]
>>786
モニタの場合は基本的に他のスレッドからの開放待ちだから1CPUではスレッドを譲らないと意味が無い。
マルチCPUの場合は最初はスピンで待って、一定時間越えたらSleep系のWaitに変える。
1CPUでスピンをやるとしたら、微妙なタイミングのIO制御や
他のディバイスからの割り込み待ちといったところで普通はディバイスドライバの仕事。
ゲームとかビデオとかそういうのが絡まない限り1CPUでビジーループはありえない。


788 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 22:28:21 ]
だよねってことが聞きたかった。
単にシングル環境での
>内部的でいいんなら Moniter やらの同期機構が内部で使ってる。
について疑問だっただけ。


789 名前:デフォルトの名無しさん [2008/08/12(火) 14:28:25 ]
C#のおもしろい、本・ホームページ教えてけれ。

今、GUIをソースコードからうってcscでコンパイルしてるんだけど、おもしろい。

なんでもいいから、教えてけれ。

790 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 15:19:44 ]
ちょっとGUIでアプリ(簡単な物)を作ろうと思ったのですが
C+APIはもう嫌になったので(殴
新たに何か言語を勉強すべくC#に目をつけたのですが、

・GUIアプリ製作のためにC#を学ぶ
この考えはまずいでしょうか?(もしくは他にもっと良いものがある?)
(プログラミングのスキルはCをそこそこ,JAVAは超初心者 です。)

791 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 15:25:51 ]
いいと思うよ

792 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 15:30:00 ]
>>789
猫でもわかるは知ってるよね?
ttp://www.kumei.ne.jp/

793 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 16:07:25 ]
>>790
全然良い。
逆に言うと画像処理とか線形代数計算ならわざわざC#を選ぶ必要性がないしね。
イベントと継承が分かってくれば単純なGUIアプリならすぐ作れるようになるよ。
頑張れ。

794 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 16:24:17 ]
JavaだろうがC#だろうがマルチスレッドになってからが本番だと思う

795 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 16:44:19 ]
>>789
Google 先生の評価に従ってみるのもいいと思う。

796 名前:789 mailto:sage [2008/08/12(火) 18:44:30 ]
>>792
猫はC#編もあるんだ。昔、WinAPIのときちょっと参考にしていたよ。
やってみるよ。さんくす!

>>795
Google先生でググってみます。色々あってどれがいいか見定めなきゃいかんけど、
がんばるよ。ありがとう。



797 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:56:08 ]
MicrosoftPressのプログラミング.NET Frameworkが良かった
デリゲートやガベージコレクション、非同期処理などについてとても詳しい解説があるよ

798 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 09:50:20 ]
DataGridViewを利用した自作カレンダーを作ったんだが、
これを複数のフォームで使いたいのね。
そういう時、クラスライブラリを作るのか、プロジェクトにクラス追加するのか、
どっちがいいの?
てか、プロジェクトに追加するクラスって、どういう時に使うの?






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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