09/05/03 10:20:58
>設定ミスなのかAzure SDKのバグ
自分のプログラムが悪いとはこれっぽっちも考えてないのね
373:デフォルトの名無しさん
09/05/03 11:22:10
>>372
「俺」って言うのは日本語で「自分」を示す一人称の一つだよ。
374:デフォルトの名無しさん
09/05/03 11:42:24
設定ミスと考えてるってことはプログラムは悪くないと思ってるってことだろ
375:デフォルトの名無しさん
09/05/03 11:44:41
設定はプログラムでするだろ
376:デフォルトの名無しさん
09/05/03 12:15:09
何言い返してんだよ、本人か?
そうでなけりゃ、自分のプログラムミスを設定ミスと言い直してごまかす人か?
377:デフォルトの名無しさん
09/05/03 12:58:12
あ、回答どうも。
>>370
がんばってみたんだけど無理だった。。
とりあえず、MS提供のサンプルで同じことが起こるのは確認済み。
別環境でやっても同じく。
>>371
なるほど。そういうオプションがあるのか。
IISでその辺設定するにゃどうしたらいいんだろ。調べてみますわ。
>>372
ランタイムの初期化って設定って言いませんかねぇ。
あと、言うの忘れてたけど.svc使ってIISの機能でホスティングさせてたんで。
378:デフォルトの名無しさん
09/05/03 13:43:49
WCFはIISでホスティングさせているか否かでだいぶ違うから、
そういう大事なことは先に言えよな。
あとはトランスポートになに使ってるかかな、BasicHttpBindingとかそんなの。
379:377
09/05/03 14:05:03
失礼(´・ω・`)
バインディングはBasicHttpBindingにしてる。
ウィザードのデフォルトはWebHttpBindingだけど、
それだとそのまま使うとなんか例外投げたので。
とりあえず、MSの開発者側も認識している既知の問題としては、
WCFアプリをAzureにうpすると、自分のホスト名を、
ユーザが使うロードバランサのアドレス(URLリンク(***.cloudapp.net))ではなく、
分散環境内でアプリが実際にロードされている鯖(URLリンク([guid].cloudapp.net))のもの
として認識してするせいで、それをendpointとしてWSDLを生成してしまう、
というのはどっかで見かけたけど、それがこの問題とも関連しているのかよく分からない。
380:デフォルトの名無しさん
09/05/03 14:06:36
ちなみにこれ。
URLリンク(code.msdn.microsoft.com)
381:デフォルトの名無しさん
09/05/03 14:10:18
内部識別子でWSDLを公開している様子
URLリンク(wcfazure.cloudapp.net)
URLリンク(wcfazure.cloudapp.net)
けど、ローカルで動かす分には鯖名自体は(もちろん)合ってるから関係ないはずではあるんだけど。
382:デフォルトの名無しさん
09/05/04 15:59:03
まずはIISで動かしているのかASP.NET開発サーバーで動かしているのか確認かな。
後者なら127.0.0.1(localhost)しか受け付けない。
タスクトレイにASPNET開発サーバーアイコンが表示されているようなら後者。
IISで動いているなら、コンピューターの管理からIISの設定を確認する。
まずWEBサイトの識別のIPアドレスで「未使用のIPアドレスすべて」になっているかどうか。
ここが127.0.0.1になっていればそれでしか繋がらない。
次にこのアプリの仮想ディレクトリを確認でセキュリティ関係に矛盾がないか確認。
よくやってしまうのが、統合認証+匿名認証の設定になっていて、
WEBで公開しているディレクトリにIUSR_xxxxのアクセス許可がないケース。
統合認証で認証された場合は問題ないが、匿名の場合にアクセス拒否を食らう。
383:デフォルトの名無しさん
09/05/04 17:09:52
>>382
ありがとう。
いま、手元に環境がないので、後日確認してみて報告しますわ。
384:デフォルトの名無しさん
09/05/04 18:30:41
C#でテキストを1行ずつ読み込み、条件に合った行を取得するような簡単なものを組んでいるのですが、
条件に合った行から連続する3行とかを取得するにはどうすれば良いのですか。
初歩的かもしれませんが、ご教示願います。
385:デフォルトの名無しさん
09/05/04 18:32:17
>>384
とりあえず下の場合の動作は?
テキスト
1234
1234
1234
abcde
abcde
abcde
条件: 1234
386:デフォルトの名無しさん
09/05/04 18:37:32
>>384
条件に一致した行のインデックスとって自分でそこから2行読めば?
387:デフォルトの名無しさん
09/05/04 18:41:59
なんかJavaより面倒そう
388:デフォルトの名無しさん
09/05/04 18:42:02
var result = new List<string>();
int flag = -1;
foreach (string line in lines)
{
if (条件に合ってる行の場合)
{
flag = 0;
}
if (flag =! -1)
{
result.Add(line);
flag++;
if (flag > 3)
{
flag = -1;
}
}
}
389:デフォルトの名無しさん
09/05/04 18:50:20
=! だと・・・?
390:デフォルトの名無しさん
09/05/04 19:08:04
grepと同じ挙動ならこんな感じか
IEnumerable<string> Grep(IEnumerable<string> source, string pattern, int after) {
int n = 0;
foreach (var line in source) {
if (line.Contains(pattern)) n = after + 1;
if (n > 0) {
n--;
yield return line;
}
}
}
391:デフォルトの名無しさん
09/05/04 19:25:31
>>384
bbbが条件だとして、そこから3つを取得
string[] list = { "aaa", "bbb", "ccc", "ddd", "eee" };
var result = list.SkipWhile(s => s != "bbb").Take(3);
392:デフォルトの名無しさん
09/05/04 19:44:16
linqを使いたいお年頃なんですね
393:384
09/05/04 20:03:01
返事が遅くなりました。
1234
aaa
bbb
ccc
2345
ddd
eee
fff
のようになっていまして、ReadLineで順に読んでいって、1234を発見したときに、
aaa、bbb、cccの3行を取得するようにしたいです。
1234の行は取得できるのですが、その次の行を読んでbreak;の方法がいまいちわかりません。
394:デフォルトの名無しさん
09/05/04 20:10:11
もし1234が見つかったらのifステップ中は
ReadLine();
ReadLine();
ReadLine();
じゃだめなの(;´Д`)
395:デフォルトの名無しさん
09/05/04 20:10:39
>>393
1234が2回以上あらわれることはあるか、
また1234に続く3件のうちに1234が含まれていた場合の扱いは?という確認だろ。
そういうことはありえないという条件でもよいのだが。
その条件が確定すれば簡単だよ。
396:デフォルトの名無しさん
09/05/04 20:16:30
すみません。おそらくすごい初歩的なことだと思います。
検索する行(この場合は1234)は、他の行には一切ありません。
>>394さんの3回記述をするのは、次の2行も取得できるということですか?
Webはいろいろ調べてみたのですが、1行ずつ読み込む方法しか書いてなかったもので。
397:デフォルトの名無しさん
09/05/04 20:30:44
>>385はスルーですかそうですか
398:デフォルトの名無しさん
09/05/04 20:31:52
>>391はスルーですかそうですか
399:デフォルトの名無しさん
09/05/04 20:33:15
>>398
いやまて391は流石に役に立たないだろう根本的な部分で
400:384
09/05/04 20:41:24
>>385を書かれた時点で自分の伝えたいことが伝わってないことがわかり、をれを参考にして例示を上げてみました。
スルーするつもりはありませんでしたのでご容赦ください。
今>>394の方法でやってみたところ、思った通りの挙動が確認されました。
まだ本片手で勉強している最中ですので、このような質問内容になったことをお詫びいたします。
みなさん、ありがとうございました。
401:デフォルトの名無しさん
09/05/04 20:59:57
ReadLine()は
今まで読んだ行の位置からスタートして
次読み込む行を調べて
その行に移動して
その行に書いてあることを読んで
今読んだ行を覚えておいて
読んだ内容を返す
っつー動作をするんじゃね?
402:デフォルトの名無しさん
09/05/05 17:19:16
ちなみに和布蕪(めかぶ)は, 作者の好物です.
403:デフォルトの名無しさん
09/05/07 00:49:52
.net framework って、普通1.1なの?
2.0や3.0, 3.5って企業や業務アプリで使ってないノア?
404:デフォルトの名無しさん
09/05/07 00:52:12
使っていいよ。
405:デフォルトの名無しさん
09/05/07 00:53:08
2.0は十分なシェアあるだろうが可能な限り低いバージョンでやるべきだろ
406:デフォルトの名無しさん
09/05/07 01:03:04
ほとんど2.0じゃないかな。1.1まではベータ版みたいなものだし。
407:デフォルトの名無しさん
09/05/07 01:10:24
FrameworkClientProfileで開発しとけば色々便利
408:デフォルトの名無しさん
09/05/07 01:22:03
俺様メモからの引用
--
.NET Framework 3.5 Client Profile
3.5 SP1のサブセット
インストール可能な環境は
Windows Server 2003; Windows Server 2008; Windows Vista; Windows XP(SP2以降)
であるが、さらに次の条件が付加されるため実質XP(SP2以降)だけが対象となる。
フルセットの.NET Frameworkが導入されていないこと。(2.0以降だけでなく1.1や1.0も!)
フルセットの.NET Frameworkがすでに導入されている場合に
Client Profileのインストーラは3.5SP1フルセットのインストールを行う。
409:デフォルトの名無しさん
09/05/07 01:40:15
3.5 SP1
410:デフォルトの名無しさん
09/05/07 01:41:20
3.5 SP1 フルインストールってすごい長いんだよな・・・
411:デフォルトの名無しさん
09/05/07 02:18:57
>>394で正解とか他の解答者がさすがにかわいそうすぎたw
412:デフォルトの名無しさん
09/05/07 02:19:21
Silverlightで皆幸せ
413:デフォルトの名無しさん
09/05/07 03:58:32
和暦のカレンダーコントロールが必要になった
めんどくさいからだれか知ってたらサンプルのページ紹介か作ってくれw
サードパーティはバグに引っぱられるからかるからなるだけ使いたくねえ…
もう和暦とか辞めればいいのに
西暦で統一してぇ・・・
414:デフォルトの名無しさん
09/05/07 04:07:32
天皇制がある限り無理
415:デフォルトの名無しさん
09/05/07 07:10:32
面倒だけどそんなに手間じゃないよな
416:デフォルトの名無しさん
09/05/07 11:28:41
まあ、「今後は」西暦に統一したとして、
過去に作った分にまで遡及させるのは無理だから
実際に和暦が消えるのは数十年後よ。
417:デフォルトの名無しさん
09/05/07 11:37:04
太陽暦移行後だけでいいなら簡単だろうな。
418:デフォルトの名無しさん
09/05/07 11:59:10
普通は平成、昭和、大正、明治をサポートすれば大丈夫なんだろうけど、
お寺の過去帳データベースを作ったときはまいったな。
419:デフォルトの名無しさん
09/05/07 13:47:29
和暦とか旧暦とか六曜とか月齢とかまとめて計算してくれるクラス欲しいな
海外ローカルも含めて国際カレンダークラスみたいなもの。
420:デフォルトの名無しさん
09/05/07 13:50:57
暦計算だけならCalendarクラス使えばいいだろう。
六曜や月齢はないが。
421:デフォルトの名無しさん
09/05/07 17:17:40
和歴はあってもイイけど業務で使うのは辞めて欲しい
役所が一生懸命使ってる限りは無理だろうけどさ
422:デフォルトの名無しさん
09/05/07 17:36:57
和暦に命をかけてるんじゃないかってほどこだわってた客がいたな
昭和何年何月何日は存在しないから入力できないようにしてくれとか
結果的にあってんだからいいんだよ!
423:デフォルトの名無しさん
09/05/07 18:14:23
世界のローカル暦サポートなんて、Unicodeの比じゃない難事業だぞ。ヨーロッパ各国に限っても、
ユリウス暦からグレゴリウス暦の移行期は国ごとに日付が違うし、ユリウス暦の初期は閏年が
いつだったのかわからないし、ユリウス暦導入前は最高神祇官が勝手に閏年を決めるし、一方
ギリシアではポリスごとに暦が違うし……
日本だって南朝と北朝で暦が違っていたり、暦書がなくて暦を復元できない時代があったり、
ああもう面倒くせえ
424:デフォルトの名無しさん
09/05/07 18:16:23
旧暦の暦の正当性は閏月とかあってとてもじゃないけど保障できない。
さきの過去帳DBなんだけど、古いのはもう計算じゃ出せなくてテーブルで持つしかなかった。
古いのは書き写したときのミスとかいろいろあってもう記述がいい加減なんだよね。
咸豊とか中国の元号が出てきたときにはもう勘弁してください状態だった。
南北朝や九州年号はさすがになかった・・
425:デフォルトの名無しさん
09/05/07 19:35:09
さすがだな、おまえらw
”和暦のカレンダー”だけでここまで穿り返すとはwww
426:377
09/05/07 19:43:50
>>382
今日いろいろ調べてみた。
結果としては、Development Fabricは内部でASP.NET開発サーバを使っているのではないか、
という感触を持った(サービスが自分をホストしている鯖の情報を取る方法を知らないので確定的ではないけど)。
AzureのドキュメントにはIISを使ってるって書いてあるし、ASP.NET開発サーバアイコンも表示されていないんだけど、
IISにアクセスログを吐かせてみても、127.0.0.1:81を叩くときだけログに残らないし、
よく考えると、80番の設定で起動してるのに81番で起動するのは、IIS以外に鯖を起動した上でホストしている証拠かな、と。
そうなると、ホスト名がつかえないのは、現状では「仕様」ということになるんだと思う。
とりあえず、CTPの文字が外れるまではこのままなんだろうなぁ、というオチにしておく。
みんな、いろいろ教えてくれてありがとう。
427:デフォルトの名無しさん
09/05/07 20:20:27
すみません、
HTML文からタグのみを取り出す関数はありませんか?
逆に言うと、HTML文のタグ以外を削除するような関数
のことですが。
428:デフォルトの名無しさん
09/05/07 20:32:18
安易に考えたらXML名前空間の機能使って取り出すとか?
429:デフォルトの名無しさん
09/05/07 20:34:59
関数はないな
正規表現使えばタグの抽出だけなら比較的簡単だ
>>428
XHTMLじゃない限りほぼパース不可能だよ
430:デフォルトの名無しさん
09/05/07 20:35:48
酷いHTML読まされる事考えるなら、MSHTML使うのが一番楽じゃないかね
431:デフォルトの名無しさん
09/05/07 20:56:10
SgmlReader っていうのもある。
432:デフォルトの名無しさん
09/05/07 21:04:57
CommitChanges()はパフォーマンス面で悪かったりする?
普通に多用していいもの?
433:432
09/05/07 21:42:45
ああスレ間違えた
434:デフォルトの名無しさん
09/05/08 00:20:25
>>427
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
435:デフォルトの名無しさん
09/05/08 00:26:09
System.Windows.FormsのHTML DOMはWebBrowserなしだと普通には作れないのが難
標準でwebスクレイピングライブラリとか作られんかのう
436:デフォルトの名無しさん
09/05/08 00:31:13
寺とかちょっとした歴史の勉強だなw
437:デフォルトの名無しさん
09/05/08 00:31:51
プログラムにフォルダ名が入っているのですが、いれないようにするにはどうすればいいですか?
438:デフォルトの名無しさん
09/05/08 00:34:01
SilverLight
439:デフォルトの名無しさん
09/05/08 00:37:25
>>435
んじゃ、これ。
URLリンク(htmlagilitypack.codeplex.com)
440:デフォルトの名無しさん
09/05/08 00:38:35
すんません、書きなおします
プログラムをバイナリエディタでみたところプログラム内にフォルダ名が書き込まれているのですが、
ビルド時、かきこまれないようにするにはどうすればいいですか?
441:デフォルトの名無しさん
09/05/08 00:38:55
>>437
相対パス使うか、定義ファイルにパス書くか、レジストリにパス書く。
442:デフォルトの名無しさん
09/05/08 00:39:43
>>440
リリースビルド & .pdb を作らないようにすればいいんじゃなかったっけ?
443:デフォルトの名無しさん
09/05/08 00:40:43
あ、ありがとうございます
ビルドー詳細設定でデバッグ情報をnoneにしたらいけました
あせった><
444:デフォルトの名無しさん
09/05/08 00:48:43
ビルドーってディルドーに似てる
445:デフォルトの名無しさん
09/05/08 02:31:26
2000年問題に対応したとき、「なんでこんなややこしい閏年の置き方をするんだ!」とか
思ったものの、よく勉強してみたら、現行暦がいかに単純で合理的か納得したw
446:デフォルトの名無しさん
09/05/08 06:10:15
>>445
日本の季節感にはまったくあってないけどな
昔は一番寒い時期が1月1日で新年を迎えると暖かくなる一方だった
戦争に負けたアジアは所詮白人のおまけということだな
447:デフォルトの名無しさん
09/05/08 07:14:01
>>446
おじいちゃん乙
448:デフォルトの名無しさん
09/05/08 07:21:58
>>446
中国行って旧正月でも祝ってればいいんじゃない
449:デフォルトの名無しさん
09/05/08 07:22:24
そのせいで地方によってはいくつかの行事は月遅れでやることが多いけどな。
ひな祭り、七夕、盂蘭盆会などなど。
450:デフォルトの名無しさん
09/05/08 10:56:45
なんか思いっきりスレチ方向へ進んでないか?ww
451:デフォルトの名無しさん
09/05/08 12:22:22
じゃあディルドーの話に戻そう
452:デフォルトの名無しさん
09/05/08 23:07:53
三叉路まで戻って別の違う道に進んだみたいな。
453:デフォルトの名無しさん
09/05/08 23:17:29
ディルドゥーなら喜んで食いついたのに
454:デフォルトの名無しさん
09/05/09 13:32:15
vbでいうところの
for i=0 to 4
label(i)="abc"
next
みたいな
ループの添字で複数の連番的なオブジェクトを指定するにはどうしたらいいのでしょうか
オブジェクトに番号振るっていう状態をどういうのかがわからなくて調べられないです
1日いろいろ探してみましたが思いつく宛が詰まってしまったのでヒントが欲しいです
455:デフォルトの名無しさん
09/05/09 13:35:24
配列に入れておいて、あとは同じように。
456:デフォルトの名無しさん
09/05/09 15:23:13
ありがとうございます
457:デフォルトの名無しさん
09/05/09 21:20:30
質問です
フォームのテキストラベルにH2Oと入れたいんだけど2を下付きにするにはどうすればいいのですか?
Hのラベル、2のラベル、Oのラベルを3個並べてお茶を濁してきたけど、詳しい方どうか教えてください。
458:デフォルトの名無しさん
09/05/09 21:23:57
そうやるしかない
459:デフォルトの名無しさん
09/05/09 21:30:23
自前で描画するしかないな Paintイベント使って
460:デフォルトの名無しさん
09/05/09 21:30:36
>>457
U+2082 ₂ SUBSCRIPT TWO
461:デフォルトの名無しさん
09/05/09 22:04:02
>>457
文字を書いてつくったイメージを貼り付ければいいじゃん
462:デフォルトの名無しさん
09/05/09 23:36:39
H₂0
な なるほど!thx
463:デフォルトの名無しさん
09/05/09 23:44:44
リッチテキスト
464:デフォルトの名無しさん
09/05/09 23:48:55
₀₁₂₃₄₅₆₇₈₉
465:デフォルトの名無しさん
09/05/12 11:40:49
ComboBoxの項目の表示色を項目内容によって変えるとき
DrawItem()でDrawString()すれば良いんだけど。
ComboBoxの数が多いのでユーザコントロールにするとしたら
どこでDrawString()すればいいんだろう?
OnDrawItem()で直接書いちゃっていいのかな?
466:デフォルトの名無しさん
09/05/13 23:19:39
その前にやってみれば?
467:デフォルトの名無しさん
09/05/14 01:11:13
>>465
OnDrawItemでいいよ。
468:デフォルトの名無しさん
09/05/14 09:36:16
ありがとう。
OnDrawItem()でうまくいきました。
ついでに背景色とかも変更してみます。
469:デフォルトの名無しさん
09/05/14 16:20:55
指定したディレクトリ以下のすべてのファイルを効率的に列挙していく場合どのクラス、メソッド使うのがいいですか?
GetFilesみたいにリストを作って返すのではなくWin32APIのFindFirstFile/NextFile相当のものが使いたいんですが。
470:デフォルトの名無しさん
09/05/14 17:01:05
Linq
471:デフォルトの名無しさん
09/05/14 17:08:21
FindFirstFile/NextFile
472:デフォルトの名無しさん
09/05/14 17:18:48
.NETは非コンテナに対するイテレータが弱すぎる
473:デフォルトの名無しさん
09/05/14 17:29:26
yieldがありゃ十分だろ
474:デフォルトの名無しさん
09/05/14 17:30:22
>>469
.NET Framework 4.0 のGetFiles
475:デフォルトの名無しさん
09/05/15 02:24:16
実行時の object 階層を値込みで表示用の tree にまとめ上げたいんだけど、
その手のライブラリなど、ご存知の方いますでしょうか? Reflection で自前
で再帰するしかない?
476:デフォルトの名無しさん
09/05/15 02:42:10
CodeProjectとか探せばありそうな予感。
まぁ実装してもたいした手間じゃな下げだけど。
477:デフォルトの名無しさん
09/05/16 13:13:47
>>475
>実行時の object 階層を値込みで表示用の tree にまとめ上げたいんだけど、
object階層の意味がよく分からないけど、
Visual Studioのウォッチウィンドウみたいな感じで
インスタンスの情報を展開してくれるのが欲しいってこと?
だったらオブジェクト参照が循環している場合もあるので注意かな。
シリアライザ/デシリアライザみたいにグラフとして扱うか、
ウォッチウィンドウみたいにクリックするまで子ノードの評価を行わないといった
工夫が必要になると思う。
478:475
09/05/16 16:25:07
>>476
いや、それが結構面倒くさい。CodeProject はなさそうでした。
>>477
なるほど、シリアライズして XML を使うのもありですね。
どうもありがとう。
479:デフォルトの名無しさん
09/05/16 16:58:37
ソースいじくれるのならExpandObjectConverterでPropertyGridとかがお手軽じゃね
480:90
09/05/16 20:36:16
すいません、教えてください。
ユーザコントロールを作成していますが、
既存の型を使用した場合は問題ないのですが、enum型を定義して
使用すると、このコントロールを使用するプログラムで
デザイン時に初期値を選んだ場合は問題ないのですが他の候補(この場合type2)を
セットすると
「'System.Windows.Forms.Control.ControlCollection' に 'xxxComboBox' の
定義が含まれておらず、型 'System.Windows.Forms.Control.ControlCollection' の
最初の引数を受け付ける拡張メソッドが見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。」のエラーになります。
481:デフォルトの名無しさん
09/05/16 20:39:20
名前を間違えました。90のかた申し訳ありません。
ソースはこんな感じです。
namespace Controls
{
public partial class xxxComboBox : ComboBox
{
public enum DrawingMode : int
{
type1 = 0,
type2 = 1
}
private DrawingMode _ItemDrawingMode;
[Category("Custom")]
[DefaultValue(typeof(DrawingMode), "type1")]
[Browsable(true)]
public DrawingMode ItemDrawingMode
{
get { return _ItemDrawingMode; }
set { _ItemDrawingMode = value; }
}
482:デフォルトの名無しさん
09/05/16 20:40:31
private Color _FirstBGColor;
[Category("Custom")]
[DefaultValue(typeof(Color), "White")]
[Browsable(true)]
public Color FirstBGColor
{
get { return _FirstBGColor; }
set { _FirstBGColor = value; }
}
public xxxComboBox()
{
InitializeComponent();
_ItemDrawingMode = DrawingMode.type1;
_FirstBGColor = Color.White;
}
...
}
使用する側では参照設定にこのdllを指定しています。
FirstBGColorプロパティは他の色に変更しても正しくビルド・実行できます。
DraingModeのプロパティをtype2に変更してビルドすると上記の
エラーがでます。
エラー箇所を見ると
this.xxxComboBox1.ItemDrawingMode = Controls.xxxComboBox.DrawingMode.type2;
の行が解決できないようです。
using Controls;を加えても同じです。
ControlCollectionに追加するにはどのメソッドを使用すればいいのでしょうか?
483:デフォルトの名無しさん
09/05/16 22:32:52
使う側を
this.xxxComboBox1.ItemDrawingMode = 1;
にしたらエラーでないよね?
484:デフォルトの名無しさん
09/05/16 22:41:13
何もおかしなことはない。エラーメッセージの通り
this.Controls は Control.ControlCollection クラスのインスタンスだろ
485:480
09/05/17 08:30:40
>>483, 484
ありがとうございます。
this.xxxComboBox1.ItemDrawingMode = 1; は型が違うのでエラーになります。
呼び出し側でusing Controls;を定義して、コードで(例えばForm1_Load内で)
xxxComboBox1.ItemDrawingMode = xxxComboBox.DrawingMode.Type2;
のように書けば、正常にビルド・実行可能です。
ただし、先程書いたようにデザイナからプロパティ値を変更すると
エラーになります。ControlCollectionにxxxComboBoxを追加して
導出してやらないといけないのかと思いますが、やり方が分かりません。
486:デフォルトの名無しさん
09/05/17 09:23:29
名前空間にglobal::Controlsなんてのはやめようよ
せめてライブラリ名.Controlsに
487:480
09/05/17 11:08:57
お騒がせしました。解決しました。
そうだよな、namespaceの名前を変えよう・・・
ということでControlsからmalib.Controlsにnamespaceを変更したら
ちゃんと動作しました。
488:デフォルトの名無しさん
09/05/20 21:40:44
この言語笑うしかないわw いい意味で。
今C#の勉強の意味もこめてC#のいろんな機能をフルに利用するつもりで
ちょっとしたプログラムを作っているんだが
本当にC++、Javaから発展してきた言語とは思えん。
まず、DataGrid使って表を作る。
row.SetValues(1,2,3)とやることで、一行のデータを一気に入れられる。
そこで一行全部の背景色をつけたいと思った。
SetValuesと同じように、row.SetStyle(style)とやりたかったが、
残念ながらSetStyleはセルごとしかなかった。
DataGrid(正確にはDataGridViewRow)になんでSetStyleが無いんだよ!って
怒るような事例なのに、拡張メソッドを使うことで継承を利用せずに
いとも簡単にrow.SetStyle()を付け加えることができるとはw
489:デフォルトの名無しさん
09/05/20 23:09:50
>>488
それでC#にケンカ売ってるつもり?
まさかそんなわけないよねwww
490:デフォルトの名無しさん
09/05/20 23:13:11
C#はあれだよあれ
メロンパン言語だ
491:デフォルトの名無しさん
09/05/20 23:25:01
どう見ても誉めてるじゃん
492:デフォルトの名無しさん
09/05/20 23:36:57
コンポーネントと言語をごっちゃにして、的外れだけどな。
493:デフォルトの名無しさん
09/05/21 00:24:35
うん
C# の話じゃなくてフレームワークの話だな
494:デフォルトの名無しさん
09/05/21 00:25:41
C#じゃなくてWinFormsの話だな。
C#はソースが読みやすいとか、一貫した仕様でスッキリしてて覚えやすいとか色々あるけど、
何よりVSっていう最強のIDEが付っきりで開発支援してくれるのが最大のアピールポイントだと思う。
VSが無ければ他の言語でいいけど、一回VS+C#で慣れると他の言語やる時にかなりメンドクサイ。
・・・あれ、ここって相談室だよな?
495:デフォルトの名無しさん
09/05/21 00:34:35
C#ならまずdelegateを褒めたいな。リスナめんどい。
496:デフォルトの名無しさん
09/05/21 00:42:09
Enumerable.DistinctにはなぜFunc<TSource, TSource, bool>を受け取るオーバーロードがないんだ
497:488
09/05/21 00:44:37
>>492
> コンポーネントと言語をごっちゃにして、的外れだけどな。
言っとくけど、言語の話だよ。
mix-inといえばわかるかな?
(標準ライブラリの)クラスに、メソッドを後付できる。
という言語仕様。
498:デフォルトの名無しさん
09/05/21 00:47:05
拡張メソッドは便利だな、で終わる話なのに、つらつら書かれても・・・
ってことを言ってるんだと思うよ。
499:デフォルトの名無しさん
09/05/21 00:48:35
俺「拡張メソッドは便利だな」
他の人「そうだな」
で終わってくれればいいのに、
コンポーネントとかWinFormsの話だなとか
間違ったこと言い出すからレスせざるを得なかったんだよw
500:デフォルトの名無しさん
09/05/21 00:49:48
>>497
あきらかに主題の文章量と副題の文章量の比がおかしいww
おまえは女かwwwwww
501:デフォルトの名無しさん
09/05/21 00:51:06
>>499
先に言っとく。基地外(500など)は無視したほうがいいよw
502:デフォルトの名無しさん
09/05/21 00:52:42
>>501
おけw
間違ったことを何も言っていないのに、
なんで変なやつがまとわりついてくんだか。
こちとら本格的にC#はじめて五日目だ。なめんじゃねーぞw
503:デフォルトの名無しさん
09/05/21 00:54:31
それでは次の型どうぞ~
504:デフォルトの名無しさん
09/05/21 01:01:24
System.Collections在住 : ArrayList さん
最近みんなジェネリック、ジェネリックって言って僕を呼んでくれないんです。
昔はあんなにちやほやされてたのに・・・。
これから僕はどうしていけばいいんでしょうか。
505:デフォルトの名無しさん
09/05/21 01:02:54
つまらん
それでは次の型どうぞ~
506:デフォルトの名無しさん
09/05/21 01:42:30
ブラウザの機能が安定しません。
public Form1()
{
InitializeComponent();
webBrowser1.Navigate("URLリンク(www.google.co.jp)");
}
たったこれだけの実装ですが、googleのページがすぐに表示されるときと
ずっとまっ白でまったく表示されない時があります。
環境は、XPProSP2、IE6です。
どなたか解決方法を知りませんか?
507:デフォルトの名無しさん
09/05/21 01:47:34
つける薬は無い
508:デフォルトの名無しさん
09/05/21 01:48:23
ロード後に Navigate しても状況は一緒?
509:デフォルトの名無しさん
09/05/21 01:54:11
ロード後にというのがよくわかりませんが、
ボタンをひとつつけて、その中でNavigateしても状況はかわりません。
非常に安定しないんです。
510:デフォルトの名無しさん
09/05/21 01:56:19
ウェブブラウザーコントロールは一度「about:blank」を表示してから
目的のページを表示するんが一般じゃなかったっけ?
511:デフォルトの名無しさん
09/05/21 02:04:35
>>510
書き忘れましたが、それも試して効果はありませんでした。
public Form1()
{
InitializeComponent();
webBrowser1.Navigate("about:blank");
webBrowser1.Navigate("URLリンク(www.google.co.jp)");
}
512:デフォルトの名無しさん
09/05/21 02:06:14
じゃあ、無理じゃね? 素直にリロードしてもらえよ。
513:デフォルトの名無しさん
09/05/21 02:13:33
わかりました。
自分でもかなり調べてダメだったので、諦めることにします。
ありがとうございました。
514:デフォルトの名無しさん
09/05/21 02:51:04
前にAxWebBrowser使ってた時に俺もそんなことあったな。Navigateするタイミングだと思うんだけど。
起動時にNavigateするようにした時に稀にあった。
とりあえず、起動時にいきなりNavigate使う時はコンストラクタじゃなくてLoadイベントなり登録してそこでやった方がいいと思う。
それでこの症状が直るわけではないと思うけど。
515:デフォルトの名無しさん
09/05/21 12:03:16
>>506
webBrowserだけじゃなくて
IE6のそのものが、ずっと真っ白のままで表示されないことがあるんだが・・・
AVGのリンクスキャナを停止してからは少しマシになったかも?
普段はChromeを使っているから見なかったことにしてるけど。
516:デフォルトの名無しさん
09/05/21 14:18:15
>>506とおんなじコードで試してみたけど、
何度やっても問題なく表示されるな。
環境はXPProSP2、IE6、VS2008Pro
517:デフォルトの名無しさん
09/05/21 14:49:26
webBrowser1.BusyがTrueのときそうなるんじゃないか?
518:デフォルトの名無しさん
09/05/21 15:58:51
>>515
ウィルス対策ソフトは切ってます。
>>516
ほんの2日ほど前まで私もその環境でしたが、なぜか動きません。
XPProSP3、IE8、VS2008Exにしましたが、改善はありません。
>>517
ちょっと見てきます。
519:デフォルトの名無しさん
09/05/21 16:02:12
取り敢えず514な
System.Windows.Forms.WebBrowserはコントロール上に乗って無くても大丈夫なように作られてるけど一応
520:デフォルトの名無しさん
09/05/21 16:23:25
>>517
■PG
public Form1()
{
InitializeComponent();
Console.WriteLine("IsBusy:" + webBrowser1.IsBusy);
webBrowser1.Navigate("about:blank");
webBrowser1.Navigate("URLリンク(www.yahoo.co.jp)");
Console.WriteLine("IsBusy:" + webBrowser1.IsBusy);
}
■出力
IsBusy:False
'Test.vshost.exe' (マネージ型): 'C:\WINDOWS\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll' が読み込まれました
IsBusy:False
■結果
画面まっ白
>>514
LoadイベントでやってもThread.sleep(5000)をnavigateの前後に入れてもまっ白になることが多々ありました。
521:デフォルトの名無しさん
09/05/21 18:07:17
Shownを使え
522:デフォルトの名無しさん
09/05/21 22:09:23
IE でダメなら、WebBrowser でもダメだろよ。
523:デフォルトの名無しさん
09/05/21 22:32:09
ReadStateがcompleteになるまで待ったほうがいいんじゃないかな?
524:デフォルトの名無しさん
09/05/21 22:49:46
ContextMenuStripに追加したToolStripMenuItemの
DropDownItemsに追加したToolStripMenuItemのイメージ余白の消し方を教えてください。
1階層目はShowImageMarginをFlaseにすれば消せるのですが
2階層目以降のToolStripMenuItemは余白が出たままになってしまいます…。
525:デフォルトの名無しさん
09/05/22 01:41:24
>>313さんのMecabの返り血をAnisで受けると文字化けするんですけど、
文字化けしない方法をどなたか教えてください orz
526:デフォルトの名無しさん
09/05/22 01:44:57
キャー!
527:デフォルトの名無しさん
09/05/22 01:46:46
PtrToStringAuto だとどうなる?
528:デフォルトの名無しさん
09/05/22 02:00:25
>>527
こんななりました。。
?慣???麩????????????弊(ry
529:デフォルトの名無しさん
09/05/22 02:26:54
Shift_JIS(CP932)をUTF-8と誤認識してるんじゃね。
530:デフォルトの名無しさん
09/05/22 03:09:18
俺はこれでできた
[DllImport("libmecab.dll")]
extern static int mecab_new2(string arg);
[DllImport("libmecab.dll")]
extern static IntPtr mecab_sparse_tostr(int m, byte[] str);
[DllImport("libmecab.dll")]
extern static void mecab_destroy(int m);
int mecab = mecab_new2("");
this.textBox2.Text = Encoding.Default.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Default, Encoding.Unicode.GetBytes(
Marshal.PtrToStringUni(mecab_sparse_tostr(mecab, Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(
this.textBox1.Text))))))).Replace("\n", "\r\n").Replace("\r\r\n", "\r\n");
mecab_destroy(mecab);
531:デフォルトの名無しさん
09/05/22 06:06:52
これはひどいコード・・・
532:デフォルトの名無しさん
09/05/22 06:24:15
なんのためのマーシャリングなのかって感じだな
533:デフォルトの名無しさん
09/05/22 14:52:19
printPreviewDialog1.Bounds = this.Bounds;
printPreviewDialog1.ShowDialog();
こう書いても何故かthisと重なって表示してくれない
大きさは反映されるのに位置が自動的に決定されてしまう
解決方法知ってる方いたら教えてください
534:デフォルトの名無しさん
09/05/22 15:08:59
ウィンドウの初期位置を指定するプロパティがあるからそれをManualだったかなんかにする
535:デフォルトの名無しさん
09/05/22 15:32:25
PrintPreviewDialogにStartPositionプロパティは無いみたいです
536:デフォルトの名無しさん
09/05/22 15:40:11
.NET Framework クラス ライブラリ
PrintPreviewDialog..::.StartPosition プロパティ
537:デフォルトの名無しさん
09/05/22 15:49:14
インテリセンスに出ないので無いと思ってましたが頑張って手打ちしたら出来ました
ありがとうございました
538:デフォルトの名無しさん
09/05/22 15:55:42
>頑張って手打ち
ワロタ
気持はわかる
539:デフォルトの名無しさん
09/05/23 18:31:31
>>424 クソワロタ
540:デフォルトの名無しさん
09/05/24 01:39:48
笑い事じゃねえよ!
541:デフォルトの名無しさん
09/05/24 11:01:56
いや、声出して笑っちゃったよw
ユニークな仕事だなw
542:デフォルトの名無しさん
09/05/24 12:58:03
たぶん日本で唯一だy。食いっぱぐれなくていいな。
543:デフォルトの名無しさん
09/05/24 14:30:22
\拍手を打つ仕事があるときいてやってきました/
544:デフォルトの名無しさん
09/05/24 16:14:58
ListBoxの、選択されたアイテムを囲っている破線を消したいのですが可能でしょうか?
なぜか一瞬だけ、選択していないアイテムに破線が出るので消したいと思っています
545:デフォルトの名無しさん
09/05/24 16:45:38
>>544
独自描画にすれば消せるんじゃないかな。
546:デフォルトの名無しさん
09/05/26 10:30:51
その破線はキーボードフォーカスの存在を見せるためにある。
勝手に消されると状況によってはユーザーが混乱すると思うが
それでもいいなら>>545の言うようにオーナードローしては。
547:デフォルトの名無しさん
09/05/29 20:30:10
label.Text = "Value: ";
このようなValueを表示するラベルを貼りました。
スペースの後に増減する数字を代入していくのですが、どうやるのがいいのですか?
"Value: "が無い場合は単純で、
labal.Text += i.ToString();
でよかったのですが、、
548:デフォルトの名無しさん
09/05/29 20:45:57
>>547
labal.Text += i.ToString(); = labal.Text = labal.Text + i.ToString();
549:デフォルトの名無しさん
09/05/29 20:49:05
>>547
string.Format
550:デフォルトの名無しさん
09/05/29 22:01:44
if(i==0)
label.Text = "Value: 0"
else if
....
551:デフォルトの名無しさん
09/05/30 17:38:53
コンストラクタ名のとこにクラス名書かなきゃならないという無様な仕様は
未来永劫そのままなの?
552:デフォルトの名無しさん
09/05/30 17:59:09
そりゃ、そんな根幹にかかわるところ変更はできないだろ。
嫌なら新しい言語作るしか。
553:デフォルトの名無しさん
09/05/30 18:11:25
不自然かもしれないけどC++やJavaで十分に受け入れられてるからな
はじめの頃のC#ではキーワードを少なくすることが重視されてたみたいだし
554:デフォルトの名無しさん
09/05/30 18:23:57
Javaの、ソースファイル名とpublicクラス名を同じにしとかないとエラーだよーん。
の舐めた仕様よりはマシになってるとは思う。
555:デフォルトの名無しさん
09/05/30 18:34:15
>>551
同感。同じことを2度書くのは無駄だよな
もう.ctorでいいのに
556:デフォルトの名無しさん
09/05/30 18:39:31
まあ、元々がC++プログラマーを逃がさないようにする目的があったから、
あの構文は変えようがないでしょ。
C# 開発者的に、C++ との互換性重視しすぎて失敗したなぁと思う部分もちらほらあるみたいなんで、
今よりさらにもうちょっと .NET が普及したら、その辺りなおした新言語を作るのもありかもしれないけど。
557:デフォルトの名無しさん
09/05/30 18:43:24
Font Font = new Font
558:デフォルトの名無しさん
09/05/30 18:44:46
>>557
var Font = new Font();
559:デフォルトの名無しさん
09/05/30 18:45:32
newはインテリセンスがなきゃ発狂する構文だが、あるから我慢できるレベル。
var使う事自体が冗長
560:デフォルトの名無しさん
09/05/30 18:50:41
>>559
いやー、var は要るよ。
宣言と代入は分けたい。
new なくすとすると、例えばどういう構文?
C++ のスタック割り当て時みたいに、クラス名() だけとか?
561:デフォルトの名無しさん
09/05/30 18:53:18
Python みたいに font = Font() とか書けたら嬉しさのあまり自決する
562:デフォルトの名無しさん
09/05/30 18:55:01
>>561
それはなぁ、型名と同じ名前のプロパティ定義できる C# だと文法的にあいまいになりそう。
563:デフォルトの名無しさん
09/05/30 18:57:39
後からの拡張とか考えると、new とか var とかの構文解析の起点になる部分は削らない方がいい。
font = Font() なんて認めたら、多分、後から機能足せなくて泣く。
564:デフォルトの名無しさん
09/05/30 19:13:55
結局コンストラクタの構文は無駄?必要?
565:デフォルトの名無しさん
09/05/30 19:16:03
>>561
それ出来るとIntelliSenseの暴発を招くから、今の型推論によるvarでの定義がバランス的にちょうどいい。
566:デフォルトの名無しさん
09/05/30 19:16:07
今のC#の方向性考えると必要。
C#の原型とどめないような改変が許されるんなら別にどっちでも。
567:デフォルトの名無しさん
09/05/30 19:19:12
キーワードconsを導入すれば万事解決
568:デフォルトの名無しさん
09/05/30 19:31:22
ぶっちゃけなれればどうでもいい
569:デフォルトの名無しさん
09/05/30 19:50:07
>>565
同感、C#は強く強くインテリセンスを意識した文法であって欲しい。
でないと、今のライブラリでさえ全体を憶えきれないのにこういうサポート外されたら気絶する。
570:デフォルトの名無しさん
09/05/30 21:19:51
何でPythonがはやってるんだ?
前に来た時はDが話題だったような…
571:デフォルトの名無しさん
09/05/30 22:39:22
個人的にはもう少し型を意識したJavaScriptのような言語がはやって欲しいな。
572:デフォルトの名無しさん
09/05/30 22:43:12
>>571
JavaScriptは十分はやってるだろ
573:デフォルトの名無しさん
09/05/30 22:47:18
PowerShellいいぞ。PowerGUIのコード補完との相性もかなり良好。
$a = [xml]"<data>foo</data>"
$a.
で候補にdataが出てくるんだぜ。
ソースコードじゃなくプロンプトで実行しながらじゃないと駄目だけど。
574:デフォルトの名無しさん
09/05/30 23:02:46
「C# .NETアプリケーション開発 徹底攻略 C# 3.0/.NET Framework 3.5対応」
という本で、FormのLoadイベントはコンストラクタ完了よりも先に実行される(ことがある?)
とか書かれてるんだけどほんとにあるの?
どうもこの本思い込みで書いてるような部分も見られてちと怪しんだが…
575:デフォルトの名無しさん
09/05/30 23:31:51
InitializeComponents で子コントロールにプロパティを設定する際に、子から
親フォームが呼ばれてLoadされることが危惧されている。
576:デフォルトの名無しさん
09/05/30 23:38:37
そのフレームワークいいのかな
設計が甘いのでは?
577:デフォルトの名無しさん
09/05/30 23:44:14
甘いねぇ。
578:デフォルトの名無しさん
09/05/30 23:47:51
>子から親フォームが呼ばれてLoadされる
ってどういう状態かわからん…
579:デフォルトの名無しさん
09/05/30 23:49:48
んーマルチスレッドと例外絡みのこと書いてあるとこもでたらめだしなー
580:デフォルトの名無しさん
09/05/30 23:51:20
ちゃんと引用したらいいと思うよ
581:デフォルトの名無しさん
09/05/31 00:11:54
>>574
うろ覚えだけど、
Win32だと、CreateWindow()内で、WM_CREATEを直接呼び出してたような気がする
(CreateWindow()の復帰値はWM_CREATEの復帰値に依存する)
なので、
- C#のFormのコンストラクタ内で内部的にCreateWindowの呼び出しを行う
- FormのLoadはWM_CREATEに相当する
の2つの条件が成り立てば
>FormのLoadイベントはコンストラクタ完了よりも先に実行される
は、成り立つかもしれない
582:デフォルトの名無しさん
09/05/31 00:19:12
子が初期化待たないで親を Visible = true したら起きた。
でも、普通しねえよなぁ、こんなことwww
583:デフォルトの名無しさん
09/05/31 00:19:31
>>581
そんなこと考えるまでもなくマネージドだけで成立するよ、意味があるかどうかは別として
public class Form1 : Form {
public FFFF() {
Ctrl ctrl = new Ctrl();
this.Controls.Add(ctrl);
ctrl.Do();
Debug.WriteLine("Ctor");
}
protected override void OnLoad(EventArgs e) {
Debug.WriteLine("OnLoad");
base.OnLoad(e);
}
}
public class Ctrl : Control {
public void Do() {
Form form = this.FindForm();
if (form != null) form.Show();
}
}
相互参照はやっかいだね
584:デフォルトの名無しさん
09/05/31 00:22:05
namespace WindowsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
MessageBox.Show("end of init");
}
private void timer1_Tick(object sender, EventArgs e) {
Visible = true;
}
private void Form1_Load(object sender, EventArgs e) {
MessageBox.Show("Form.Load");
}
}
}
でタイマのintervalは1。
585:デフォルトの名無しさん
09/05/31 00:31:27
その前に
コンストラクタでこんなことしていいんか
586:デフォルトの名無しさん
09/05/31 00:38:47
そもそもそんなこする方がやばいんだから
しないように修正するべきだろう。
587:デフォルトの名無しさん
09/05/31 00:39:33
フォームをNewしたらいきなり表示されるとか、冗談ではないわ。
588:デフォルトの名無しさん
09/05/31 00:46:51
しないように済む方法を指導しないテキストがクズだな。
589:デフォルトの名無しさん
09/05/31 00:46:50
引用した方がいいんだが、何せ立ち読みで読んだだけなんで、すまんね。
しかし、デリゲートの非同期実行でEndInvokeせずに、なんと例外が無視されてしまうのだ!!
みたいなこといって、非同期実行するメソッド内で即座にコントロールにInvokeして、これで例外をとれる
っておまえそれ非同期実行の意味全然ないだろうがよとか、こんなの見るとなんか書いてあることが信用できない。
590:デフォルトの名無しさん
09/05/31 01:04:13
あー、エスパーすると、非同期実行すると例外取れないから同期しましょう、
と書いてあるのか?
591:デフォルトの名無しさん
09/05/31 01:11:44
そういうこと
592:デフォルトの名無しさん
09/05/31 01:17:58
その本でスレッド周りに何書いてあるのか、ちょっと気になってきたww
593:デフォルトの名無しさん
09/05/31 01:39:23
意外と好評な書評も。
URLリンク(mag.autumn.org)
594:デフォルトの名無しさん
09/05/31 02:11:24
んー今はどうかわからんけど、
Formは2回以上ShowDialogすると動作保証されない
だった気がするけどな。
ナレッジに出てなかったっけな…
595:デフォルトの名無しさん
09/05/31 07:20:32
C#で複数接続ができるサーバーを作成しているのですが、多くの接続を受け付けると、
「転送接続からデータを読み取れません: ブロック不可のソケット操作をすぐに完了できませんでした。」
というエラーが出て、例外が発生してしまいます。
誰かこのエラーの解決方法をご存じないでしょうか?
よろしくお願いします。
596:デフォルトの名無しさん
09/05/31 07:30:32
XPのコネクション制限に引っ掛かってるとか。
597:デフォルトの名無しさん
09/05/31 07:48:28
>>596
XPのコネクション制限には引っかからない程度でも発生するんですよね…
# 10本くらいConnectが発生すると5本目くらいからエラーが発生→例外→…という感じで
598:デフォルトの名無しさん
09/05/31 09:22:23
サーバOSやTCP/IP Pacherとかで制限ない状態で試してみれば?
599:デフォルトの名無しさん
09/05/31 09:51:46
その前にプログラムを
600:デフォルトの名無しさん
09/05/31 13:22:18
自分以外のコネクションが5~6個あるんでしょ?
601:デフォルトの名無しさん
09/05/31 14:13:55
VistaSP2と2008サーバでは撤廃されたっていうからXPでもパッチこないかな・・・
いやがらせとして残されたりして。
602:デフォルトの名無しさん
09/05/31 14:15:20
>>593
これWM_CREATE代わりなんだ、確かにShowDialogするごとに呼び出されるね、名前が悪いよな。
603:デフォルトの名無しさん
09/06/01 12:05:26
C#というか.netで使える
rubyでいうところの,Narray
pythonでいうところのNumPy
のような配列の形で演算してくれるクラスライブラリはありますか?
604:デフォルトの名無しさん
09/06/01 12:21:34
>>603
コンセプトがまるで違うけれども、あえて言えばLINQがそのような処理を担当するライブラリと言えるかと思われます。
だけれども、そういう操作そのものを求めるとちょっと、というかまったく違うものかも
やりかたとしては二つのシーケンスを一つのシーケンスにまとめる、そこに select なりで全体に演算を施す、といった具合。
605:デフォルトの名無しさん
09/06/01 12:46:05
数値演算ライブラリが欲しいと言ってるのに、linq挙げるってのはないだろw
でも、.NET向けってのは商業ものしか知らんわ。
BLAS系の.NETバインディングは探せばありそうだけど。
606:デフォルトの名無しさん
09/06/01 12:53:14
>>603
詳細はまだ調べてないけど、.NET で線形代数を助けてくれるライブラリなら
Math.NET があるみたい。
URLリンク(mathnet.opensourcedotnet.info)
607:デフォルトの名無しさん
09/06/01 13:01:57
>>605
そうですか?むしろ汎用度の高いライブラリだと思うんですけどね。
自分は今は線形代数周りは全部LINQで構築してしまいましたけど
608:デフォルトの名無しさん
09/06/01 13:04:41
そもそもLINQってのはテクノロジー()笑の名前であって、ライブラリの名前ではないと思うんだが。
609:デフォルトの名無しさん
09/06/01 13:04:55
LINQのコンセプト、モナドと抽象線形空間の相性がいいというか……
実数上の線形空間はもちろん、複素数でも有限体でもいけるし、いっそ関数を基底とかも。
まぁなんかそんな感じてす
610:デフォルトの名無しさん
09/06/01 13:15:52
LINQは集合演算
mapもあるしリスト演算(コンベア的な)もつかえるし
そういういみじゃん
611:デフォルトの名無しさん
09/06/01 13:26:56
LINQtoObjectによる各種演算処理からLINQtoSQL or LINQtoXMLと次々と同一コンセプトでつながっていくのも気持ちいいしね。
612:デフォルトの名無しさん
09/06/01 18:04:30
列挙型を含んだクラスをシリアライズしようとすると
例外が発生してしまいます。
↓こんな列挙型です。
public enum ActionType
{
[XmlEnum(Name = "Single")]
One,
[XmlEnum(Name = "Double")]
Two,
[XmlEnum(Name = "Triple")]
Three
}
なにか方法などありますでしょうか?
613:デフォルトの名無しさん
09/06/01 18:10:14
例外の詳細ぐらい書けよ
614:デフォルトの名無しさん
09/06/01 18:15:12
IXmlSerializableを実装しろ
615:デフォルトの名無しさん
09/06/01 22:20:33
アンマネージコードからコールバックされるマネージコードで例外をアンマネージ側に
漏らしたくない場合は以下のMyCallBackのような処理であってる?
public delegate bool CallBack();
[DllImport("hoge.dll")]
private static extern int Hoge(CallBack callback);
static void MyCallBack()
{
// このメソッド内で発生した例外を hoge.dll に漏らしたくない
RuntimeHelpers.PrepareConstrainedRegions();
try {
// hoge
} catch (Exception e)
Console.WriteLine(e);
}
}
static void Main()
{
Hoge(new CallBack(MyCallBack));
}
616:デフォルトの名無しさん
09/06/01 22:25:23
それはいいけど渡し方がダメ
アンマネージコードに渡したデリゲートはstaticフィールドに入れとかないとGCされて死亡
617:デフォルトの名無しさん
09/06/01 22:25:31
エラー時コールバック(イベント)でも登録できるようにするべきじゃないかな。
常にコンソール出力だけでOKなら別にいいかもだけど。
618:デフォルトの名無しさん
09/06/01 22:29:47
>エラー時コールバック(イベント)でも登録できるようにするべきじゃないかな。
>常にコンソール出力だけでOKなら別にいいかもだけど。
おっと、CERじゃこんなのは無理か。
ってその前にコンソール出力も無理なんじゃないか?
619:デフォルトの名無しさん
09/06/01 22:37:08
なんかイマイチやりたいことが伝わってこない
例外握りつぶしてしまっていいのか
620:デフォルトの名無しさん
09/06/01 22:45:50
>public delegate bool CallBack();
>static void MyCallBack()
>Hoge(new CallBack(MyCallBack));
返り値違うぞ
621:デフォルトの名無しさん
09/06/01 23:07:24
>>616
GCHandleいじるのが作法上正しいのでは
622:デフォルトの名無しさん
09/06/01 23:22:17
>アンマネージコードに渡したデリゲートはstaticフィールドに入れとかないとGCされて死亡
このコードだと問題ないけどね。
もちろんこういう構造じゃない場合は問題あるので考慮は必要。
623:デフォルトの名無しさん
09/06/01 23:29:05
問題ないかどうかはHogeの中身による
非同期にコールバックされたり戻ったあとも向こうで関数ポインタ保持されたりしたら死ぬ
624:デフォルトの名無しさん
09/06/01 23:59:45
非同期にコールバックする頃にはプログラム終了してるんじゃないかな、この場合
625:デフォルトの名無しさん
09/06/02 00:11:12
この場合ってhogeの中身が何も書いてないんだから
何も判断できない
626:デフォルトの名無しさん
09/06/02 00:31:25
static void Main()
{
Hoge(new CallBack(MyCallBack));
}
だから後でコールバックされるような使い方じゃないと「想定したら」、だよ。>このコードだと問題ない
627:デフォルトの名無しさん
09/06/02 07:29:09
ホゲが何者かわからん状態で
てめー勝手に都合の良い想定をするのは愚の骨頂じゃないか
628:デフォルトの名無しさん
09/06/02 09:57:11
未来永劫大丈夫。
PCのメモリも640KBで十分だし。
629:デフォルトの名無しさん
09/06/02 11:05:07
別に普通の想定だろ。
まあ別に軽く突っ込んでみただけで、ホントにそれでいいとは思ってないよ。
630:デフォルトの名無しさん
09/06/02 11:28:47
>>628
いつまでそんなネタひっぱってんだよ化石
631:デフォルトの名無しさん
09/06/02 19:10:23
登録しといて後で呼び出してもらう形の方が想定としては一般的だと思うんだが
P/Invokeでは特に
632:デフォルトの名無しさん
09/06/02 19:10:47
未来永劫ひっぱるぜ
633:デフォルトの名無しさん
09/06/02 19:27:06
だから、このコードだと、なんだろ?
634:デフォルトの名無しさん
09/06/02 19:33:36
Hogeが非同期ならこのコードでも死ぬよ
635:デフォルトの名無しさん
09/06/02 19:44:12
CallBackが引数無い、返り値はbool、例外は関数の外に出したくない
工夫のしようがないよね
hogeのインターフェイスを変更可なら色々出来るが
636:デフォルトの名無しさん
09/06/02 22:18:06
>>634
いやまずあり得ないね。
まあ意味ないしどうでもいいけど。
637:デフォルトの名無しさん
09/06/03 17:19:43
ちょっと相談させて下さい。
ネットワーク経由で送られてくるバイトストリームがあるとして、あるバイト位置まで読み進めないと
どんなフォーマットのパケットが来てるか分からないという形態のプロトコルを処理する場合、C#的には
どう書くとするとスマートなんでしょうか?
結果的には、パケットの種類に応じた構造体として後の処理で使えるようになればいいです。
C言語だと共用体を使うとスッキリ書けますが、C#でFieldOffsetを使うのは何となく邪道な気がします。
638:デフォルトの名無しさん
09/06/03 17:46:28
自分なら迷わずFieldOffsetを使うけど、なぜそれが邪道なのかはわからん。
639:デフォルトの名無しさん
09/06/03 18:08:37
>>637
何で邪道なんだろ
どうしても嫌ならビットシフトやらこねくり回せば?
640:デフォルトの名無しさん
09/06/03 18:15:36
指定位置までMemoryStreamに入れといて
データの種類が判明してから適宜変換して使うとか?
641:デフォルトの名無しさん
09/06/03 19:44:55
>>637
バッファと実インスタンスを分けて書くしかないんじゃないかなぁ
642:デフォルトの名無しさん
09/06/03 19:45:46
>>637
ある時点でpush backできるストリームを使うか作る
643:デフォルトの名無しさん
09/06/03 20:48:33
経験者に聞きたいのですが、C#はC++やCに比べて使いやすいでしょうか?
普及度とか今後を見たときに覚えておくと便利ですか?
644:デフォルトの名無しさん
09/06/03 20:51:46
段違いで使いやすい。
今後は、まあ、CやC++は上級者のための代物になりつつあるから
今からC,C++を一からやるよりは良いんじゃないかね。
645:デフォルトの名無しさん
09/06/03 21:12:48
C/C++で書く経験自体はしておいた方がいいと思うけど、実用的にはC#のが楽。
まぁ、C#じゃなくてもJavaでもRubyでもErlangでも好きなものを使えばいいと思うが。
646:デフォルトの名無しさん
09/06/03 21:17:40
レスありがとうございます。
C#は確かに使いやすくなっているようなイメージがあるのですが
CやC++でしかできなくて、C#じゃできない事ってあるんですか?
647:デフォルトの名無しさん
09/06/03 21:22:53
大きく見ればデバイスドライバとかシステムフックとかぐらいか
648:デフォルトの名無しさん
09/06/03 21:39:34
>>646
.NET言語だから移植性に難
649:デフォルトの名無しさん
09/06/03 22:03:33
cしらないとdllimportかけないじゃん
650:デフォルトの名無しさん
09/06/03 22:08:27
全部やっといた方がいい
651:デフォルトの名無しさん
09/06/03 23:02:14
>>646
OS関係の高度な操作とかは、C#では茨の道かも。
特定のCPUに特化したプログラムの作成とかも難しい感じ。
652:デフォルトの名無しさん
09/06/03 23:42:57
そういう、プリミティブなことをするか、組み込みなどで選択肢が少ないこと、よほどの高速性(これもものによっては関数型のほうが速い場合もあるが)でなければ生産性などなど考えたらC++というのは選択肢にはあがらんなぁ・・・
昔C++で今はC#メインだが、コンパイル速度が激速な点が一番うれしい。
653:デフォルトの名無しさん
09/06/03 23:53:16
Windows上で動く普通のアプリを作るだけなら
C#だけで充分だね。
654:デフォルトの名無しさん
09/06/04 06:39:10
C#がここまで評価される言語になると誰が予想しただろう
655:デフォルトの名無しさん
09/06/04 08:06:22
そりゃ、C# でググって出てくる上位サイトは
たいてい1.0とかそれのCTPの頃からC#の記事書いてるし、
その人らは予想してただろ。
656:デフォルトの名無しさん
09/06/04 08:08:06
.NET 1.0の頃は見向きもせずC++使ってた。
.NET 2.0とVS2005が出た時に、熱心に布教してたMS見て試しに使ってみたら意外と良くて、そこから徐々に乗り換えた。
>>654
VistaがまだLonghornと呼ばれていた頃
Win32を置き換える!とか言って浮き足立ってたなぁ
>Longhorn登場時期と予想されている2006年、PCは4~6GHz/2コアのCPUを搭載し、メモリ2Gバイト超、HDD1Tバイト超
2003年の記事眺めてて噴いたw 今だからこそ言える。ねーよwww
657:デフォルトの名無しさん
09/06/04 11:41:06
>>652
>昔C++で今はC#メインだが、コンパイル速度が激速な点が一番うれしい。
C#が速いというよりもC++が致命的に遅いというのが実態な気がする。
いずれにしても、ある程度の規模を超えたらC++のコンパイル時間・リンク時間は実用的でないです
特にリンクが遅いのが余りに致命的
658:デフォルトの名無しさん
09/06/04 11:47:56
>>656
Core2辺りで一応達成といえるんじゃないかな、Pen4と同クロック比較で2倍程度(当時のCPUの想定はPen4クラスだと思われる)
メモリは一応2Gにはなった、HDD1Tバイト超だけが実現されていないかと
しかし、必要ない人には今の時点でもHDDは余っているだろうね
659:デフォルトの名無しさん
09/06/04 14:18:04
>>657
ヘッダ書き換えた時のコストがあまりにもひどいと思うよ。
660:デフォルトの名無しさん
09/06/04 14:20:34
>>659
それに関しては、分散コンパイルを使えば……、あんまり解決してないけど一応解決する
けれどもリンクはもう完全にお手上げ
661:デフォルトの名無しさん
09/06/04 14:27:54
今や、マネージコードで書かれたFPSなんかが出てきても、驚くほどのことじゃないな。
662:デフォルトの名無しさん
09/06/04 15:06:12
FPSって何?
663:デフォルトの名無しさん
09/06/04 15:08:35
ファーストパーソンシューティング
ゲームの一ジャンル。欧米で今一番はやってる形態
664:デフォルトの名無しさん
09/06/04 15:12:38
ファーストパーソンズシュータアァー!
665:デフォルトの名無しさん
09/06/04 17:06:53
空気よまずに、、、
フレーム・パー・セコンド
666:デフォルトの名無しさん
09/06/04 17:52:15
そういや、Silverlight3で書かれたFPSのデモがあったな
普通に3Dの画面がサクサク動いてて驚いた
667:デフォルトの名無しさん
09/06/04 18:33:59
>>666
これ?
URLリンク(www.innoveware.com)
668:デフォルトの名無しさん
09/06/04 18:55:11
>>659
そういうコストを減らすために
ヘッダの依存を分散させる設計が必要
そのコストが高いってことは設計が悪いってことだ
ヘッダのあるプログラミング言語的には
669:デフォルトの名無しさん
09/06/04 19:14:07
template…
670:デフォルトの名無しさん
09/06/04 21:22:45
>>668
それが最近の統計情報によると、ヘッダの重複コンパイルがコンパイル時間の8割がたを占めていて
ぶっちゃけヘッダ別けファイル別けするよりも、全ヘッダ・ソースを一つに結合してコンパイルしたほうがマシって状況にあるらしい。
さらに、リンクファイルに無闇に外部参照ラベルが出現している上、それがCからの名残でツリー構造ではなく名前空間にヘッダやらフッタやら特殊規則の名前やらが無節操にぶちまけられてまともに検索もできない有様。
古すぎるんだ、技術的に……
昔はこれでよかったんだよ、むしろこうする事により高速なコンパイルが期待できたんだ、だけどこの方法は数が増えるとコンパイル時間が爆発的に増えるんだ。
ちょっともうスレとは関係なさすぎますね、自粛します。
671:デフォルトの名無しさん
09/06/04 21:55:00
倍々ゲームでコンパイル時間が増えていたが、それでもコンピュータのパフォーマンスも倍々ゲームで増えていたので
しばらくは問題にならなかったんだな、しかしDiskIOその他は倍々ゲームパフォーマンスアップはしなかったので次第に問題が表面化してきたと。
672:デフォルトの名無しさん
09/06/04 23:53:55
>>670
ヘッダに全部コードを書いて、ソースはそいつをインクルードしてるだけってソフトがあったんだが、
それが理由なのか。
673:デフォルトの名無しさん
09/06/05 00:56:58
それはアレやないすかね、テンプレートの扱いがややこしいので
割り切って全部ヘッダにしただけやないですかね。
C++ は重複の多さもあるけど、コンパイル時に色々やりすぎって
話もあるんではなかろうか。
674:デフォルトの名無しさん
09/06/05 01:45:06
ひとまとめにしたほうがコンパイラも最適化を聞かせやすい品。
SQLiteがやってる。
675:デフォルトの名無しさん
09/06/05 02:10:54
.NetFrameworkのJITってSIMDを使わないんですか?
使う事があるのはmonoだけですか?
676:デフォルトの名無しさん
09/06/05 02:48:54
せいぜいmovqくらいじゃね
677:デフォルトの名無しさん
09/06/05 02:58:36
>>673
C++のコンパイル速度の遅さは文法の複雑さが主な原因。
678:デフォルトの名無しさん
09/06/05 03:10:57
>>674
VC++はリンク時の最適化というのがあって、
それ使えば全部ひとまとめにしたのと同じような効果が得られる。
まあこれ使うとさらにリンク時間が長くなるんだが。
679:デフォルトの名無しさん
09/06/05 03:47:29
>>675
SIMDが使える環境では使うようにJITコンパイルされる。
Mono.SIMDはSIMDによる"手動の最適化"を"マネージコードだけ"で行えるのが武器。
.NETでやるには部分的にC++/CLIを用いてネイティブで実装する必要がある。
680:デフォルトの名無しさん
09/06/05 03:53:06
むしろC#のコンパイル速度が速すぎる。
入力中にバックグラウンドでコンパイルしてるんじゃないかと疑ってしまったぞ。
681:デフォルトの名無しさん
09/06/05 07:14:37
>>680
VBにしてもJavaにしてもこんなもんじゃね?
デルファイとかさらに早いし
>>677
無意味なコンパイルだと思われる、一度コンパイルし結果が得られるはずであっても、直前のヘッダファイルが変更されると
全部コンパイルし直さない限り、そのままでいいか確定しないからな。
コンパイルの流れがちゃんとすれば、C++よりはるかに複雑な構造は取り扱えるし、C#だって今となってはC++と比較して遜色ないくらい複雑な内容をもっているし。
682:デフォルトの名無しさん
09/06/05 07:21:48
>全部コンパイルし直さない限り、そのままでいいか確定しないからな
この原因を作り出しているのがプリプロセッサで、C系のプリプロセッサの仕組みは今となっては非常にマズイという事になっている。
それとincludeされるファイルがincludeし始めると、対象が指数関数的に増えるのも問題。
C#の場合はどんなに複雑でも、各ファイルが独立しているので、コンパイル時間は線形的にしか増えない。今の言語はほとんどこのスタイル。
683:デフォルトの名無しさん
09/06/05 09:43:48
構文解析やコード生成自体はそんなに大したコストじゃないよ
684:デフォルトの名無しさん
09/06/05 11:11:08
>>683
十分デカイって、特に何か処理のする事がない、ただラベルの付け合わせだけのリンクでさえボロボロのC++においては
685:デフォルトの名無しさん
09/06/05 11:25:48
C言語とオブジェクトファイルをリンクするldの方式は1960年代の技術だからな、C++も基本的にはこの考え方を踏襲しているわけで
かれこれ40年越し、そろそろ半世紀前から使われてきた技術だ、さすがに熟成通り越して酢になってますよ。
今でも実用的に使われているというのはそれだけでも凄い事なんですけどね。
686:デフォルトの名無しさん
09/06/05 12:04:10
>>680
実際にバックグラウンドコンパイルを研究する価値はあるんじゃないか?w
というか、きっと誰かしてる。
687:デフォルトの名無しさん
09/06/05 13:55:37
たしかにコーディング中の入力待ちアイドルタイムって長いもんな
688:デフォルトの名無しさん
09/06/05 15:35:15
これからのC++ではC#やVBがIntelliSenseを使うための情報収集をする時間でコンパイルか……
追い詰まっていると思われ
689:デフォルトの名無しさん
09/06/05 19:08:53
>>686
ていうか書いた奴が
インテリセンスで即反映、コードチェックも即掛かる
なんだからバックグラウンドってーか入力がある度にやってるんじゃないか
690:デフォルトの名無しさん
09/06/05 20:20:30
C++も使うが、Visual Studio 2010はびっくりするほどIntelliSenseが効くようになったのが凄い。
ブログでも今までのを捨てて新しくしたと言っていたし。
まあそれでもC#には敵わないが。
691:デフォルトの名無しさん
09/06/05 21:33:22
個人的にはできる限り早い段階でC++よりC#へ移行させてほしいと願うばかり
さすがにもうC++ではやりきれない
692:デフォルトの名無しさん
09/06/07 09:41:03
C#で十分にできることを、C++でやってるんだとしたら、
それは悲しいことだな
693:デフォルトの名無しさん
09/06/07 10:08:20
激しく計算するような分野じゃC#は使えないよ
694:デフォルトの名無しさん
09/06/07 10:44:08
GUIと通信部分をC#で書いて、計算はworkstationでやってるけど?
695:デフォルトの名無しさん
09/06/07 10:47:45
いいんじゃない
696:デフォルトの名無しさん
09/06/07 11:18:04
だから向き不向きあるゆーとろーが
向いてるところに生産性の悪いC++使うことないともゆーとろーが
697:デフォルトの名無しさん
09/06/07 13:28:22
激しく計算するような分野だが、C#に変えちまったけどな
C++でスレッド管理めんどくさすぎ、やってられない
結局やりきれずにシングルスレッドで書いてC#より遅くて使い物にならん事多々あり
698:デフォルトの名無しさん
09/06/07 13:29:49
いまならC++を使う状況はメモリを直接参照して変更するような処理かな?
いまならC++/CLIつかってその部分だけ書くのが便利かもと思ってる。
C#でちょっとした画像処理をポインタを使用して書いた時は、
unsafeがいちいちめんどくさくてストレスがたまったよ。
699:デフォルトの名無しさん
09/06/07 13:34:34
C#のunsafeでだるいならC++でもだるいだろう。
ちょっとコード書き足すだけだし
700:デフォルトの名無しさん
09/06/07 13:35:43
C++スレで存分に語れよ
701:デフォルトの名無しさん
09/06/07 13:36:11
C++のほうもOpenMPはだいぶ楽だと思う。
C#にもあれくらい簡単に使えるのが欲しい。
というわけで、.NET 4.0の並列化関係のライブラリに期待している。
702:デフォルトの名無しさん
09/06/07 13:37:34
OpenMPは総合力に掛ける、使いどころが限定的すぎる。
703:デフォルトの名無しさん
09/06/07 13:43:00
そんな最強言語決定戦みたいなのは厨二に任せて、
寛容なC#ユーザーはC++を使う人を一々否定しないって顔しとけよ
704:デフォルトの名無しさん
09/06/07 13:43:16
>>699
いや、アンセーフじゃないC++は普通に業務でつかってるかよ。
書くのは全くだるくはないが、ヘッダの依存関係を解決する方が面どくさい。
705:デフォルトの名無しさん
09/06/07 13:44:29
だからC++スレで存分に語れよ
706:デフォルトの名無しさん
09/06/07 14:15:56
public class DoubleList : List<double>
ってクラスがあって、
コンストラクタが
public DoubleList () { }
こうなってる場合は
みたいなクラスを作った場合には、 new DoubleList()
が呼ばれた時点でList<double>が作られますよね?
ここで Listのコンストラクタのうち、引数としてcapacityをとるものを
DoubleListのコンストラクタとしても用意したいのですが、どうしたらいいでしょうか?
707:デフォルトの名無しさん
09/06/07 14:24:58
public DoubleList(int capacity) : base(capacity) {
}
708:デフォルトの名無しさん
09/06/07 14:25:23
public クラス名() : base(スーパークラスの引数) {}
709:デフォルトの名無しさん
09/06/07 14:29:44
少しエスパーしてみた、本当に欲しいのはこっちか?、ちがってたらまぁ適当にやってくれ。
using DoubleList = List<double>;
710:706
09/06/07 14:31:20
>>707,708さん
それです!ありがとうございました。
>>709さん
doubleの可変長配列に各種メソッドの追加、演算子のオーバーロード等がしたくて
DoubleListなんて作ってました。
皆様ありがとうございました。
711:デフォルトの名無しさん
09/06/07 14:39:09
>>710
ならば、定石としてはコンポジションをとるべきである、多態性を目的としない機能追加を伴う導出は悪だ。
712:デフォルトの名無しさん
09/06/07 14:41:54
extention method もあるな
713:デフォルトの名無しさん
09/06/07 15:27:51
>>703
C++使う人を否定してるってよりは、
仕事でいやいやC++使ってる自分を否定したいんでは。
714:デフォルトの名無しさん
09/06/07 16:17:41
DoubleListだが、こいつはIList<T> に対するアダプターパターンで解決するのが基本かと。
演算子のオーバーロードというのだから、線形代数系の何かだと思われるが。
相手がList<double>限定では汎用度が低すぎるしな、double [] にも適用したいだろう。
特にIList系より抽象度が低くてよいのなら、IEnumerable<T>ベースで作ってやればLINQの恩恵にもあずかれるだろうし。
715:デフォルトの名無しさん
09/06/07 20:13:25
スレ違いかもしれませんが・・・
VS2008で、#regionで閉じられたソースを一気に全部開きたいのですが、
何かショートカットキーはあるのでしょうか?
716:デフォルトの名無しさん
09/06/07 20:31:32
Ctrl+M, M
717:デフォルトの名無しさん
09/06/07 20:48:09
>716
ありがとうございます。
CTRL+M系で色々できるんですね。
718:706
09/06/07 22:30:26
>>711,712さん
コンポジションって
public class DoubleList{
private List<double> list;
}
ってメンバ変数にしちゃうってことですよね?
その場合ってインデクサとかList<double>のうちすべてを自分でDoubleListに実装するってことですか?
手間ばかりであまりご利益が感じられないのですが。
719:デフォルトの名無しさん
09/06/07 22:56:24
>>718
コンポジションが嫌なら、Collection<double>からの派生にすればいい。
こいつの派生なら許せる。
720:デフォルトの名無しさん
09/06/07 23:10:14
>>718
継承は、依存関係が強くなりすぎるのが嫌われる。
手間はかかるけど、我慢してコンポジションにする人多い。
自分も、手間掛ける時間あるならそうする。
721:デフォルトの名無しさん
09/06/07 23:12:28
コンポジションを作るプログラム書けばいいじゃん、すぐ終わるよ
722:デフォルトの名無しさん
09/06/07 23:47:39
設計屋のオナニーって感じだな
List<double>がダメでCollection<double>は許せるとか
意味不明
723:デフォルトの名無しさん
09/06/08 00:19:20
Collectionは中の実装に依存しないから。
実装変えるたびに継承関係が変わったら話にならない。
724:デフォルトの名無しさん
09/06/08 00:28:40
>Collectionは中の実装に依存しないから。
中の実装ってどこを指してんの?
725:デフォルトの名無しさん
09/06/08 06:41:21
言ってることが滅茶苦茶だな
726:デフォルトの名無しさん
09/06/08 07:41:27
>>724
CollectionはList実装であることに依存しない、つー話じゃないの
727:デフォルトの名無しさん
09/06/08 09:09:07
>>724
以下のような話はわかる?
・.NET においては List って時点で配列リストの事を指してる
・List を継承するってのは「配列リストで実装します」と宣言するようなもの
・後からアルゴリズム変えたい(連結リストにしたり両端キューにしたり)場合があると困る
・コンポジションで作ってれば後から変えるのも自由
728:デフォルトの名無しさん
09/06/08 09:27:33
is-implemented-in-terms-of関係
729:デフォルトの名無しさん
09/06/08 13:32:30
グダグタ言わずにインターフェイスは多重継承可、クラスの継承はまずしなくても十分に汎用性が取れないか検討してから
クラスの継承は多態性が必要になった時に使う、しかし可能な限りインターフェイス継承。
100の屁理屈より100の実践、守ってやっていれば、なぜそうすることが良いか自然に分かる。
730:デフォルトの名無しさん
09/06/08 13:46:19
>>718
public class DoubleList : IList<double> {
private List<double> list;
}
こうすべきだな、他に必要なインターフェイスがあるならそれも加えておく。
最新のVS2008ならIList<double>と書けば、此処をクリックしろとマークがでるので、それをクリックして必要なスタブを全部生成すると便利だ。
こうやってList<double>の『実装に依存』させるのではなく、List<double>の『インターフェイスに依存』させるのだ。
731:デフォルトの名無しさん
09/06/08 14:00:53
「インターフェースの明示的な実装」
すげー、こんなのあったのか
732:デフォルトの名無しさん
09/06/08 14:08:45
結局のところ継承ってのは既に完成しているクラスを改造する行為で、コンポジションとインターフェイスにすると言う事は、
既に完成しているクラスをそのまま利用しつつ、共通項目を共通した方法で取り扱えるようにするという事。
改造する行為はバグを誘発しやすいんだな、なにしろ作った本人どういう手順で改造して欲しいまではあまりドキュメンテーションしないししきれないからね。
ブラックボックスをこじ開けるような行為はしない方が良いのです。
733:デフォルトの名無しさん
09/06/08 16:04:05
>>730
(スコア:5, 参考になる)
734:デフォルトの名無しさん
09/06/08 17:49:24
こういう初歩的なのはMSDNで3分でわかる○○等でやっているから見ておくといい
設計方法としてもオブジェクト指向の初歩なので、こういうのを知らなかったなら、一度一からオブジェクト指向を勉強するのがいい。
導出が分かればオブジェクト指向などというメチャクチャなのが時折いるが、あなんのは絶対に駄目だからな。
735:デフォルトの名無しさん
09/06/08 18:04:24
なにいってんだかわかんねw
736:デフォルトの名無しさん
09/06/08 18:24:45
>>726-727
少なくとも
System.Collections.ObjectModel.Collection<T>
はIListを実装した配列リストなんだが
Collectionも配列リストだ
クラスとインターフェイスと一般的な概念をぐちゃぐちゃにして話してないか?
インターフェイスはIをつける
一般的な概念はそれとわかるような文脈で書いてくれ
頼むから
737:デフォルトの名無しさん
09/06/08 18:28:10
とりあえず大元の質問者がList<double>から継承するっていうんなら、
Listにしかないメソッドを使いたいとかいうのもあるんじゃないか
Find系とか。doubleだしな
なんで>>730みたいにIListで十分と思えるのかがわからん
もしかしてIListはListの公開メソッド/プロパティ全部カバーしてると思ってる?
>>734
まったくだな
MSDNも見ずに一般論だけで偉そうに講釈垂れるのは
ハタ迷惑なアホだな
738:デフォルトの名無しさん
09/06/08 18:31:49
>>737
>Listにしかないメソッドを使いたいとかいうのもあるんじゃないか
それは完全に間違っているような気が……
>もしかしてIListはListの公開メソッド/プロパティ全部カバーしてると思ってる?
そういう問題ではないだろうという気が……
危険だ
739:デフォルトの名無しさん
09/06/08 18:33:27
>>737
「List<T>にしか無いメソッド」も実装すればいいじゃない
740:デフォルトの名無しさん
09/06/08 18:33:47
深いオブジェクト指向の知識など要らないとは思うけれど、必要最低限の知識はもっていてもらいたいものです……
741:デフォルトの名無しさん
09/06/08 18:38:42
MSDNは短い割にはポイント絞った良いセミナーやるからな、見ておいて損は無いよ。
特にビデオ物、流してみておくだけでも思わぬ拾い物が多い。
742:デフォルトの名無しさん
09/06/08 18:43:21
そういやjavaとか
StackがVectorから派生してるとかいうバカ設計なんだよなw
Stackなのにランダムアクセスできるwww
743:デフォルトの名無しさん
09/06/08 18:51:36
>>742
処理系によるけど、コールスタックに積んだ引数とか、
普通にSP使ってランダムアクセスする場合の方が多い気がするのだが。
べつに、スタックだからって必ずいちいちpopしなきゃダメってこたないよ。
744:デフォルトの名無しさん
09/06/08 18:55:24
>>743
一般的なスタックの概念から外れてるんじゃないかい?
>>727みたいな話になるけども
745:デフォルトの名無しさん
09/06/08 19:02:05
>>743
それならStackなんていらない
リストで代用できるしその方が速い
746:デフォルトの名無しさん
09/06/08 19:03:38
>>736
あー、そうだった。
でもまぁ、この話って、インターフェースプログラミングのお作法以前の話として、
C#のコレクションの分類に一貫性がないというか滅茶苦茶なのが一番の癌なんじゃないかなぁ。
IListってのがあったら、普通Listはその直系の具象実装だと思うわなぁ。
747:デフォルトの名無しさん
09/06/08 19:04:26
明示的にスタックとしているのにインデクサでアクセスされたらたまらんな。
おお怖い。
748:デフォルトの名無しさん
09/06/08 19:06:01
まずいとおもったから作りなおしたんでしょ。1.2だかで
749:デフォルトの名無しさん
09/06/08 19:06:18
>>746
まあね
750:デフォルトの名無しさん
09/06/08 19:08:38
>>744
コールスタックって、スタックの第一級の応用例じゃないのかね。
>>745
適当だけど、
int sp = 0;
int[] stack = new int[100];
void push(int i) { stack[sp++]; }
int pop() { return stack[sp--]; }
みたいなノリの実装だったら、少なくともpush(), pop()はlistより高速なんでないかね。
ランダムアクセスのオーダーもListと等価になるし、特にListのが優位な点も見当たらないが。
751:デフォルトの名無しさん
09/06/08 19:09:08
C#のコレクションはLINQと相まって、もういっぺん見直した方がいいとは思う
上のFindの話もそうなんだけど、ああいうメソッドがコレクションについているべきではないと思われるし。
752:デフォルトの名無しさん
09/06/08 19:11:37
Find系は以前からあるから、新加入のLINQと役割的に競合してるわけね
753:デフォルトの名無しさん
09/06/08 19:13:10
一発で決まる綺麗な実装は難しいね、LINQの汎用性ときたら半端じゃない。
754:デフォルトの名無しさん
09/06/08 19:13:11
>>750
そのへんは相当シビアな速度求められるところだから
[]演算子で先頭アドレス基準にアドレス計算しなおすだけで
ふざけんなって言われるよ
755:デフォルトの名無しさん
09/06/08 19:14:14
SilverlightではLINQと被ってるのはごっそり削られました
756:デフォルトの名無しさん
09/06/08 19:15:35
>>754
JavaやC#といった言語はオプティマイズ問題とインターフェイスの問題はきれいに切り分けられるように工夫された言語なんだから、ごっちゃにするなよ。
757:デフォルトの名無しさん
09/06/08 19:17:43
>>756
コールスタックの話題だろ?
>>750が持ち出してるのは
758:デフォルトの名無しさん
09/06/08 19:19:01
>>754
C/C++で組み込みのリアルタイムシステムを書いてるならともかく、
JavaとかC#で、そのレベルのチューニングを要求するのはナンセンスな気がするのだが。
そもそも、中間言語レベルでも整数のインクリメントなんて1opじゃないのかね。
759:デフォルトの名無しさん
09/06/08 19:20:56
>>757
で、コールスタックになったら問題が何か変わるわけ?
スタックフレームの知識はあるよ、アセンブラやってたから、心配せずに言ってみな。
760:デフォルトの名無しさん
09/06/08 19:22:56
>>757
ん?
Stackでランダムアクセスをしちゃいけない理由ってのがあるか否かって話じゃないの?
ちなみに、CPUレベルの話なら、pushとpopはほぼノーコストでしょ。
JavaやC#の話をしてるなら>>758。
761:デフォルトの名無しさん
09/06/08 19:25:50
だからランダムアクセスできたら何のためにリストとは別にスタックがあるのかわからなくなるだろ
762:デフォルトの名無しさん
09/06/08 19:31:02
>>761
push()とpop()とpeek()が使える、Listの特殊な場合がStack、って分類なだけでしょ。
実装的にもアルゴリズムのオーダー的にも差異はほぼ無いわけだし。
アセンブラレベルでpushとpopを特別扱いしてるのは、詳しくは知らないけど、
それこそコールスタックで使うとか歴史的理由とかその辺じゃないの?
763:デフォルトの名無しさん
09/06/08 19:32:06
>>762
差異がないってw
764:デフォルトの名無しさん
09/06/08 19:37:16
>>762
あんま関係ないけど、呼び出しスタックはダイクストラという偉い人がスタックはハードウェア化すべきだとのたまわったので、以後のCPUでは多く採用された。
構造化プログラミングの提唱者の人ね、その後RISCという方法が主流になって再び捨てられた。
歴史的にはそんな感じ
765:デフォルトの名無しさん
09/06/08 19:38:13
>>763
実際、Javaではそのように扱っていて、特に問題は起きてないわけだが。
逆に、「ランダムアクセスができるものはスタックとは呼ばない」という定義が
一般的だと主張するなら、それを示してくれ。
「○○という計算機科学の教科書に書いてあった」とかそういうのでもいいよ。
766:デフォルトの名無しさん
09/06/08 19:39:15
>>764
そーか、それは知らなかった。勉強になったよサンクス。
767:デフォルトの名無しさん
09/06/08 19:40:24
だから.NETのStackではあえて差異をつけてるんだろ
同じなら二つもいらない
768:デフォルトの名無しさん
09/06/08 19:41:44
>>765
無意味なところに話を持っていくなぁ
769:デフォルトの名無しさん
09/06/08 19:53:06
Stackでランダムアクセスができるのはおかしい
というのに異論がある人がいるとは思わなかったじぇ。
770:デフォルトの名無しさん
09/06/08 19:57:24
できたら意味がない
というだけのことなのに…
771:デフォルトの名無しさん
09/06/08 20:01:45
>>769-770
じゃあ、コールスタックはおかしくないのか、というところに話が戻るわけだが。
772:デフォルトの名無しさん
09/06/08 20:08:31
IListインターフェイス付きのコレクションと、そうでないコレクションは実装は同じでも設計レベルでは分けて考えろという事。
実装からインターフェイスを分離独立せよ、これがわからんやつはプログラマ廃業したほうがいい。
773:デフォルトの名無しさん
09/06/08 20:21:28
URLリンク(0xcc.net)
他の言語でも、むしろ配列の操作の一部としてpush(), pop()がついてるのが普通みたいだね。
774:デフォルトの名無しさん
09/06/08 20:22:57
Visual C# 2008 EEで開発しています。
以前C++で書いた関数を利用するにはどうすればいいですか?
775:デフォルトの名無しさん
09/06/08 20:23:42
書き直しましょう
776:デフォルトの名無しさん
09/06/08 20:26:31
>>773
そんな結論になるおまえにびっくりだ
777:デフォルトの名無しさん
09/06/08 20:29:08
>>765
Introduction to algorithms
Stacks
The order in which plates are popped from the stack is the reverse of the order in which they were pushed onto the stack,
since only the top plate is accessible.
778:デフォルトの名無しさん
09/06/08 20:29:12
>>774
今すぐネットを切断するんだ、そして冷水を浴びろ、それで利用方法を思いつけるはずだ。
779:デフォルトの名無しさん
09/06/08 20:30:16
>>776
C#みたいに、配列とスタックを全く違うものとして扱う言語の方が特殊なんじゃないの。
多くの言語では、スタック操作は配列が提供する機能の一部として扱っているようだが。
780:デフォルトの名無しさん
09/06/08 20:32:22
>>779
まさか、サイズ不定の場合はリンクリストにするのが普通だろ、こんなの常識
781:デフォルトの名無しさん
09/06/08 20:34:54
俺アセンブラはMIPSアセンブラしか知らないけど
スタックポインタでランダムアクセスっぽくしてるのは
ランダムアクセスというよりPeekの操作に該当するんじゃないかな
782:デフォルトの名無しさん
09/06/08 20:36:10
>>781
おまえさんは抽象的に考えるということを一度勉強すべきだな
783:デフォルトの名無しさん
09/06/08 20:38:18
2010年に.NET2.0SDKに置き換わるものが出るの?
784:デフォルトの名無しさん
09/06/08 20:39:46
>>781
こんなところでグダまいてないでさっさとゲーム作れw
785:デフォルトの名無しさん
09/06/08 20:42:33
>>777
俺も真っ先にブックサーチでそれを探したけど、
「(カフェテリアで使っているばね式なお皿のスタックは)一番上のお皿のみが
アクセス可能なので、スタックにpushしたお皿は逆順でpopしてくる」としか書いてないよね?
どこにも、「スタックから一番上以外のお皿を取り出してはいけない」とは書かれていないと思うのだけれど。
>>780
なんで突然Linked Listの話が出てくるのか分からないんだけど、
一応聞いておくけど、Linked Listをランダムアクセスしたときの計算量は?
786:デフォルトの名無しさん
09/06/08 20:43:02
>>783
SDKなら.NET3.5用のがすでにあるが、一体何を言いたいんだ?
787:デフォルトの名無しさん
09/06/08 20:45:53
>>785
お前プログラマやめた方がいいと思うよ、マジで、才能ないから。
788:デフォルトの名無しさん
09/06/08 20:46:37
>>782
どういう突っ込みか理解できないんだけど。
789:デフォルトの名無しさん
09/06/08 20:46:45
>>787
煽りはいいので、論理的な反論をヨロシク
790:デフォルトの名無しさん
09/06/08 20:49:09
なんだか足し算できない子供が偏微分方程式を教えろと言っているような様相だなw
791:デフォルトの名無しさん
09/06/08 20:51:05
と、高卒が申しております。
792:デフォルトの名無しさん
09/06/08 20:51:22
>>785
明示的には書いてないが、その例えと同様に定義しているはずだが。
というのは、その先でキューをスタックで実装しろという問題がある。
意図から考えてランダムアクセスができるはずがない。
793:デフォルトの名無しさん
09/06/08 20:55:36
ひどいパラノイアだな
794:デフォルトの名無しさん
09/06/08 20:55:44
素直にオブジェクト指向の教科書買って、一週間程度でいいから読めよと……
余りにひどス
795:デフォルトの名無しさん
09/06/08 20:56:24
質問者不在の不毛なやりとりだな・・・
796:デフォルトの名無しさん
09/06/08 20:57:49
>>792
Figure 10.1では、まさに配列で実装したスタック(An array implementation of a stack S)を
例示として出してるように見えるわけだが。
その問題は、「キュー(の操作)をスタック(の操作のみ)で実装しろ」という以上の意味はないんじゃね。
飯食ってくるのでちょっと返事遅れる。
797:デフォルトの名無しさん
09/06/08 21:04:05
>>795
だって、これを見た初学者が
「スタックは配列とは関係ありません。サイズフリーなリンクリストで実装するのが正統(キリッ」
とかいう謎の主張を真に受けたりしたら嫌じゃん。
798:デフォルトの名無しさん
09/06/08 21:10:27
>>796
いや、だからその実装を抽象化したのがstackなんだろう。
stackと配列+インデックスは別物。カプセル化されてるだろ
799:デフォルトの名無しさん
09/06/08 21:22:47
なあ、スレチじゃない?
800:デフォルトの名無しさん
09/06/08 21:24:26
いつものC++の頭おかしい人では、ほんと困ります
801:デフォルトの名無しさん
09/06/08 21:25:21
うん。スレ違いです。
802:デフォルトの名無しさん
09/06/08 21:26:16
C++のスレもヤツと思わしき書き込みでメチャメチャになってるんだが
C++の中の人も大変だなw
803:デフォルトの名無しさん
09/06/08 21:33:16
>>798
仮にそうだとしても、配列由来の操作を隠蔽しなければならない確固たる理由はなくね?
事実、C#以外の多くの言語では、スタック操作は配列操作の一部として扱われているわけで。
804:デフォルトの名無しさん
09/06/08 21:45:28
ゲームプログラムなら俺に聞けスレも悲惨な有様だね、死んでしまえばいいのに
805:デフォルトの名無しさん
09/06/08 21:47:56
自分は、VectorからStackが派生しているJavaは気持ち悪いと思う。
反対の、IStackやIQueueがあって、IListがその2つ(やその他)を継承するという作りのほうが自然に感じる。
806:デフォルトの名無しさん
09/06/08 21:48:31
framework 4.0 の並列処理機能についてMSをのぞいて詳しく書いてあるサイトでわかりやすいところない?
807:デフォルトの名無しさん
09/06/08 21:52:42
継承しないで、独立の実装されるのが理想だと思うな。
class ListStack : IList , IStack ←ないけど
class Stack : IStack ←ないけど
どちらも実装は同じでもいいだろう、しかし使う側がちゃんと考えて配列アクセスが不要ならStackを使うとしてくれるとListStackとStackの実装は後で変えることもできる。
基礎ライブラリなので変えることはしないだろうが、実際の開発ではこれが決定的な差になる。
808:デフォルトの名無しさん
09/06/08 21:57:02
>>805
それだと、スタック操作を定義しないListが作れないような
809:デフォルトの名無しさん
09/06/08 21:57:51
作りとしてはこんな感じかな
class ListStack : IList , IStack {
List list;
各種実装
}
class Stack : IStack {
ListStack list;
IStack で公開されるメンバーのみ公開しておく
}
これならListより配列の方が効率的だからという理由で後から object [] といった具合に変えて高速化する事も可能だろう。
上のDoubleListの例でいえば、Listを継承してしまうとListの機能に固定されてしまう訳だ。
810:デフォルトの名無しさん
09/06/08 22:30:22
ふらっとが落ち着いたと思ったら、今度はこっちが荒されてて笑った
>>806
一番詳しい所は、Parallel Extensionsチームのブログ
日本語で詳しく書いてある所は知らない。
811:デフォルトの名無しさん
09/06/08 23:30:12
あまりの流れに素で>>806をスルーしてたw
>>810を見て初めて存在に気づいたw
812:デフォルトの名無しさん
09/06/08 23:49:31
うん、確かに分かりやすく記述してあるな。
ただbeta1だけにそもそも手を出さないのが正解かもしれんな。
813:デフォルトの名無しさん
09/06/08 23:55:20
>>803
配列由来の操作を隠蔽しなかったら
他の実装に変えられなくなるじゃん。
814:デフォルトの名無しさん
09/06/09 01:41:17
現在、とある目的のための汎用エディタをつくっているのですが、
GUIを楽に実装したいのでPropertyGrid を使いたいです。
しかし、なんせ汎用エディタなので、設定の項目は xml で定義できるようになっているため、
設定項目をまとめたものをクラスとして定義して PropertyGridに渡す」ということができません。
そういう場合でも PropertyGrid を使う事はできますか?
もしくは、空のクラスをつくって、設定ファイルに従って動的にプロパティを追加..
といったことができれば素直に PropertyGrid を使う事ができて楽なんですけど...
815:デフォルトの名無しさん
09/06/09 01:51:26
何に対して汎用的なのかサッパリーで
なんで汎用的だと設定項目がxmlになるのかよくわからん
IXmlSerializerとかなかったっけ
816:デフォルトの名無しさん
09/06/09 01:54:03
できます
817:デフォルトの名無しさん
09/06/09 02:15:42
すみません、まぎらわしい書き方でしたね。XMLうんぬんは全然関係なくて、
ようするに
項目名(プロパティ名)とその型(整数、文字列、実数)が設定ファイルで定義されている
↓
設定をロードするまでプロパティの個数も名前も型もわからない
↓
ソースコード上でクラスを定義できない
↓
だから PropertyGridもつかえない?? ←ここが問題
こういう目的で PropertyGridをつかうにはどうすればいいのでしょう?
もしくは、動的にクラスのプロパティを追加したり削除したりするにはどうすればいいのでしょう?
818:デフォルトの名無しさん
09/06/09 02:40:53
なんかnotepad++とかeclipseみたいな感じか
設定項目をxmlで記述するとして,
その設定項目を実際に反映させるのは誰の役目?
プラグイン方式にするのだったら設定項目を集めたクラスを,プラグイン側で公開するようにすればいいだけなんだけど
819:デフォルトの名無しさん
09/06/09 03:45:21
TypeConverter を継承して、好き勝手な property を登録するという方法でやてみました。
その結果、TypeConverter を継承した MyPropConverter をつくり、
[TypeConverter(typeof(MyPropConverter))]
class Hoge{}
という空っぽの Hoge クラスのインスタンスを PropertyGrid.SelectedObject に指定することにより、
好きなだけ任意のプロパティ項目を表示できるようになりました。しかし...
たとえば
オブジェクトAを選択すると、設定テキストAの内容をつかってプロパティを表示、
オブジェクトBを選択すると、設定テキストBの内容をつかってプロパティを表示、
オブジェクトCを選択すると ... するというようにしたいのですが、
すると、いま選択されているのが AなのかBなのか、なんなのかを MyPropConverterが知る必要があります。
(オブジェクトの種類によって GetProperties の戻り値を帰る必要があるため)
これはどのように指定すれば良いのでしょう?
理想をいえば、MyTypeConverter のコンストラクタでそのまま設定テキストを渡して解析させ、
結果に応じて GetProperties の戻り値をかえたいです。しかしそのようにすると、
propertyGrid.SelectedIndex = new Hoge(); の行で実行時エラーになります。問題はそもそも
MyPropConverterのコンストラクタの呼び出し元はどこなのか?ということですが....
820:デフォルトの名無しさん
09/06/09 04:11:56
>>819
ほれ
URLリンク(msdn.microsoft.com)
これなら何でもできるぞ