1 :
名無しぃ♯ :
2008/10/23(木) 18:37:40
2 :
名無しぃ♯ :2008/10/23(木) 18:38:33
3 :
名無しぃ♯ :2008/10/23(木) 18:39:29
Part50を前に関連スレとか追加したりしてみた 他にもあったらよろ いらんとなったら次スレ立てるとき適当に消しといてくれ
このスレがいらなくね?なんで立てたの?空気よんで誰も立てないようにしてたのに
たいした知識量もないのに全知全能にでもなっている人が居るからな このスレに限らず暴れまわっているみたいだが・・・ 昔はこの板はもっと活性的だったんだか、こういう人がいるとバカバカしくなってみんな何処かへ行ってしまった。 ある種の中二病なんだろうが、いい加減治療されろよと。
C#にかぎらないけどさ、スレ複数に分けるなんて意味ないよね。 どうせ答える人間は同じなのに。
ところで、C#と他の言語でマルチリンガルしてる人って、どういう組み合わせが多いのかな? 似て非なるJavaと二刀流、VBとの二刀流、いやいやC/C++も合わせてちゃんぽん状態? どうしてもDelphiだけは咀嚼に難儀して飲み込めない俺。
C#できるならVBとJavaはやらないともったいない
C++からC#に来たが、Javaは体が受け付けなかった。
Javaは言語体系も記述も似ているからC#より先に学んだけど、インターフェースのところが スッキリしなく、あまり使いたくなくなった。 それでASP.NETやVBを弄ってたら.NETつながりでメインをC#に転向しちゃった。 昔はFortran、アセンブラ、C言語を骨の髄まで極めたけど、C++の言語仕様はイヤだったな。 C言語以上に人によるコーディングスタイルとポリシーと俺様スタイルが多くて疲れた。。。
>>13 C++→C# or Javaだと
仮想関数の扱いがJavaは全く違うもんな…
VB→C++→Delphi→C#と来た C++は3回くらいで辞めた DelphiとC#って何か似てる
C++ → C# に来た。 趣味で書くコードは全部 C# になったけど、 仕事は C++ が多い。 Java というか、Sun のクソっぷりに嫌気さしてたところに C# が出て、 一気にそっちに移った。
C→VB→Java→C# Cは用途が違いすぎる(俺的に)から比較できない。 Javaは、ちょろっと囓って拒絶反応起こした。 外資系エリートサラリーマン臭がする。
覚えた順 C# -> C -> C++ -> Java -> Python -> PHP -> Perl 以前はJavaの仕事が多かったけど最近はC++をやってる
業務はjavaとc++。 ちょっとしたツール作成でC#。 そういえば、Cはめっきり触らなくなったなぁ。
俺の遍歴w 1985 1988 1990 1994 2005 2008 BASIC─COBOL┬─ C.─┬C++…Java┬C#─ 今ここ .├.ASM─┤ └VB─ … .└Fortran┘ …Delphi… C++を使い始めた時点で迷走を始め、その時のプロジェクトを終えた後は しばらくソフトウェアから遠ざかったてた。 Delphiは外資系の知育教材言語、Javaも外資の金融・証券系の知的好奇心教材に 感じてしまい放置プレーw
>>16 設計者が一緒だからね。
C→Delphi→Java(すぐやめた)→C#だなあ
23 :
21 :2008/10/24(金) 20:51:50
>>22 昔はワケワカメだったDelphiコード、今の俺なら見て分かるかな。
カミングアウト相談室はこちらですか?
25 :
デフォルトの名無しさん :2008/10/24(金) 21:01:59
コピペ君って馬鹿だな、まで読んだ。
俺は 幼稚園->小学校->中学校->高校->大学->C#
質問です。 クラス内で変数を宣言する場合、その初期化はどこで行うべきでしょうか? Class Test { //変数 private List<int> _listInt = new List<int>(); } とするべきなのか Class Test { //変数 private List<int> _listInt = null; public Test{ _listInt = new List<int>(); } } ググってみたのですが、いまいちよくわかりませんでした。 よろしくお願いいたします。
どっちでもいいけどコンストラクタで代入するなら 宣言=null 書かない方が誤解されないと思う
>>28 そのコードでどうなるかは知らんけど、コンストラクタ外で変数を初期化してる
似たようなコードを逆アセしたときは、変数がコンストラクタ内で初期化されてた。
コンストラクタが複数あっても全部の中で初期化されてた。
おっと結論を書いてなかった。つまり分かりやすいところに書け。 外側に書いとけばコンストラクタが多くても安心。
>>29-31 なるほど。
外側に書いておいた方が個人的にはわかりやすい(コンストラクタの行数が減ってくれる)ので、外側で初期化しようと思います。
皆様ありがとうございました。
Windowsのようにアイコンをダブルクリックで実行、ドラッグできるようなコントロールってありますか? フォーム上に位置などの情報を持ったアイコンオブジェクトが点在し、 例えば、あるアイコンをクリックすると、フォームの右側にある数値などのプロパティ表示部がそのアイコンの情報になり、 それを変更することによってアイコンオブジェクトの操作ができると。 アイコンはマウスによって視覚的に操作できる、みたいなツールを作ろうとしているのでが、 指針を教えていただければ幸いです。表現がわかりにくくてすいません。
> Windowsのようにアイコンをダブルクリックで実行、ドラッグできるようなコントロールってありますか? 殆どのコントロールで出来ます
>>34 開発時ではなくアプリケーション実行時です。
できます
アイデアプロセッサみたいなプログラムだろ?
そういうのは自分で管理・描画するもんだよ
何使っても面倒 コントロールに頼らずに,一枚のキャンバスに全部自前で描画する
Flash
WPF使えば割と簡単に綺麗にできるかも
Managed DirectX 2.0ですね!わかります!
>>44 気持ち悪い奴。
わかります、だとさw
こういう奴のアイデンティティーって本気で「2チャンネラー」なんじゃないの?
で?
C→C++→C# javaもやるかな
>>45 おまえ生粋のねらーだな
俺は釣られない「クマー」
誤爆というより話題に乗り遅れただけだな
大半を占めるVBから移動したなんちゃってC#厨が出てこなかったな
SQLite使ってるんだが、using (SQLiteConnection ってな感じでnamespace作って、 connection取れなかった時に〜と思って、try-catchも入れたら、 入れ子が大変なことになってしまうんだが、 そんなこと気にしてるの俺だけ? C#+SQLiteのサンプル公開してるサイトとかでは、 そこらへんのエラー処理をやってるの見たこと無いし、 connection取れないハズがない的性善説がデフォ?
接続できなかった場合にユーザに通知するとか何かやることがあるならキャッチすればいいが、 接続できなくてどうしようもない場合はキャッチする必要がある。
54 :
53 :2008/10/25(土) 16:26:23
s/必要がある。$/必要がない。/
>>53 俺専用アプリだから通知不要といえば不要なんだが、
通知するのが当たり前と思ってたから、なんか気持ち悪くてな。
かといって入れ子が激しいのも気持ち悪いし。
入れ子回避ならusing使わなきゃいいけど、それだとC#の便利さが損なわれるし。
悩ましいなぁ。
ちなみに、それは namespace ではない。
58 :
モモ :2008/10/25(土) 17:21:08
static class Util { public static string ToHex(byte value) { return String.Format("0x{0:X2}", value); } public static string ToHex(ushort value) { return String.Format("0x{0:X4}", value); } public static void TextSetHex(TextBox text, byte value) { text.Text = ToHex(value); } public static void TextSetHex(TextBox text, ushort value) { text.Text = ToHex(value); } } この TextSetHex メソッドをテンプレート化することはできないでしょうか?
ジェネリックのことか? 静的には無理でしょ if (typeof(T)==typeof(byte)) else if ( みたいなのなら可能だけど記述量が増えるだけ
いやis使えばいいのか if (value is byte) text.Text = ToHex((byte)value); else if (value is ushort) text.Text = ToHex((ushort)value);
>>52 SQLiteでもDBに接続できないなんてことは普通にあるから、try-catchで囲むべき
サンプルは例外処理を入れるとごちゃごちゃするので省いているだけだろう
もしかしたらSQLiteっていうより例外処理一般の書き方の問題かもしれない
catchで囲んで何するの?
>>57 なにぃぃぃ!ディレクティブ?
>>61 そうなのか>SQLiteでもDBに接続できない
じゃあ実装することにするよ。
つっても、connection, command, transactionの3ヶ所で必要ってのは、
悲しくなるな・・・
>>62 connectionが取れるまで頑張る
65 :
61 :2008/10/25(土) 20:00:37
>>64 俺は死んでも構わないから
困ってる
>>63 に適切なレスをしてやってくれ
あれ、もしかして、try-catchで括るのは、 一番外側だけでいいのかも?かも? で、connection以下の処理を別のメソッドに分ければスキーリ?
ふつう、try-catch って、Main内の一番外側に1つ書けば済むもんだろ? 一元化できるし。
投げっぱなしの例外をまとめて処理できるイベントがあるじゃん。 それを使うのが普通だよな。
まったくリカバーしない場合はそれでいいよな
おまいらネタとはいえ恐ろしいこと言うな
72 :
デフォルトの名無しさん :2008/10/25(土) 22:46:13
文字列を辞書順で比較する方法を探しています。 なにか簡単な方法があれば教えてください。 よろしくお願いいたします。
何語辞書?
>>73 いえ、単純に英語のアルファベット順です
abcとabxを比較したらabcが辞書的に先に出ることを判定したいです
>>75 ありがとうございました
かなり参考になりそうです
77 :
モモ :2008/10/25(土) 23:33:28
フォームのサイズを変更できなくするには、どうしたらよいでしょうか?
78 :
モモ :2008/10/25(土) 23:37:12
>>77 解決しました。FormBorderStyle = FixedSingle ですね。
コテハンで質問する意味がわからない やめろとは言わないけど,うざがられる可能性があるだけで何のメリットもないだろ
ギャル語辞書です!
>>58-60 こんな感じかねぇ
static class Util {
private static void ValidateTypeParameter<T>(T dummy) {
var typeCode = Type.GetTypeCode(typeof(T));
switch(typeCode) {
case TypeCode.SByte: case TypeCode.Byte: case TypeCode.Int16: case TypeCode.UInt16:
case TypeCode.Int32: case TypeCode.UInt32: case TypeCode.Int64: case TypeCode.UInt64:
return;
default:
throw new NotSupportedException();
}
}
public static string ToHexString<T>(T value) where T : struct {
ValidateTypeParameter(value);
string fmt = "0x{0:X" + Marshal.SizeOf(value) * 2+ "}";
return String.Format(fmt, value);
}
}
あほだな
GUIをC#で作って、エンジン部分をCで作ったdllで呼んだ場合 全部C#で作った場合よりも一般に高速になりますか?
一般ってなんだよ
一般には速くはならないだろ。
頻繁に呼ぶと確実に遅くなるね
>>86 速くはならんが、頻繁によんでも遅くはならんよ。そこがJITの不思議。
よっぽどくだらない関数をループの中とかで呼びまくったら遅くなるよ
89 :
デフォルトの名無しさん :2008/10/26(日) 09:56:49
>>87 interopのマーシャリングのオーバーヘッドとかって 遅くなる要因にはならないのかな
.netが遅いのは起動時とwindows formsのGUIで、単なるロジック計算なら
普通に書いてもネイティブの90%ぐらいは出るって読んだことがあるが。
よっぽど時間のかかる数値計算でもやるんだろうなw
関数は初回実行時にコンパイルされるけど 二回目以降はコンパイル済みのコードを呼ぶので早いぞ ・・・サーバ向きだな
ああすまんCのDLLとあるね。それなら遅くなる。 遅くならないといったのはCLIのDLLを読んだ場合。
CLIからネイティブコードをよんだ場合そこで最適化が中断されるから遅くなる。 マネージド・アンマネージド間の呼び出しのコストも大きい。 さらにデフォルトのP/Invokeの場合呼出しごとにアンマネージド呼び出しのセキュリティチェックも入る。 一方CLIのアセンブリ同士ならたとえDLLで分離されていてもJITでDLLを越えて最適化される。
結論としてはCのDLLを呼ぶと遅くなるということですね
黙れアホ
と、申すものです。
__declspecってなんて読むの?
ダブルアンダバデクラスペク
でっくるすぺっく
へぇー 元々の意味は何なの?
秦の時代まで遡ってお話しいたそう そう、あれは・・・
「'decl'aration 'spec'ifier」かなぁ。 正確なことは決めた中の人に聞いてという感じ
declaration specifiers
104 :
モモ :2008/10/26(日) 19:40:52
あのね、C# 2.0 の partial class を使っているんだけど、 デフォルトで作られる Form1 というフォームに、さらに、 Form1.Hoge.cs というファイルを作成して、 partial class Form1 と書いたらね、うまく動いたんだけど、 それをダブルクリックすると、空の正方形のフォームが表示されるの。 これって変くないですか?
変なのはおまえだ↑
ピンクの熊?
MSに言ってください
いいことをおもいついた。メインフォームのダブルクリックイベントで Form1.Hoge.csを閉じるようにすればいい。
感じ的はこんなかんじだな。 Form1のダブルクリックイベントのメソッド内で if(Form1.Hoge.csが開いていたら) Form1.Hoge.csをとじる。 Form1.Hoge.csって言う名前がへんだなあ。変なフォームの作り方とかしてないか?
Form1.Hoge.csを開いたらForm1.csやForm1.Designer.csの内容にかかわらず デザイナに初期状態のフォームが表示されるんだろ うちでもそうなった
別の名前空間内に定義した列挙体を使うには、どーしたらいいですか?
using 別の名前空間; とするか、 使う時に、列挙体の前にその名前空間を付けてやればいいんじゃない?
>>112 Σ(´ω`*)インスタンス化ばっか気にしてましたorz
無事usingで出てきやした。ありがとん。
msdn2おもてえええええええええ
AdBlock+で統計業者のリソースGETしないようにすると 場合によっては早くなるかもしれないぞ
116 :
デフォルトの名無しさん :2008/10/27(月) 22:50:43
すみません。DataSetオブジェクトだかDataGridオブジェクトをフォームに貼り付けたとき MyDocumentフォルダのAccessのmdbファイルをプロジェクト内にコピーしますか?っていわれまして コピーしたんですが、プロジェクトのフォルダとプロジェクトのフォルダ\bin\Debugの両方にコピーされています。 これは、正式にインストーラを作る段階で問題にならなく、うまくインストーラが作ってくれるのでしょうか?
自分でやってから言えやドアホが
本格的にC#はじめたんだけど、慣れないことが多い Chr関数使えなかったり、違うクラスのコントロールにアクセスするのに プロテクションレベルがあったり、VBからだと初学くらいの気持ちじゃないとだめだあ
その辺はCよりだからなあ
C/C++より、か
CとかC++とかJavaから移民ならすんなり入れるんだろうけど VBからだとめんどくさいだけであんまりメリットないかな?
意味不明な理屈だな
VBやったことない人には、あのゆるさはわからないかも
>>118 わんくまの誰かもブログで書いてたけど、
そんな風に思うならそれは君がVBすらろくに使いこなせてなかったんだよきっと。
125 :
118 :2008/10/28(火) 19:20:12
128 :
118 :2008/10/28(火) 19:25:01
>>126 すみません。VBって書いてましたが正しくはVB.NETです。
VB6はやったことがありません。
なら余計にそうだろw
>>128 VB.NET から C# へ移行できない人たち に置き換えて読めばいいよ。
VB.NETから始めたなら,勉強に使った本や先生が悪かったね
132 :
118 :2008/10/28(火) 19:34:14
別にVBすら使いこなせてないと思われるのはしょうがないですが
型変換の強制の有無や
>>118 みたいなことって使い方の違う道具であって
「VBでC#と同じ使い方をしないのは間違えてる」という主張はおかしいですよね?
.NETで困っているわけでもないですし、VBのゆるさは実感してるし。
>>132 だから、もしVB.NETとC#の間にそんなに違和感を感じるのなら、
VB.NETもまともに使えてないんだって。間違いなく。
>「VBでC#と同じ使い方をしないのは間違えてる」
むしろこう考えるべきだ。
ちゃんと理解してるならそれでいいよ
わかってなくてなんとなく使ってなんとなく動いちゃってるのが問題
>>126 で言われてるのはそういうことだろ
135 :
118 :2008/10/28(火) 19:39:08
>>133 ようするにVB.NETを使ってるのに型変換を強制しない人は
みんなVBすら使いこなせてないってことになるんですか?
136 :
118 :2008/10/28(火) 19:43:56
>>134 全くその通りだと思います。
>>126 で言われてることと自分が感じたギャップは方向性が違うし
今まで気にしなかったけどVBプログラマに対する偏見や差別みたいなものを
ちょっと感じました。
「初学のつもりで」って書いたのが原因かもしれませんが。
だからちゃんと理解してる奴が
>>118 みたいな事書くかよってw
そんなに人に承認されたいと思ってることが逆説的に君がダメな奴であることを
証明してるんじゃないかと俺は思うけど。
まあMSも似たような見方なのは事実だけどね VBのルーズさは,それが売りなんじゃなくて どちらかというと分かってない人でも使えるようにするためだから
139 :
118 :2008/10/28(火) 19:53:00
>>138 どちらかというと暗黙の型変換はVB6移行組みのためじゃないでしょうか?
VBの方が先にコード出てくるし慣れないのも仕方がない
>>139 それは“何の”暗黙の型変換を言ってるんだ?
初学者向けのVB.NETの情報ではVB固有の互換用関数の使用は慎むべきだよね たいがい手間は変わらないんだから,.NETで一般的なやり方を紹介するべき
143 :
118 :2008/10/28(火) 20:06:23
>>141 OptionStrictで指定する型変換のことですが、”何の”ってすごく変な質問ですね。
何を言いたいのかは察しが付きますが。
C#スレでVB.NETの暗黙の型変換の話を唐突にされたら、突っ込みたくもなるだろうさ
145 :
118 :2008/10/28(火) 20:26:49
>>144 ルーズさの代表選手として例を挙げてみただけですが
突っ込みって見下したような質問のことでしょうか?
歓迎されていないようなので退散します。失礼しました。
自分で自分を卑下してどうする
なるほどこれがVB厨と揶揄される理由か・・・
つうか、ダメグラマ認定して初心者叩きしてるの一人だろ
>>148 少なくとも一人じゃないよ。
まあ小学校の学級会じゃねえんだから人数の問題じゃないと思うが。
それに初心者が初心者であるという理由で「叩いて」るわけじゃない。
ダメなくせに自分がダメだという自覚がないさまを嘲笑してるんだよ。
性格わりぃ・・・
C#の方が崇高であると勘違いしてるやつもいるな
>>151 被害妄想激しいね。
ちなみに、件の彼を非難してた人間の一人である俺は仕事ではメインでVBの方使ってるし、
そんな下らない偏見など持ってない。
VBがダメなんじゃなくて彼がダメなの。
ダメな奴をダメだといってるだけだから。
VB固有関数は知らなきゃわからないだろうし
プロテクションレベルにしたってコントロールのプロパティが
VBはデフォルトでFriendだけどC#はPrivateって話だろ
>>126 のリンク先の内容とはぜんぜん違うよな
単に叩いて優越感に浸るのが趣味の人にしか見えない
>>153 防衛機制激しいな。
まあ俺が仮に「単に叩いて優越感に浸るのが趣味の人」だとしても
言ってることは間違ってないと思うけどね。
一つ聞くが、コントロールのアクセスレベルが仮にC#もFriend(internal)だとして、
お前さんは外からフィールドであるコントロールにアクセスするようなコード
書きたいと思う?
普通思わないでしょ。
これがVB厨・・ おまえらスレタイ読めよ
C#もVB.NETも使うけど、Chrが無いことに関してはC#のほうが好きだなあ。
VBの場合いろんな書き方ができてしまうので C#ぽく書くこともできるしVB6のような書き方もできる。 人の書いたVBのコードを見ると他にどういう言語をやってきたのかだいたいわかるよ。
おまいら、ちょっとくらい 4.0 の話題で盛り上がれよ。
まだそんな時期ではない
PDCの資料出てるよ?
バルーンツールチップを速攻で消す方法ってありませんか? Leaveイベントとかないですよね^^;
ついに動的型か…
変数宣言で型名の代わりにdynamicと書くだけでいいのか VBのStrict Offより手軽だねえ
というか、Strict Off と違って、dynamic と var 使い分けられるのがいい。 あと、VB みたいに Variant ではないし。
ファイルが更新されたらOpenしてちょこっと弄って別ファイルへ出力 ってやる時って FileSytemWatcherよりFindFirstの方がいいのかな 余計なイベント拾いすぎて更新完了されたかどうかの判定が思いつかない
普通にFileSystemWatcher使えばいいじゃないか。
それだと、ファイルを更新しようと開いた瞬間LastWriteTimeが変わるのよね んで、Changeイベント発生しちゃう。上書き保存したらまた同じくイベント発生 最悪なのがアンチウイルスソフト入れてるとその監査で1回多くイベント発生したりで
あぁ、なるほど把握 具体的な仕様が分からんと何とも言えんけど ファイルの更新をSizeで判断するのが許されるのであれば、 NotifyFilterにNotifyFilters.Sizeを指定してやる手もある(分けて書き込まれた場合複数回発生する) 直近のイベントを一時的に自前のバッファに蓄えて(重複を無くす為)、定期的/一定時間経過したら/一定数溜まったら処理を行うようにしては?
>>167 の想定だと、更新対象と出力先が別なんでしょ
そのアプリは監視対象を読むだけで変更しないなら LastWrite で何も問題ないじゃないか
あとは更新完了の判定?
監視対象を(書き込み用に)開いているプロセスが無くなったら更新完了でしょ
(ただし、更新する側がファイル開きっぱなしのクソ設計だったらしらね)
実装としては排他ロックしてしまうのが手っ取り早い
ロック出来なきゃまだ開いているファイルがあるので保留
アプリっちゅうかサービスですな。 Sizeで見るって手も浮かんだけどSizeが必ず変わるか?というの考えたら 排他処理がわからんので、LastTime来た時点でOpenさせてみて 失敗したら待機後また挑戦というアレな方法しか思いつかなかった。
更新するほうのアプリをいじれるならいくらでもやり方は考えられる。 その更新というのは単に上書きなのか、追記なのか、部分更新をしているかで 扱いが変わるかもしれない。
コピペ君って馬鹿だな、まで読んだ。
まあ、そこで議論して変更されたことはかつて一度もないけどな。
それ隔離スレだから
180 :
179 :2008/10/31(金) 00:06:26
181 :
179 :2008/10/31(金) 00:08:59
182 :
179 :2008/10/31(金) 00:37:16
そもそも何がしたかったかの背景を言うと・・ ・DataGridView にネットワークストリームでひっぱってきた画像やらなんやらいろいろ表示させている ・データの管理はDataTableでやってる ・DataGridViewとDataTableはバインドさせてる ・アプリ終了時に、DataGridViewの内容をそのまま復帰させたい。 →DataTableをシリアライズすりゃいいんじゃね? ってことでDataTableのシリアライズにこだわってますた。 解決方法として思いついたのは(試してないけど) ・DataTableにはMemorySteamを持たせ、CellFormattingイベントで毎度セルに描画させる。 ・バイナリでDataTableに突っ込むのはあきらめて画像はファイルとして保持 DataTableには画像のパスを持たせて、CellFormattingで毎度セルに描画 ・ネットワークストリームを一旦MemoryStreamにかませて、MemoryStreamはクローズしない。 てくらいっす。
ウワッ。キモっ!こんなヤツに付きまとわれるとかなわん。俺はパスな〜 って思った香具師・・・挙手 ノシ
>>180 StreamはBitmap(Stream)で作ったBitmapがDisposeされるまで閉じちゃいかんよ。
Genericを使ったコードを書くと、「using System.Collections.Generic;」の行で error CS0234: 型、または名前空間名 'Generic' は、クラスまたは名前空間 'System.Collections' に存在しません。アセンブリ参照があるか確認してください。 とエラーが出てしまうんですが、何が原因なのでしょうか? (Genericを利用しないコードは、問題なくコンパイルできます) パスを通すために、sdkbars.batを実行してから再起動もしたんですが、何も変わりません。
186 :
デフォルトの名無しさん :2008/10/31(金) 13:55:03
C#からCSVファイルを扱うにはどうすればいいですか?
csvreader C#でぐぐるといろいろ出てくる
>sdkbars.batを実行してから再起動もしたんですが なにを再起動したのかね?きみ
ワロタ 再起動したらまたbat実行しなくちゃな
190 :
185 :2008/10/31(金) 16:13:36
バージョンが古くGenericに対応していなかったせいのようで、 バージョンを3.5にしたら解決しました。お手数おかけしました。
0xffffffffをunsigned取る関数を渡すにはどーすればいいの?
もうちょっと分かりやすい日本語を
-1
>>191 エスパーすると、Uint32.Parse()のオーバーロードに目的のがあるだろ
英語でもおk
寧ろ、C#で書いてもらった方が
unchecked
signedじゃねーか
199 :
179 :2008/11/01(土) 02:37:58
>>184 そうだったのか。
じゃあ解決したのかな。dクス!
Managed DirectXとWPFとXNAって何が違うの? なんでこんなショボイことやってんのMS 筋通せごるああああああああああああああ
MDXは過渡技術だけど、 WPFとXNAはそもそも用途が違う。
MDXは単なるDirctXのManagedなラッパー。 XNAはゲーム用フレームワーク。 UpdateとかDrawが最初からあって、その中書くだけでゲームになる。 WPFはデスクトップ用。 HTML+JavaScriptのノリで、XAML+C#を書いてプログラムを作る。 ボタンとかテキストボックスとかのコントロールが多彩。
それを統一できなかったのかって話でしょ
MDXはTom Millerの個人プロジェクト XNAはチームで作っているプロジェクト WPFは巨大なチームで作っているプロジェクト
>>203 要求されるものがかなり違うから。
それでも統一できるほど今のハードウェアは十分じゃない。
XNAは箱の都合
用途に応じて使い分けることを無駄に強いられたわけだ
根底がDirectXなんだからMDXの上に構築するのは可能だったろ
確かにWPFは低レベルなレイヤを公開してその上に構築してほしかった
低レベル層を公開するデメリットも有るからね。 極力、ハードウェアに依存するようなところを隠蔽して、 抽象化しておきたかったんだろう。
Silverlight触ってると、かなり深いところまでC#で書かれてるWPFの良さが分かった Silverlightはガチガチすぎる
212 :
デフォルトの名無しさん :2008/11/02(日) 11:33:40
FormにGraphicオブジェクトのDrawLine()メソッドで 矢印を描画しました。 これをマウスでドラッグ&ドロップをしたい場合、 簡単な方法はありますか? というかGraphicsオブジェクトは FormのControlsプロパティのAddメソッドに 追加できないのですね・・・とほほ。 すみませんが教えてください。
簡単な方法はありません ヒットテストして移動させる処理を自分で書きます
補足 移動させるというのはあくまで抽象的な話で、実際はコントロールのような仕組みに一切頼らず 自分で位置を決めてDrawLineで毎回描画する必要があります Lineクラスとか自分で定義して線を描画する位置を管理することになります
WPFマジ最高ってことですね PathとかもFrameworkElementだもんな
どっちみちドラッグで移動させるのは自前で書かないといけないけど
>>213 普通にLabelあたりを継承したコントロールとして実装した方が
ずっと簡単に思うんだけど・・・
線を移動する目的を想像すると、そういう方法で足りる場合って考えにくいと思う
単純な平行移動だけじゃなく、MS Officeの描画オブジェクトみたいに 図形そのものの形状も編集できるようにしたいってこと? それにしてもマウスポインタの当たり判定を自動でやってくれる分、 何らかのコントロールから派生した方が簡単じゃないのかな。
コントロールは透過の扱いがめんどいからねー
>>220 いやそれはリージョンを設定するだけでしょ
いろいろ工夫してごにょごにょするよりは自前でやっちゃった方が早かったりする
それなりに複雑な形状の当たり判定なんて本当に「ごにょごにょ(気持ち悪い言葉づかいだよこのヲタグラマ)」 できるのかよ。
質問者が言ってない前提を持ち出して何いってんだ?
できるよ
>>224 つまり図形の編集までは言ってないってことだよね?
俺もそう思うんだが、ならばなおさらコントロール派生した方が簡単でしょ。
矢印というのが微妙だな 矢印移動して何するんだろう
228 :
212 :2008/11/03(月) 10:23:07
みなさん回答ありがとうございます。 私としては、コモンコントロールのどれかを 継承して実装を行うのが一番楽かなということに まとまりそうです。 ご意見ありがとうございました。
typedefってどうやるんですか? class A<T> { public typedef T typ; } 見たいな事したいんです。
ない ファイル単位でならusingディレクティブで似たようなことはできる
退化かよ
型のエイリアスはリフレクションと相性悪そうな予感
>>231 クラスなら偽装で派生させれば一応可能だね。
あまり誉められたやり方じゃないかもしれないけど。。。
どうしてもほしかったらプリプロセッサ書けばよろし。
>>231 冷静に考えればCだってファイル単位じゃん。
>>229 A<string> a = new A();
var item = a.GetItem();
でいいでしょ
237 :
236 :2008/11/03(月) 12:32:06
訂正 A<string> a = new A<T>(); var item = a.GetItem();//GetItemの戻り値はT型
つか using ディレクティブ挙がってるのにやり方書いてないな using ディレクティブは 2 つの機能があって using System; と using HANDLE = System.IntPtr; があるので後者で済ませという話。typedef はあってもよかった説が あるけどどっちにしろ「すでに遅い」。
typedefというより、本質的には他のファイルをインクルードできない問題でしょ。 typedefなんていらん。
extern aliasみたいな感じで、global alias HANDLE;とすべてのファイルに書いて AssemblyInfoで宣言するみたいなのはできてもいい気はする
>>237 A<string> a = new A<T>();
a.type item = a.GetItem();//GetItemの戻り値はT型
見たいな感じでitemの型をTに限定できないかな。
>>239 インクルードと typedef は何の関係もない
型に別名を付けるだけだからな。スコープもきちんと持つし、
気になるのはトークンの判別だけどネストクラスが出来る
んだから大丈夫だろ。
要らないとかについてはたとえば MouseEventHandler とかは
typedef MouseEventHandler EventHandler<MouseEventArgs>;
とかの方がきれいなんだよ確かに。
243 :
242 :2008/11/03(月) 13:26:56
ごめんなさい typedef EventHandler<MouseEventArgs> MouseEventHandler; ですた
逆
ごめ。リロードしなかった。
246 :
236 :2008/11/03(月) 13:28:36
>>241 何度も悪いけどTじゃなくてstringね
varと何が違う?
itemの型はちゃんと型パラメータに指定したstringになるよ
>>242 だから別名の機能そのものはC#にもあるから新たにtypedefなんかいらんでしょ。
もし問題があるとすれば、その別名定義がCと同じようにファイルスコープなのに、
別名定義したファイルをインクルードする機能がC#にはない点だけだ。
stringとString Int32とint この関係をC#の文法で書くとどうなってんの using int=System.Int32?
C#では書けない 「C#となのるいじょうりょうしゃはまったくおなじ」
それも二つの書きかたがあるんだから typedefがあってもいいだろ
CLRと言語の仕様は違います
int≡System.Int32はC#の言語仕様です 嘘だと思うなら読んでみ
253 :
251 :2008/11/03(月) 17:19:29
?
>>253 の名前欄は252の間違い
ごめんなさいごめんなさい
>>247 そんなレベルの話ではなくてだな、CLI レベルの話
ヘジの答え抜粋
■C++から移行した多くの開発者が「typedef」(=型の別名を定義するキーワード)
を欲しがっているが、C#では組み込まれないのか?
この要望も以前からあったが、typedefキーワードの問題点としては、型の別名を自由に
定義できてしまうので、プログラマーにとって混乱を引き起こしやすいことが挙げられる(
型の名前を見ただけでは、本当の型の種類が何か分からない)。
また.NET Frameworkでは、それぞれの型には1つの名前しか定義できない仕様になって
いる。従ってtypedefを効果的に使うには、.NET Frameworkレベルでの対応が必要になり、
それが全言語へ反映されなければ意味がないだろう。
しかしこの規模の対応を行うには、もう現時点では「ときすでに遅し」だ。ただ一応、今後も
引き続き検討は続ける予定である。
へジたんはtypedef嫌いなのか そういえばLinuxのカーネルだったかGNUだったか忘れたけど typedefはやめたほうがいいって主張してる人いたね へジたんのインタビューは結構面白いんだけど 英語を訳しきれずに間違って解釈してそうで怖いんだよなー どこかで和訳してないだろうか
>>256 どんなレベルの話だろうと
>>242 はおかしい。
typedefがないことなど問題の本質ではない。
>>257 だからヲタは気色悪いんだよ。
そういうの面白いと思ってるのか知らんけど。
>>258 意味がわからんのだけど
お前がいう「問題の本質」ってなに?
そっとしておけ
>>258 うーむ。なんかこう、typedef の機能「自体」が伝わってない気がする
C++ 屋が typedef ほしいってのは「エイリアス」がほしいんじゃないん
だよぶっちゃけると。識別するためにそりゃ名前付けるのがやってる
ことだけども本質は静的に型を「組み合わせて」「伝えて」いきたいの。
型でプログラミングしたいのよ。
だから型システムに組み込まれてないと困るの。そして using は
せいぜい機能が補間だから役者不足。ファイルスコープがどうとかで
はなく。インクルード追加されたところで同じ。モジュール(スコープ)
単位が型じゃなくなるから一緒。
もっともシンプルな STL の例なら、vector<T> が iterator を内部に
もってそれをさらに参照してみたいなことがしたいのようするに。
型に型持たせてメタメタりたいの。
262 :
261 :2008/11/03(月) 20:15:29
ああ追記。「良い」「悪い」の話ではないぞ。そういう「要望」って話だぞ。 俺はむしろ微妙に否定派だし。
>>261 .NET全体として実行時メタプログラミングが大ブームなので(LISP回帰とも言うが)
その要望自体がもはやニッチすぎるんだと思う。
Expression Trees v2とか見てみるといい。
例えば.NETのTypeConverterAttributeは、C++ならtypedef使うんだろうなぁ。 昔から属性でメタメタやってるし。 逆に属性でメタメタやれてないC++屋の方が哀れに見えることもある。
まぁC++も属性付く様になるんだけどね まだまだ先だけど
参照されなくなった時点で通常のクラスのインスタンスと同じようにGCの対象になるか、 あるいはもう一ひねりして自動的にCloseするFormを作ることは可能? 可能だとしたらどうしたらいいんだろう。
ダミーのオブジェクトにFormの参照持たせとけば
フォームを閉じるのをGCに任せるのはちょっとw… 参照カウンタ付けてタイマで見張る方がまだマシだと思うよ
MessageBox.Show("フォーム閉じて!!!")
270 :
デフォルトの名無しさん :2008/11/05(水) 12:13:08
フォーム管理用のオブジェクト作るに1票
きまぐれなファジイタイマーで閉じるに100バルサミコス
272 :
モモ :2008/11/05(水) 19:23:52
あのね、 function Format(string format, params object[] args) { } という関数で受け取った args を、可変個引数として String.Format に渡すには、どうしたらよいですか? String.Format(format, args) では、args が引数の1つになってしまうよね?
String.Format (String, Object[]) が呼ばれりゃいいんじゃないの?
jscript.netなテイストがほのかに
C#4.0のジェネリクス共変・反変で in, out をつけたのって何か属性とかつかないの? デフォルトパラメータは属性がつくみたいだけど
>>275 言語レベルの実装なら間違いなく付くでしょ
もしかしたらCLRに組み込まれるのかもしれないけど
>>276 自分でAddRef/ReleaseRefとか定義して呼び出せばいい
WPFなんかだとDisposeを排除した代わりに内部にそれっぽいのが結構出てくるよ
>>277 CLIは2.0の段階で既にcovariance/contravarianceをサポートしてるよ。
あとは標準ライブラリとC#の文法を変えるだけ。
結論 GC(゚听)イラネ
>>275 ジェネリックパラメータが共変/反変を許すかどうかは、
既にメタデータとして持ってるから、属性はつかないと思うよ。
inかoutかはわからないよ 使われ方から逆に推論することは可能だろうけど、そんな気持ち悪いことするより どうせBCLに手を入れないといけないんだからついでに属性付けるだろ
いや共変/反変のフラグは別なのか じゃあいらないね
すまん、Formの上に半透明なFormが乗っかってるとして、上のFormにマウスイベントが来た時に内容を判断して不必要なものだったらそのまま下にスルーしたいんだが何かエレガントな方法はありますか?
同じアプリケーションのフォームならマウスの位置から 下のフォームインスタンスを取得してイベントを送る。
in, out によって属性がつかないのなら 別アセンブリの場合にコンパイラはどうやって判断してるんだ
>>285 いや、だから、2.0でジェネリックスが導入されたときから、
型のメタデータとしてゲネリックパラメータがco-/contravariantであることを示す
フィールドが用意されてるの。今更、属性を追加する必要なんてないの。
>>285 public delegate T MyFunc<out T>();
と定義しておいて、
Console.WriteLine(typeof(MyFunc<>).GetGenericArguments()[0].GenericParameterAttributes);
結果
Covariant
コンパイルさえしてしまえば.NET 2.0環境でも動く。
例が悪いよ デリゲートの共変反変は2.0から使える
291 :
290 :2008/11/05(水) 23:30:19
意味が違うな 上は間違い
>>286 単に下のフォームのMouseHogeイベントを呼びたいだけなら、OnMouseHoge()を呼べばいいだけだが、
下のフォームの該当する場所にボタンがあった場合はボタンクリックイベントを呼びたいとか、
datagridviewがあった場合は適切なイベントを呼びたいとかであればかなり泥沼になると思う。
自力でいろいろ用意してMouseHogeイベント時の座標から適切なOnHoge()を呼び出す必要がある。
そのために下のフォームに配置されているコントロール全てをカスタムコントロールにして、
OnHoge()を全てPublicメソッドで公開する必要があるし、そんなことするくらいなら
俺だったら設計自体を考え直す
共変反変の機能はCLR2.0から持ってた しかしC#は使っていなかった
in や out を明示しなければいけないのは何でなの
>>293 OnMouseHogeをよぶとMouseHogeイベントに突っ込んどいたデリゲートまでよばれるの?まぁみてきます。
とりあえずコントロールとか一切使ってないんでいわれてる問題はないんだけれど、そこら辺も回避する何かエレガントなイベントスルー方がないかと思ってた・・・
>>294 勘違いをなくすため
>>294 関数の戻り値の型にverが使えないのと同じ理由だろうね
推論の結果が広範囲に影響を及ぼすってのはC#流じゃないんだろう
inだと親方向 outだと子方向に伸ばせるわけだろ 全然意味が違うんだから明示するのが普通なんじゃないの
Hoge<object> x = new Hoge<string>() // 1 Hoge<string> x = new Hoge<object>() // 2 現状は1, 2ともコンパイルエラーになって代入できない。 Hoge<out T> や Hoge<in T>で1か2の代入が可能になる。 前者が1だと思うがちと自信がない。
299 :
295 :2008/11/06(木) 18:44:50
二つ質問があるんですが、 [Q1] FormをHideすると、システムからトップレベルのウィンドウに来るメッセージが 来なくなるようなんだけど、何かこういうメッセージを拾うことが可能なまま 非表示にする方法ってないだろうか? Opacity を0にするとかはない方向で一つ。 [Q2] メインフォームの参照を取得するにはどうしたらいい? Application.OpenFormsで全部のフォームの参照が取得できるようだから、 後はフォームがメインフォームかどうか判定する方法があればいいように思うんだが…。
メインフォームって何よ
Application.Run()にぶち込んである奴のこと。 早い話、閉じるとアプリが終了するフォームのこと。 別に俺様用語じゃないと思うんだけど、俺の思い違い?
閉じるとアプリケーションが終了するかどうかは そのアプリにしかわからない
>>300 [1]
this.FormBorderStyle = FormBorderStyle.None;
this.Size = Size.Empty;
でどうよ
メインを管理したいならApplicationContext使え でHideだからってメッセージ取れないってことは無いと思うが とりあえずWM_TIMECHANGEは来てるし
>>304 微妙な感じですね。
2X2ピクセルぐらいの大きさでどうしても表示されてしまう。
(XPのクラシック表示で)
>>305 前半はごめん意味が分からない。
後半は、たしかにおっしゃるとおりでどうやら俺の勘違いみたいだね。
来ないのはフォームのインスタンスを作成後一度も表示してない場合だけで、
一旦表示後Hideした場合はちゃんと受け取れるみたい。
>>294 タイプセーフのためだよ
そういうルールにしとけば実行時に型エラーが出ない
> 来ないのはフォームのインスタンスを作成後一度も表示してない場合だけで、 そりゃインスタンス作っただけじゃハンドルは作られてないしな つか意味分からんとか言う前にまず検索しろよGoogleでもMSDNでも
Form.Visible = false;
>>308 もう命令口調クンは答えてくれなくていいよ。
前から指摘してるけど、キミって人格的にちょっとおかしいと思うよw
命令口調クンが一人なのかどうか知らないけど。
ちなみに一応反論めいたことも言っておくと、
そもそもApplicationContextに触れる側のコードならメインフォームを
直接取得するのも普通は困らないはずで、だとしたら質問として成立しないはずだよね。
main()のある側のコードに触れないか、触れても触りたくない事情があるから
聞いてるんだよ当然。
端的にはmain()のある側から依存されても依存はしたくない
ユーティリティクラスのメソッドとして欲しいんだけど。
メインホームの名前憶えとけよ
>>310 じゃあApplicationContext.AddMessageFilterはどうだろうか?
> 取得するのも普通は困らないはずで、だとしたら質問として成立しないはずだよね
それがなぜかそのことに気づいていない人のほうが多いもんで、
答えるほうもまずそっちを想定してしまう。
313 :
デフォルトの名無しさん :2008/11/06(木) 22:22:36
VS2005 で、C# で書いたソースのコメントから、 ドキュメントを生成することはできないのですか? Doxygen みたいに。
>>312 なるほど、ダミーのフィルターを作ってそれに食わせてみたけど
確かにそれでも拾えるね。
馬鹿みたいな数同じメッセージを拾っちゃうのをなんとかする必要はあるみたいだけど。
ありがとう勉強になった。
>>310 横レス失礼するよ
最初に前提述べないほうが悪いと思う
君の同僚との会話じゃないんだから
>>316 確かにそうかもしれない。
実際
>>300 を投稿する前にその辺りの事情を詳細に書くべきか迷った。
ただ、相手はこんなスレにいる人たちだし、「Application.OpenFormsで〜」
のくだりとかからだいたいの事情は斟酌してもらえるだろうと最終的には判断した。
あまり長い文章だとそもそも読んでもらえない可能性もあるし。
うぜぇぇぇ
>もう命令口調クンは答えてくれなくていいよ。 >前から指摘してるけど、キミって人格的にちょっとおかしいと思うよw >命令口調クンが一人なのかどうか知らないけど ここらへんの時点で既に排除されても文句は言えない
思い込みによる間違った前提とオレ用語 相手にしたくない質問者の一人だな
命令口調って何かまずいわけ? 見てくださいってお願いすればいいの??
かまうなよ
>>313 騙されたと思ってDoxygenに通してみそ。言語設定をC#にするのを忘れずにね
思わずふいたwww
ああああああ [END] いいいいいい [END] うううううううう ↑のように書いてあるテキストをdata.txtとして保存して、 sr_init = new System.IO.StreamReader("data.txt", Encoding.GetEncoding("Shift-Jis")); string raw_str = sr_init.ReadToEnd(); string[] arr_str = raw_str.Split("\r\n[END]\r\n".ToCharArray()); としたらarr_strの中に空のstringがいくつか有ったんですが、これって何が原因なんでしょうか? 誰か分かる人教えてください
"\r\n[END]\r\n"全体でひとつのセパレータとして使うわけじゃなく その文字列に含まれる各文字をセパレータとして使うってことだろう なので最初の\rに出会ったら分割、次の\nに出会ったら分割・・・となる
>>325 2 つの区切り記号が隣接している場合、
または、区切り記号がこのインスタンスの先頭か末尾に見つかった場合、
対応する配列の要素には Empty が格納されます。
>>326-327 ありがとうございます、MSDNよく読めば載ってそうな感じですねごめんなさい。
ちなみに、
>>325 が想定しているような動作をしてくれるメソッドってあったりしますか?
StringSplitOptions.RemoveEmptyEntriesを指定すれば
string[] seps = new string[]{"\r\n[END]\r\n"}; raw_str.Split(seps, StringSplitOptions.None);
システムディレクトリ(XP以降ならWindows\Sytem32)に特定のネイティブdllが 存在しているかどうかを確認するにはどうしたらいい? そこに対するアクセス権限がないユーザーで実行した場合でも動作する方法でないと困る。 もちろん中の適当な関数を呼び出して例外が発生するかどうか見ればいいんだろうけど、 もう少しきれいな方法はないもんだろうか。
System32の読み取り権限がないユーザじゃWindows動かないと思うが
どうせ読み取り権限ないとだめだが、Win32APIのLoadLibrary/FreeLibraryでうまくいくかどうかというのはどう。
>>332 MSDN Libraryならとっくの昔に終わってる
翻訳ができてないのはインテリセンス
>>334 実際やってみた。
Windowsが動かないということはないみたいだけど、
なるほどいろいろ不都合なことが起こるみたいだ。
ということは、少なくとも全てのユーザーがSystem32の読み取り権限を持っていると
仮定していいって事なのかな。
Windowsのこの辺りの知識ってどこで仕入れればいいんだろう。
>>335 なるほどそれいいかもしれない。
.net4.0って clrのバージョン変わるの?
変わるよ
ttp://mag.autumn.org/Content.modf?id=20081107135641 >過去には6万個ぐらい(だったと思うが記憶は定かではない)のXMLファイルを1つのフォルダに入れて扱ったことがありますが、これは公的に定められた手続き上必須の要件でした。
ほんとかよ。
公的に必須てどういうことだ?
言いたいことの本質はもちろん理解できる話なのだが、
Windowsで1フォルダに大量ファイルはできるだけ避けるのが当たり前だと思ってた。
※サブディレクトリに分けるなどしてとにかくできるだけ避ける方向で検討する
かわるらしい。
でもこんどのCLRはCLRSXSでCLR2.0をつかうものと4.0を使うものを同じプロセスで混在できる。
>>340 クライアントとの取り決めでそうなった、という事では?
無茶な設計でも、既に稼働してるシステムだと、受け入れざるを得なかったりするし。
あり得ない話ではないけど、普通その前にできるだけ避けるよねって話なんじゃ
C#関係ないよねって話です
3.0と3.5は4.0に統合されるの? 1.0や1,1が2.0になったように
1.0は1.1になったけど、1.1は2.0になってないよ。
1.0も1.1にはなってない。 基本的に下位バージョンアセンブリが上位のバージョンでも動くかどうかだろ?
>>611 医者が「脳味噌にスタンガンでも当てたのか?」とか言ってたからね。
医者の視点から見て、そのくらいのダメージを受けたのは確かな筈。
>>614 全体的に演出は充分過ぎる。今季アニメの中でも、平均以上の出来だよ。
「部分部分で出来が良い所もある」というより、「部分部分で出来が悪い所もある」程度のレベル。
走ってる所も各キャラに視点を当てたりして、なんとかごまかそうとしてるし。
元の話が悪い、としか言えない。
あのシーンのインデックスのセリフを心の声にするなら、
これまでの「インデックスが魔術使うシーン」を全部、インデックスの心の声にしなきゃ不自然だろ?
でもそうしたらロリ先生との時間の会話とか必要なくなる。
そうやって不必要な部分を削っていくと、最終的に「このアニメ自体不必要」という結論が出かねないよw
どうやっても原作が問題だらけなんだよ。
>>350 ___
/ー-ヾ
うっせー禿> /・ ・ ヽ___
____ | ゚ ●/ ̄
ヾニ=_ ‐―-、 ,.-‐-、V⌒ / ゝ ̄ ,ノ___ 〃⌒ヽ
ツト、__\〈〈ノ(・) ヽ -‐=====ニニニ> /i! \ヾ 「ヨニl ! @ )
/ ヽ、ヽヽヽヽ (・)_i -‐=====ニニニ>/ヽ__l \ ヾ、__ノ
ヽ、、、、ノー、 _ノ > > > > __\ l__-、ヽノ―――-----、
 ̄  ̄―  ̄ヽ > > > > ヽ_____〈 /′___  ̄ ̄
ヽヽヽヽヽヽヽヽヽヽトト! / / .ン / / /
 ̄ ̄ ̄ `^ー―-------
ど、どこの誤爆だ?
とある魔術の禁止目録 のアニメの話題だと言うのは分かる 原作もアニメも見たことないが
やっぱりプログラマってキモヲタがいかに多いかってことなのかね。 こんな奴らがいることがプログラマの社会的評価を下げているわけで、 正直個人的にはキモヲタプログラマは殲滅してやりたいと常々思ってる。
おっとLarry Wallの悪口はそこまでだ
このスレを見ている人はこんなスレも見ています。(ver 0.20) 会社で使えない奴、それはワタシ/アイツ [プログラマー] おまえら・・・
357 :
デフォルトの名無しさん :2008/11/09(日) 23:16:42
C# + 2008環境で、 独自のコントロールを作ろうと思っています。(なるべくWindows標準っぽく見せたくないので) ツリーやリストコントロールのスクロールバーを独自のデザインに変更したいと 思っているのですが、可能でしょうか?
可能だけど面倒だよ WPFなら標準的にそういうのがサポートされてるから簡単にできるんだけど
というかWPFでは見た目変えるだけならカスタムコントロールを作る必要すらない
「なるべくWindows標準っぽく見せたくない」というのはどうなんだろう デバイスのコントロールパネルなどで無駄に独自っぽいコントロールとかウィンドウとかマウスカーソルとか 使われると腹立つんですけど……
361 :
357 :2008/11/10(月) 00:08:40
返信ありがとうございます。 WPFを使う予定は今の所ないです。 面倒と言うのは、Windowsコントロールを継承せずに、 Controlクラスを継承してすべて独自で描画するとかでしょうか?
継承して見た目を変えられるものもあれば変えられないものもある 統一できないとかえって見苦しいと思う
>>360 機能に違いが無いのに色や形だけ独自のコントロールは要らないし余計だよなー
そのような存在が許されるとしたら、ゲームだな。 まあ頑張って書いて下さいとしか言いようがないけど。
独自描画とか柔軟性を突き詰めていくと結局 WPF そのもの か似たものになるがな とそういや。デザイン方面の知識は「きちんと」あるよな? コントロールのデザインって素人が出来るほど「甘く」ないぞ。
何言ってるのこの人 こわい
>>365 Form上でのフレームワーク作ったんだが、結局WPFにニタ部分が結構出てきた。
いまのところWPFより速く重何に使えて満足。
あたま「おかしい」だけで 「こわく」はないぞ?
ああ、ごめん。いやキモいのはあやまるけど、デザインなめんなって だけだよ
.NETの4.0はいつごろ出るんだろう
英語版は2009じゃ?
2009年末ぐらいには出るのかのう・・・
じゃあ Windows 7 にのるのは .NET 3.5 までか
VS 2008のときは、英語版のMSDN会員向けダウンロードが2007年11月頭とかだったよな、確か。
抽象的な質問で申し訳ありません。 現在C#で作成中のプログラムでネットワークを利用したアップデート機能を作成したいと思っているのですが プログラム側で特定の文字列データ(バージョンや設定の情報)を自身のホームページへと送り ホームページ側でどれが相応しいかを返してあげたいと思います。 この様な処理を行うにはCGIを利用するのが適当かと思ったのですが あいにくCGIはさわりしか知らないので軽く調べてみたところ ホームページ内にフォームを設置しそれを読み取る方法ばかり当たってしまいました。 他のプログラムからの受け取りなどの処理は初心者向けのページでは取り扱っていないだけなのでしょうか それとも、こういったことはCGIではできないのでしょうか? C#の質問とは言えなくなってしまい申し訳ありませんがお教えいただけないでしょうか。
ClickOnceは使わないの?
>>377 サイト側じゃなくてプログラム側で解析すれば?
最初は普通のtxtとかxmlでバージョン情報が記載されたのを落として
プログラム側で解析、それをもとにもう一回ダウンロード、とか。
あと、C#ならASP.NET……
CGIでもできると思うが それをやるにはCGI側だけじゃなくて ブラウザなんかがウェブサーバに送ってるリクエストを理解する必要があると思われ HTTP GET POSTとかも混ぜてググれば使えそうな情報が出てくるかも、出てこないかも
ClickOnce使えよ
cgiの代わりにC#では何を使えばいいって質問なんじゃない? XML-WebService、WCFあたりでどうよ。
ImageListとかImageList.ImageCollectionはなんでsealedなん? 継承してアイコンの遅延取得してみたかったのに
アンマネージリソースのラッパーにすぎないからどうせ継承しても何もできない
ジェネリクスの共変と反変は今すぐにでも欲しいお
ゲネリックはプロパテーに使えないの?
out付けたら引数限定、in付けたら戻り値限定でしょ List<T>なんかには使えないよね せいぜいIEnumerable<string>がIEnumerable<object>として使えるくらいで、 そんなにむちゃくちゃ便利にはならないと思うよ
389 :
388 :2008/11/13(木) 23:36:18
すまん逆だ out付けたら戻り値限定、in付けたら引数限定
>>389 あのin out はそういう風に理解したらいいのか。
VS10のCTPはでか過ぎて試せてない。
>>388 その極めて限定的な機能を今すぐ欲しがる人は結構多いと思うよ。
もし無理やり共変と反変ができるコレクションを作るなら Collection<in TIn, out TOut> where TIn : TOut か
インターフェイスを分けろって class Queue<T> : IQueueIn<T> , IQueueOut<T> {} interface IQueueIn<in T>{} interface IQueueOut<out T>{}
どうせinとoutが違うようなコレクションは作らないんだから意味ないだろ WriteOnlyCollectionはありえないからReadOnlyCollectionがout Tをとれるようにすりゃ十分
たとえばcompositとかで 親や子のオブジェクトを型指定で得たいとか。
キャストすりゃええやん
キャストしたら型安全性が崩れるっちゅーの
ReadOnlyCollectionをoutにするのは無理じゃね? ICollection<T>以下が実装できないからIEnumerable<out T>からの派生になって超不便になるな
IReadOnlyDictionaryとかIReadOnlyListとかあった方が良かった気がするな
そしてC++的constの再来
なんでjavaはジェネリックの共変と反変のかわりにワイルドカードなんていう糞なものを持ち込んだんだろう C#のやり方のほうがどう考えてもわかりやすいよな
>>401 そりゃ単純に、作ってるやつがクソなんじゃね?
>>401 ランタイムに大改造を施すのが嫌だったんでしょ。
javaのジェネリクスで共変と反変をサポートするならランタイムの改造はいらないだろ どうせコンパイル後は全部非ジェネリック型になるんだから
最終話「JavaとC++の狭間で」
Java「僕はここに居てもいいんだ!!!」 周り「おめでとう。パチパチパチパチ」
そして、全ての言語達に おめでとう
でもぶっちゃけJavaはいなくていいだろ・・・
何を言うか、Javaにも美点はある 普及率とか、普及率とか、普及率とか
家電製品ってJavaじゃなかったっけ?
携帯にはJava程度の言語にしないと死者が続出するのでC++とかは禁止になった
海外製家電はどんどんWindows Mobileに置き換わって Java が減っていく気がするけど、 i mode のせいで日本だけ Java が生き残りそうな気もする。
どっかの調査では企業向けの環境で.NETがJ2EEを若干上回ってる。 この2つが他のものを大きく引き離して、あとはホストとかウニックスとか。CORBAもあったな。その分類の仕方に若干違和感を覚えたが。
構造体のメンバにstringを加えると何か問題ってありますか? その構造体の配列を作ったとき、メンバに参照型を含めない場合と違って 配列のひとつひとつの要素がGCの回収対象になったりしますよね?
別に問題ない 少なくともその配列への参照が残ってる限りは要素がGCに回収されることはない 構造体とか関係ない
>>414 >その構造体の配列を作ったとき、メンバに参照型を含めない場合と違って
>配列のひとつひとつの要素がGCの回収対象になったりしますよね?
GCで問題になるのは、回収対象の数が純粋に増えて困るというケースと、
オブジェクトの参照関係のグラフが複雑になって困るケースの主に2通り。
前者の方を心配してるみたいだけど、
後者を避けるためにメンバから参照型を排除するというのは実際ある。
ただ、デスクトップCLRのGCは優秀だよ。
XNAで作られたゲームすら、PC実行でGCが問題になったケースは聞いたことがない。
漠然とGCを気にしてるだけなら、そこまで気にする必要はないと思う。
417 :
416 :2008/11/15(土) 15:54:03
あと「配列のひとつひとつの要素がGCの回収対象になったり」は(構造体配列の場合)誤り。 構造体配列なら、メンバに参照型を持っていようが持っていまいが 配列全体でまとめて寿命管理が行われる。 要素単位で回収されたり回収されなかったりはない。
>>416-417 一応Compact Frameworkの話なのですが
問題ないようですね
どうもありがとうございました
Mobile機かぁ。 Silverlight 2 for Mobileが正式リリースされたら、 Compact CLRで実行するより Silverlight 2 (CoreCLR)の方が速かったりしてw
421 :
デフォルトの名無しさん :2008/11/15(土) 23:29:48
javaもc# (dot net)も実際はあんまり差はないと思う。実用的なところでは、どのあたりに差があるの?
MSか否か
.NET デスクトップアプリケーションでもそこそこ使われている感じがする。 実質Windows専用。 P/InvokeやCOM相互運用であっという間にネイティブコードを呼び出せる。 ジェネリックがJavaよりまともという評判。
LINQとかでちょっとC#の方が先んじてる感じはあるけど、
言語の差なんてのは時間の問題でそのうち追いつかれる。
>>422 がすべて。
正直、SUNじゃ話にならん。
だまれ小僧!お前にサンが救えるか!
スンとか既に死んでるだろ。 鯖屋は鯖だけ売っとけよ
427 :
デフォルトの名無しさん :2008/11/16(日) 00:29:35
それじゃdot netからjvmを呼べれば好きな方使えるね(もしくは逆にjvmからclrとか)。 すると両方の膨大なクラスを使えるようになるけど、そういうブリッジ用途のライブラリはないの?
ライブラリじゃなくて言語だけどJ#……。使ったことないが。
>>427 後者はJNIとC++/CLIを使えば容易に実現できる。Eclipseのwin32-wpf版とか。
430 :
429 :2008/11/16(日) 00:37:03
あや、JNIってJavaコードのエクスポートも出来るんだっけか。忘れた。
431 :
デフォルトの名無しさん :2008/11/16(日) 01:14:17
>>425 あれ?君・・・何か勘違いしてないか!?
432 :
デフォルトの名無しさん :2008/11/16(日) 01:18:59
いやいや。そういうC++を思い出すような低レベルのじゃなくて、もっと普通に使いやすくしたライブラリなんですけど。 ネイティブへのアクセスAPI使えばそりゃ誰でも作れますがなw なんかP/Invokeの延長みたいですけど、その発想だとMSっぽいのが出来るような出来ないような・・・・
433 :
デフォルトの名無しさん :2008/11/16(日) 01:25:06
J#ですけど、かなりMSに侵食されましたがまあまあの出来ですよ。 ISO C++のMSプラットフォーム専用がVisual C++と同じだと考えればいいんじゃないでしょうか。 gccとちがってVC++はISO C++にdot netまで組み込んじゃってMS独自の進化をしてますけどそれと同じなんでしょう。 それと、J#は既に作ったバイトコードをどうこうするのではなくて、java言語の文法でms windows native のクラスファイル(バイトコード)を作るコンパイラなので、橋渡しの用途では全く使えません。
J#が出力するのはCILだろうが
洋物見てるとおもうんたせけどさ 白人ってあそこの毛は生えないの?
生えるよ
毛深い白人が現れた 君は鼻くそをほじっている
438 :
デフォルトの名無しさん :2008/11/16(日) 03:14:05
CIL出力して、ブリッジ用途のライブラリが作れるんですか?
439 :
デフォルトの名無しさん :2008/11/16(日) 04:36:02
いまどきJAVAなんか使ってる奴はマヌケw
.NETとJavaの相互運用はいまのところXML WebServiceを使ったものが一番まともかな。
J#はオプソ化してくれないかな。ライブラリの互換はほどほどでいいから、 JDK5以降の文法をサポートして欲しい。
J#のオプ化はありえるんじゃないかな。MSは関わらなくていいけどw ところでJSript#の方はJ#と同じくもう.Netではサポートされなくなるの?
443 :
デフォルトの名無しさん :2008/11/16(日) 09:12:30
オープンソースやSUNがどうあがいたってMS帝国には勝てません。どうもありがとうございました。
JSript#ってなに? JScript.NETなら.NET対応からこっちほとんど進化しとらんね ジェネリックすら未サポートだしなー DLR上で動くJScriptはまた別に用意するらしいが今後はそっちをメインにすんのかね
ブロンドなら剃っても目立たないからだろ
JScriptはMSがサポートする唯一の動的スクリプトだから結構期待してるんだけど。 未だにVBの方に投資してるけど、ゲイツの影に怯えてんのかな。
VB.NETすくりぷと IronPython
> 未だにVBの方に投資してるけど、 VBの主要アーキテクトがM言語に異動しただろ・・・
PowerShell
ネイティブ用のコンパイラがあればJavaとの差を鮮明にできるのになあ Windowsというものがあるわけだから
451 :
デフォルトの名無しさん :2008/11/16(日) 10:48:32
C# 、RichTextBoxでの改行の幅?高さ? を変更することはできますか? SendMessageを使えばできるのでしょうか??
452 :
デフォルトの名無しさん :2008/11/16(日) 11:02:22
447 名前: デフォルトの名無しさん [sage] 投稿日: 2008/11/16(日) 09:59:33 VB.NETすくりぷと IronPython 448 名前: デフォルトの名無しさん [sage] 投稿日: 2008/11/16(日) 10:00:55 > 未だにVBの方に投資してるけど、 VBの主要アーキテクトがM言語に異動しただろ・・・ 449 名前: デフォルトの名無しさん [sage] 投稿日: 2008/11/16(日) 10:03:39 PowerShell これらの言語はMS帝国でしか通じないような田舎言語の感じがするんだが・・・
ネイティブコンパイラって意味無くない? どっちにしてもランタイムが必要になるんだし、 JITで実行時にネイティブコンパイルされるし、 なんならngenで予めネイティブにコンパイルしとけばいいし。
っ gcj
>>454 ネイティブコンパイラなんて意味ないと俺も思うけども、
アンチは意味とかどうとか関係なくディスりたいだけ。
論理的な思考なんてしてないから。
457 :
デフォルトの名無しさん :2008/11/16(日) 13:22:11
だれがガムをかんでたって?
>>456 論理的じゃないやつとはディスりたくない
自分の言いたいこと条件反射で言うだけでディスにならない
>>459 ディスる
の意味わかってるか?
ディスカッションするの略じゃないぞ
> 論理的じゃないやつとはディスりたくない わろちw
ディスるとは - はてなキーワード ディスる - 軽蔑し、攻撃すること。 英語で反意語を意味する接頭辞「dis」、もしくは「disrespect」(軽蔑する)に由来。 ヒップホップシーンでは大小さまざまなbeef( 論争)が発生し...
リヴァイアスか
465 :
デフォルトの名無しさん :2008/11/16(日) 18:09:25
暗号モジュールの置き換えやっているのですが、PKCS5とPKCS7て、 互換があると考えてよいのですかね? 前のモジュールではパディングにPKCS5を利用していて、 C#へ置き換えしようとしたら、PaddingMode.PKCS7しかないという。。。 同じ暗号文字列作れたから大丈夫だとは思っているのですが、 埋め込みのしかたに何か違いがあるかなと。。。 なかなかその辺を記載しているページもないので、質問させてもらいました。
つ RFC2898とRFC3852 PKCS#5はブロック長64bitしか考慮してない PKCS#7では任意のブロック長に対してパディングできるように記述されてる どっちもパディングの考え方は同じ、余ったオクテットは余ったオクテット数の値で埋める
何の組織だよ
クラウザーさんディスってんのか?
そうディス!
論理的じゃないやつとはディスりたくないディス。 自分の言いたいこと条件反射で言うだけでディスにならないディス。
おまえらC#の話題でディスろうぜ
C#スレでまでわざわざJava厨乙ディス
では、IL Dis - assembler のネタを少々。 using System; class TestG { static int ft(int i, int sum) { return i == 0 ? sum : ft(i - 1, sum + i); } static void Main() { int cnt = 1001; Console.WriteLine("{0} : {1}", cnt, ft(cnt, 0)); cnt = 1000001; Console.WriteLine("{0} : {1}", cnt, ft(cnt, 0)); // ここでStackOverflow } } csc /o testg.cs でコンパイル ildasm /OUT=testg.il testg.exe ディス・アセンブル testg.il を修正 IL_0008: add tail. // 追加 IL_0009: call int32 TestG::ft(int32, int32) ilasm testg.ilでアセンブル 今度はStackOverflowが起きない。
末尾再帰って、x64版のCLRだと.tailフラグつけなくても自動でやられるって聞いた。 今日、Vista x64入れたんで、試してみようかなぁ。
俺その書き方気に入らないッス!{ } 括弧の位置がおかしいッス!{ }
>>475 うp用に行数減らしたいのでそういう書き方にしてますディッス!
新しい行にやる奴ってただ行を浪費するだけじゃん。
見やすさが違うんディス
if (dis){ }else{ dis(); }
なんディスかこのスレは!
public Form GetDis() { return this; }
/// <summary> /// C#, C♯, C#相談室では随時相談を受け付けています /// </summary> class Dis : IDispose { public void Dispose(bool) { Dis(); } }
ディスマーチが行われていると聞いて
C#ばかりもなんだし、ディスカウントショップにでも行くか。
MSべったりのリッチャーたんがK&Rスタイルでインデントしていた なんかうれしかったのでぃす
今時ハンガリアン記法とか
488 :
デフォルトの名無しさん :2008/11/16(日) 21:26:34
as is typeof の使い方を教えて下さい
489 :
デフォルトの名無しさん :2008/11/16(日) 21:36:30
おい早く教えろ C#は新しいキーワードが多いぞ
T t = obj as T; objがTにキャストできればキャストし、できなければnullが返るのディス。 bool bl = obj is T; objがTと互換性があればtrueが返るのディス。 Type type = typeOf( obj ); Type型の変数が返るのディス。
× Type type = typeOf( obj ); ○ Type type = typeof( obj ); ディス。
>>490 typeof は違うのディス。
typeof(T) の形でオペランドは型なのディス。
実行時の型がほしい場合は obj.GetType() を使うのディス。
ここでVBの解説をして混乱させるのでぃす If TypeOf オブジェクト Is 型 Then はC#のisと同じ If オブジェクト1 Is オブジェクト2 Then は == と同じ (除くOverride)
まちがえたディス。みたび訂正しようとしたら
>>492 に先越されたのディス
面白いと思ってるかもしれんが、そんなのがウケるのはヲタ体質の君みたいな奴にだけだから。 正直いって大多数の非ヲタグラマにとっては気色悪いんだけなんだよそういうの。
497 :
デフォルトの名無しさん :2008/11/16(日) 21:54:44
>objがTにキャストできればキャストし、できなければnullが返るのディス。 (T)objとどう違うんだ? >objがTと互換性があればtrueが返るのディス。 互換性とは?class継承しているかinterface実装しているということか?
ディスディス言ってる粘着気質で鬱憤の治まらない奴 リアルでは関わりたくないディスね
>>497 > (T)objとどう違うんだ?
キャストは失敗した場合例外が投げられる。
> 互換性とは?class継承しているかinterface実装しているということか?
概ねそういうこと。
参照変換、ボクシング・アンボクシングができるか。
>>497 (T)objはキャストできなければ例外を投げる。
obj is Tは(obj as T) != nullと同じ。
502 :
デフォルトの名無しさん :2008/11/16(日) 22:07:26
ありがとう
あっ、
>>503 のやつ、リリース実行だとオーバーフローしない。
505 :
451 :2008/11/17(月) 12:00:51
PARAFORMAT2をしらべてみて、 private const uint CFM_SIZE = 2147483648; //0x80000000 private const int EM_SETCHARFORMAT = 1092; [StructLayout(LayoutKind.Sequential)] private struct CHARFORMAT{ public int cbSize; public uint dwMask; public uint dwEffects; public int yHeight; public int yOffset; public int crTextColor; public byte bCharSet; public byte bPitchAndFamily; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public char[] szFaceName; public short wWeight; public short sSpacing; public int crBackColor; public int LCID; public uint dwReserved; public short sStyle; public short wKerning; public byte bUnderlineType; public byte bAnimation; public byte bRevAuthor; } [DllImport("user32", CharSet = CharSet.Auto)] private static extern int SendMessage(HandleRef hWnd, int msg,int wParam, ref CHARFORMAT lp); つづきます
506 :
451 :2008/11/17(月) 12:01:27
private void SetCharFormat() { richTextBox1.SelectAll(); CHARFORMAT fmt = new CHARFORMAT(); fmt.cbSize = Marshal.SizeOf(fmt); Debug.WriteLine(String.Format("size = {0,0:D0}",fmt.cbSize)); fmt.dwMask = CFM_SIZE; fmt.yHeight = 40; // ←これが改行幅? int ret = SendMessage(new HandleRef(richTextBox1.Handle, Handle), EM_SETCHARFORMAT, SCF_SELECTION, ref fmt); Debug.WriteLine(String.Format("ret = {0,0:D0}",ret)); richTextBox1.SelectionStart = 0; Invalidate(); という感じにやってみたのですが、うまくいきません。教えてくれませんか??
改行幅ってのはフォント固有なんじゃね yHeightって、ようするにフォントサイズだと思うけど あと関係ないと思うけどCHARFORMAT2の最後に BYTE bReserved1 ってメンバが足りてないね
ところで改行幅って行間と段落間どっち?
VisualStudio2008でExcelの共有アドインを作成したのですが、 ExcelファイルをダブルクリックしてExcelを開いたとき、 アドインがExcelに表示されません。 共有アドインのConnectクラスのOnConnectionメソッドが 呼び出されていないようです。 どうしてかわかる方いますでしょうか? ちゃんと表示される方法をご存知のかたお教えください。 ちなみにスタートメニューからExcelを開いたときはアドインは ちゃんと表示されます。
古いファイルじゃなく、新しいファイルを保存してから開いても無理?
511 :
451 :2008/11/18(火) 00:17:46
richTextBoxを配置して、フォントをMS UI Gothic, 9ptに設定して、 AppendTextでテキストをたして、AppendText(System.Environment.NewLine);で 改行しているのですが、かなり行間があくのです。 これを狭くしたいだけなんですよね・・・
ファイルを新規作成して保存して、Excelを閉じて、 先ほど作成したファイルをダブルクリックして開いた 場合でしょうか? 試せる環境が会社にしかないのでわからないです。ごめんなさい。 ファイルの新しい、古いで違いがあるのでしょうか?
PARAFORMAT2を調べろと言われて、何故CHARFORMATが出てくるのかと(ry PARAFORMAT2 用意し cbSiz dwMask(PFM_LINESPACING) bLineSpacingRule dyLineSpacing を設定し SendMessage 後はググれ
514 :
451 :2008/11/18(火) 10:39:53
構造体を以下のように定義して、 private const int MAX_TAB_STOPS = 32; [StructLayout(LayoutKind.Sequential)] public struct PARAFORMAT2 { public uint cbSize; public uint dwMask; public ushort wNumbering; public ushort wEffects; public int dxStartIndent; public int dxRightIndent; public int dxOffset; public ushort wAlignment; public short cTabCount; unsafe public fixed int rgxTabs[MAX_TAB_STOPS]; public int dySpaceBefore; public int dySpaceAfter; public int dyLineSpacing; public short sStyle; public byte bLineSpacingRule; public byte bOutlineLevel; public ushort wShadingWeight; public ushort wShadingStyle; public ushort wNumberingStart; public ushort wNumberingStyle; public ushort wNumberingTab; public ushort wBorderSpace; public ushort wBorderWidth; public ushort wBorders; } const int EM_SETPARAFORMAT = 0x0447; const uint PFM_LINESPACING = 0x00000100u;
515 :
451 :2008/11/18(火) 10:41:41
SendMessageはこれ [DllImport("user32", SetLastError = true)] static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref PARAFORMAT2 lParam); で、 PARAFORMAT2 pf = new PARAFORMAT2(); pf.cbSize = (uint)Marshal.SizeOf(typeof(PARAFORMAT2)); pf.dwMask = PFM_LINESPACING; pf.bLineSpacingRule = 4; pf.dyLineSpacing = 190; richTextBox1.SelectAll(); SendMessage(richTextBox1.Handle, EM_SETPARAFORMAT, IntPtr.Zero, ref pf); これで、行間がつまりました。 pf.dyLineSpacing を190以下にするとフォントがかけていきますが(笑 ありがとうございました。
516 :
451 :2008/11/18(火) 10:42:22
でもこれ、AppendTextするたびに設定しないといけないのかな・・・
517 :
509 :2008/11/18(火) 19:35:01
510さんへ: > ファイルを新規作成して保存して、Excelを閉じて、 > 先ほど作成したファイルをダブルクリックして開いた > 場合でしょうか? 試してみたところ、大体だめでしたが、珠にファイルの新古 に関わらずアドインが表示されることがあったので、 タイミングの問題かもしれません。
518 :
465 :2008/11/18(火) 20:02:49
string型の変数の中身をStreamにするのってできる? Schemeで言うとcall-with-input-stringみたい感じなヤツ
StringReaderならあるけど
うーんそれってSystem.IO.Streamのサブクラスじゃないよね?
あるライブラリを使いたくて、それがinput用のStreamとoutput用のStreamを要求してくるんだけど手元にはstring型のデータしかないです…みたいな状況なんだけど…
ちなみに最終的にやりたいことは
http://sourceforge.net/projects/tidynet ↑これ使って"<title>犬好き集まれ<body>だが猫のほうが好きだ<br>ですよね?</body>"みたいな文字列をキレイなXHTMLに変換してほしいとかそういう感じ
>>521 MemoryStream使えばいいんじゃない?
自分でMemoryStreamの同等物を作ってもいいと思うけど。
Encodingでstringからbyte[]に変換してMemoryStreamに渡す
>>522-523 あ、なんとなくわかったかも そーゆーのがあるんだねありがと!やってみる!
525 :
521 :2008/11/20(木) 01:11:34
文字列"0xffffff"をnew byte[]{0xff,0xff,0xff} に変換してくれるメソッドはありますか
そんな限定的なのは標準ライブラリにはない int.TryParseとかBitConverterとか エンディアンをどうするつもりか知らないけど
一発で、となるとちょっとな。 System.Convert.ToInt32とかSystem.Drawing.ColorTranslator.FromHtmlも状況によっては使うかな。
bool TryParse( string str, out byte[] bytes ) { int i; bytes = null; if( !String.IsNullOrEmpty( str ) ) { if( str.StartsWith( "0x", StringComparison.OrdinalIgnoreCase ) ) str = str.Substring( 2 ); if( Int32.TryParse( str, System.Globalization.NumberStyles.HexNumber, null, out i ) ) { i &= 0xffffff; bytes = new byte[3]; // 順番は知らん bytes[0] = (byte)( ( i >> 16 ) & 0xff ); bytes[1] = (byte)( ( i >> 8 ) & 0xff ); bytes[2] = (byte)( i & 0xff ); return true; } } return false; }
ひどいコードだな
よしではC#勉強中のVB厨の俺にまかせろ byte[] ConvHexToByteArray(string hex, bool isLittleEndian) { hex = hex.TrimStart('0'); List<byte> bytes = new List<byte>(); int readPtr = 0; int hexLen = hex.Length; if (hexLen % 2 == 1) { bytes.Add(byte.Parse(hex.Substring(readPtr, 1), NumberStyles.HexNumber)); ++readPtr; } while(readPtr < hexLen) { bytes.Add(byte.Parse(hex.Substring(readPtr, 2), NumberStyles.HexNumber)); readPtr += 2; } if (isLittleEndian) bytes.Reverse(); return bytes.ToArray(); }
先に要素数計算して配列に入れた方が効率的
効率てw 100万桁のhexを処理するとかなら話もわかるが。
毎回substringはかっこ悪いな
ならもっとスマートでクールなコードをどうぞ。
文句だけの奴が一番かっこわるい
Linqのコードみてて気になったんだけどしたのこのthisの意味って何? public static int Count<TSource>(this IEnumerable<TSource> source);
拡張メソッド
サンキュー、ぐぐったら何となく意味わかったわ クラス定義とは関係なく別のクラスメソッドを拡張できるのか邪悪だな
邪悪だが激しく便利でもある
同意 便利なメソッドなんだが、クラス本体に入れるのがためらわれるようなヘルパー的なものを拡張メソッドにしてるがこれはどうしようか悩み中
543 :
デフォルトの名無しさん :2008/11/23(日) 23:03:32
GPで2分木から3分木にする場合ってどうすればいいですか?
Grand Prix
General Protection
どれだよ。 >グランプリ (grand prix)。 >ジョージアパシフィック社 (Georgia Pacific)。アメリカ合衆国の製紙メーカー。 >ゴールドピーク(Gold Peak Group)電池メーカーなど。 >グラフィックパワー社 (Graphic Power corporation)。 >フランス海外県のグアドループの国名コードおよびccTLD。 >グラウンドプレーンアンテナ (groundplane antenna) >特色ある大学教育支援プログラム(特色GP: Good Practice)。 >現代的教育ニーズ取組支援プログラム(現代GP: Good Practice)。 >ゲネラルプローベ(Generalprobe[独])。ゲネプロ。 >ゲネラル・パウゼ (General Pause)、全休止。音楽で、全てのパートが休止すること。 >遺伝的プログラミング (genetic programming) >グリーンプリンティング (Green Printing)。印刷物の環境基準の一つ。 >汎用 (general purpose) >グループ (group) >ジープの語源と言われる。 >粗利益 (gross profit)のこと。 >ゲームポットポイント(Gamepot Point)
なぜリストにGeneric Programmingがないのだ
549 :
デフォルトの名無しさん :2008/11/24(月) 00:50:19
>>544 遺伝的プログラミングです。説明不足ですいません。
インテリセンスの日本語化マダー?
院照り扇子
また気色悪いヲタグラマが出てきた。
ヲタグラマ呼ばわりする方が気色悪いわ
この先生きのこだと改めて思た。
ふらっとと相談室一つにしようって奴まだ粘着してたのなwその粘着質は尊敬に値するよw
559 :
デフォルトの名無しさん :2008/11/24(月) 19:48:58
CのソースからC#へ変換してくれるソフトってない?
>>559 VC++で/clr付けてコンパイル→C#へ逆コンパイル
>>559 fputs( "using System;\n", fp );
:
:
563 :
デフォルトの名無しさん :2008/11/24(月) 20:45:06
なるほど逆コンパイルか
プログラム起動時にtmpフォルダ作って(中身1Mくらい)、 終了時に削除するんだけど、これ毎回やってたらゴミ箱すごいことになります。 削除する必要がなければ、やはり削除しないほうがいいでしょうか?
削除する必要がないなら削除しなくてもいいんじゃないの
削除してたらゴミ箱がすごいことにならないのでは
ゴミ箱に入れずに削除すればいいじゃんw
intと同じ構造体の別名が欲しいと思ったら、どうすればいいですかね? aliasだとうまくいかなかった。
intで我慢しろ
>>568 System.Int32 をエイリアスするのだとだめなの?
>>568 そんなことがしたい動機が理解できないけど、
implicitで暗黙的にintと相互に変換できる構造体を作るとか。
using Warosu = System.Int32;
574 :
568 :2008/11/24(月) 21:23:30
やっぱムリなのか・・・d 実装的にはintそのままで全く問題ないんだけど 意味を持った値なんで、メソッド呼び出しの引数なんかで 明示的に"ただのintじゃないよ"って示したかったんだ。 Int32のaliasだと、VSの入力支援でintって表示されてダメだった
そういうのは伝統的に仮引数で表現するんじゃね アプリケーションハンガリアンとかさ
>>574 言ってることがやはりよく分からん。
それってIntPtr的なものとも違うよね。
まあ多分根本的になにか考え違いをしてるんだろうな。
>>574 単にenumで解決するとかって落ちじゃない?
んでtypedefが欲しいと、ありがちな無いものねだりか。 C#にaliasというキーワードはちゃんとあるんだね。使いどころがめちゃくちゃニッチだ。 extern alias hogehoge;
>>574 何がしたいのかわからんがラッパーみたいなことで良いのかな。
struct Hoge { public int Foo; } とかどうよ。
そういえば::演算子とかあったな usingで定義した名前空間エイリアスを使っていることを明示するだけの超ニッチな演算子
>>580 具体的にどうぞ。
いや別に無理せんでもいいよ。
ただのintじゃない、意味を持っていることを示したいんだ、というが、
コード中のどのリテラルも変数も意味を持たないものなんてありえないだろう。
ハンドル的なものなら
>>572 みたいにするべきだね
それをIntPtr的なものと表現してるんだろう
584 :
586 :2008/11/24(月) 22:03:08
あー、色々説明下手で申し訳ないです・・・
>>575 確かにメソッドだけなら引数名で問題ないですね。
ListとかDictionary使ったら、<int>や<int, int>が溢れて
なんだかわけがわからないコードになったので。
どっちかというと、出来あがったライブラリを使う時とかよりも
開発段階で自分が混乱したり煩雑になったりしたので
今後同じような状況になった時の為の回避策はあるのかなあ、と。
>>579 最終的にはとりあえずそんなかんじでInt32の劣化コピーみたいな構造体を作りました。
ただ演算子の再定義(というか複製)を作るだけで100行近くいったので
無駄が多いかなー、と。
>>582 あ、意味のある値じゃなくて、意味のある型・・・ってことでしたすいません
IntPtrとかハンドルはよく分からないですすいません後でぐぐっときます
585 :
584 :2008/11/24(月) 22:03:38
>>584 じゃあ struct + implicit でいいんじゃね?
3連休で、C#はじめてみました。 顧客リストを永続化されたデータからメモリにロードします。 ロードされたリストは、複数の画面に共通で、Aという画面で変更されたら B,C,D...の画面でもシンクロして変わります。 私では、うーん。いい方法がおもいつかね。。。 こういったスコープの広いデータは、どのようにもつべきなんだろう。。。 Cのときは、構造体の配列をグローバルにもたせていたのだが、C#では どうしたらいいでしょうか?
Application クラスのメンバーとか、 その画面を全部一括管理してるクラスのメンバーとか。 その用途だと、Notify パターン使って値の変更を通知するとかでもいい気がするけど。
データソースとか使うからあんまりそういうレベルの話にはならないと思う
Notifyパターンって初めて聞いた Observerのことなら,変に気取らないで普通にイベント使うべき
INotifyPropertyChangedじゃないか?
皆様ありがとうございます。 Notifyってことは、Mediatorパターンかとおもうのですが、 あっていますでしょうか? 私は、本当に単にデータをメモリに読み込み、そこを簡単なコードで 登録、閲覧、変更、削除をしたいだけなんです。 Cなら create(a,b,c..), select(...), update(), delete() みたいにストレートで書いていけてたんですが、C#だと588さんの いわれてるように、画面一括管理するManagerクラスをつくって それのメンバーにList<>をもたせて、それを子画面作成の度に コンストラクタで渡す、のような方法が普通なのかな?
データを管理するクラスを作って,そのインスタンスを各画面に渡せばいいんじゃね List<>を渡すのはさすがにお粗末
むしろマネージャーに各画面を渡して登録する
データを保持するクラスAをつくってそのオブジェクトへの参照を 各画面にわたし、各画面では、その参照をいじるということですか? やりたいことの簡単さから離れて、えらくたいそうなことをしている ように感じるのですが。。。最初だけなのかなぁ
いやいや Listを直接渡しちゃったら変更の通知とかどうすんの 特別なクラスにしてれば,必要に応じて検索のためのメソッドを追加したりすることもできるでしょ
なるほど。 Cでの貧乏くささよりも、富豪的発想で、自由度、可変性をひたすら追求 すると。。。そういう視点で作ってみます。
598 :
デフォルトの名無しさん :2008/11/24(月) 22:52:49
なんだコイツ
シングルトンでも使ってろ
>>597 ポインタ本の人の言じゃないけど、データクラスを作るというC#っぽい今時の設計でも、
マルチプルインスタンスへの対応が容易ということ以外に違いはあまりないと思うけど。
ただハンドルを引数に取るselect()とかupdate()とかいう「関数」が
ハンドルの代わりにインスタンスで対象を指定する「インスタンスメソッド」に
変わるだけじゃん。
>>599 そういう目的のシングルトンはグローバル変数と呼ぶ
そういう意味で皮肉で書いたのだが
猛解決してるかもしれんけど、
>>584 はC++でいう
#define int HOGE
みたいなことがしたいんじゃね
>>600 ハンドルはハンドルでしかないけど
インスタンスには型情報その他があるじゃんかよぉ
605 :
デフォルトの名無しさん :2008/11/26(水) 11:55:17
FxCop等でDisposeメソッド内でGC.SuppressFinalize( this )を呼ぶよう警告がでるんですが、 そもそもファイナライザを実装していないクラスならば、 IDisposableを継承していてもSuppressFinalizeする必要はないですよね? それとも呼ぶことで何かGCコストが下がったりするんでしょうか?
必要ないね ところでIDisposableを継承って違和感 インターフェイスに対してはIDisposableを実装って言わない? InheritsとImplements
あれ?ファイナライザなくても警告って出たっけ?
608 :
デフォルトの名無しさん :2008/11/26(水) 14:34:32
DOMパーサの代わりにSAXパーサを使えばおk。 ただSAXは使いにくいので、LINQ to XMLあたりを試してみるといいかも。 (あれは確かSAXの上にDOM風のインタフェースを構築してたはず)
するようですってなんで伝聞形なんだ 例外メッセージぐらい書いてくれ データ件数が少なければ問題ないのか
611 :
デフォルトの名無しさん :2008/11/26(水) 14:41:17
>>608 追記です。
XMLから読み込んだデータは、List<Hoge>として受け取って、
すべて読み込んだ(変数に格納した)あとに、
その変数をforeachで回して DataGridViewに表示させています。
foreach (Product product in products)
{
int index = dgv.Rows.Add();
dgv[0, index].Value = product.Code;
dgv[1, index].Value = product.Name;
:
:
全部で9データ(カラム)
}
612 :
デフォルトの名無しさん :2008/11/26(水) 14:45:31
>>609 SAX??既にXMLとしてデータがあるのですが大丈夫でしょうか?
>>610 System.InvalidOperationException
{"XML ドキュメント (4462,19) でエラーが発生しました。"}
{"EntityName を解析中にエラーが発生しました。 行 4462、位置 19 です。"}
こんな感じのエラーです。
データを20件ぐらいで読み込むとエラーが出なかったので、
データ量の問題だと思いました。
エラーが出るのは何件なの? 何件までは大丈夫で何件以上は必ず落ちる、ってとこまで検証しないと データ量と言い切ってしまうのはよくない。 まあ量の問題なのかもしれんけど
多分該当個所がXMLとして変なことになってる XMLの4462行をじっくり確認
615 :
デフォルトの名無しさん :2008/11/26(水) 14:55:36
あ、データ件数の問題じゃないかもしれない!
>>612 のエラーをもとに、
4462行を含んだデータの1つ前までを読み込むと成功、
4462行を含んだデータを含ませるとエラー、
4462行を含んだデータの次のデータを含ませると成功、、、
やはりこの行に問題があるみたいです。
エラーってちゃんと見るもんですね。。
もう1度検証してみます!ありがとうございました。
616 :
デフォルトの名無しさん :2008/11/26(水) 14:57:13
4462行に半角の&があるんですが、これが原因のようです。 なんで&はだめなんだろう。。
特殊文字をエスケープしてないのかいな
すいません。。お恥ずかしい、、、 &とかでおkですか?
620 :
デフォルトの名無しさん :2008/11/26(水) 15:11:40
みなさんありがとうございました。 おかげでなんとかなりそうです。
XmlSerializerはXmlReader/Writerを直接使ったコードを自動生成するから 下手に自分で書くより速かったりする
VS2005&C#でwin2000用(framework2.0)のアプリケーションを開発しようとしています。 で、クエリビルダを組み込みたいのですが、どうすればいいでしょうか?
部下に指示
>> エラーってちゃんと見るもんですね。。 うどんふいたわ
new XmlDocument().LoadXml("<test hoge=\"fuga\" hoge=\"hogera\"></test>") みたいなことすると hogeが2つとかあるんですけど… って怒られるんだけどこれってなんとかならない? 最悪Regex.Replace(xml, "hoge=\"[^\"]*\", "")みたいな感じにすればナカッタコトにできるんだけどなるべく元の情報落としたくないのです また、元の情報はWeb上から拾ってくるのでValidなデータを最初っから準備できないのも泣き所 hoge="fuga; hogera"だったかのようにして処理してくれたりとかってできないかな…?
ご質問させてください。 VS.NET2005、SQLServer2005、の環境で .NET上からストアドで一時テーブルを作ると、 そのストアド内でしか一時テーブルが使えません。 cmd.Transaction = tran; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = "sp_CreateTmpTable";←[CREATE TABLE #hoge(name varchar(10))] cmd.ExecuteNonQuery(); cmd.CommandText = "sp_InsTmpTable";←[INSERT INTO #hoge (name) value ('ほげたほげお')] cmd.ExecuteNonQuery();←ここで、オブジェクト名'#hoge'は無効ですと言われる なお、ストアドではなく直接SQLを実行したら一時テーブルは使えました。 クエリアナライザで直接実行して、SQLのエラーでない事も確認しております。 年のため#hogeを##hoheにしてもだめだったのですが、 .NET上からストアドを実行するのに何か必要な事があるのでしょうか?
>>626 そのドキュメントはそもそもXMLじゃないんだからどうしようもない
>>626 XmlReaderなら読めない?
もしかしたらXLINQでもいけるかも
ちらしの裏なんだけど public static T CloneEx<T>(this T t) where T : ICloneable {return (T)t.Clone();} とかやってみたらさんざんだったICloneable の使い勝手が随分良くなったと思った。
たかがキャスト一個のために余計な依存増やすのか
>>628 そーなんだけどXPathとか超便利じゃん…
>>629 ドキュメントさらっとみた感じ希望ありそうかも!ありがと
明日早いからすぐには試せないけどやってみるよ!
VS2008 C#でWebサイトでXMLドキュメントを生成したいのですが Webアプリケーションで作った場合にはビルドの項目にあるのですが Webサイドの場合項目がみあたりません。 作り方をご存知の方はいらっしゃいますでしょうか?
ぐあああ NMHDR構造体のidFromがUINT_PTRになってるううううぅ 2005付属のMSDNだとUINTなのにぃぃぃぃぃ 64bitだとC#のコードがうごかなかったのはこれかああああをぁぁぁ / ̄ ̄\ / _ノ \ | ( ●)(●) . | (__人__) .netにも最新のヘッダファイルを使える仕組みが必要だろ…… | ` ⌒´ノ 常識的に考えて… . | } . ヽ } ヽ ノ \ / く \ \ | \ \ \ | |ヽ、二⌒)、 \
AAコピペ君って精神分析の対象だな、まで読んだ。
>.netにも最新のヘッダファイルを使える仕組みが必要だろ…… 常識的に考えて… っ C++/CLI
ヘッダを読んでinteropなコードを吐いてくれるツールを使う
NMHDRの定義が死ぬと その他のNM系の構造体とかWM_NOTIFYで使う構造体が軒並みずれてくからなw
639 :
デフォルトの名無しさん :2008/11/27(木) 23:00:02
ピクチャボックスを丸型に出来るか? バックカラープロパティがある丸型のコントロールはあるか?
むしろ北京語でもOK。 まあこんな感じのことがしたいのかな? private void SetElipseRegion(Control c) { GraphicsPath path = new GraphicsPath(); path.StartFigure(); Rectangle rect = c.Bounds; rect.Offset(-c.Left, -c.Top); path.AddArc(rect, 0, 360); path.CloseFigure(); Region r = new Region(path); c.Region = r; }
描画箱能円形口馬? 背景色的属性用没用円形的操作?
本当で北京語で書かれたって読めるわけないだろw
不好意思
こういうのやりたいんですがどうすればできますか? 1.プログラム1(pro1.exe)からプログラム2(pro2.exe)を呼ぶ 2.pro2.exeの終了コードによってpro1.exeの動きを変える pro1.exeからpro2.exeを呼ぶ方法と、 pro2.exeの終了コードの受け取り方がわかりません
System.Diagnostics.Process.Start
これは恥ずかしい…
652 :
デフォルトの名無しさん :2008/11/28(金) 18:24:40
ホームページビルダーのVer13から、プラグイン昨日がついて VC++で作るんだけど、C#も対応して欲しいな。 そもそも、ホームページビルダー使うような人たちの多数はVC++のネイティブビルドなんて つかえないだろ(´・ω・`) せめて、Pythonとかのスクリプトで対応してほしいな。
VC++使うような人はホームページビルダー使わないだろうしな・・・
ホームページビルダーってまだあったのか…。 ところで、ネイティブアプリから .NET のアセンブリって呼べるん?
逆PInvoke
C#でRaw Socketを使わずにIPヘッダを取得する方法はありますか? (具体的にはIPヘッダのTTL値を取得したいです。)
テストしてないけどGetSocketOption&IpTimeToLiveでとれないか
>>659 それだと受信パケットのTTLが取れないんです。
やはり普通にRaw Socketでやってみます。
661 :
デフォルトの名無しさん :2008/11/30(日) 23:28:30
>>641 フォームがデジモみたいになっちゃいました!
あとは自分で勉強してみます!どうもです!
662 :
デフォルトの名無しさん :2008/12/01(月) 09:58:54
PInvokeで使うwin32のPOINT構造体とSystem.Drawing.Point構造体って 互換性ありますよね? そのまま突っ込んじゃっていいですか?
別に構わないよ RECTの方は別モンだけど
通常の文字列のメタ文字をエスケープして正規表現として使えるように したいのですが、Regex.Escape()はそういう用途には使えないようです。 ほかに方法はないでしょうか?
>>664 何か誤解している感じがする。具体例を挙げてみて。
666 :
デフォルトの名無しさん :2008/12/01(月) 19:51:25
C#のスレッドとネットワークの本をだれか寄付してくれ。おいら金がない。
金がない奴ぁおれんとこ来い おれもないけど心配するな
青島乙
室井乙
和久さんに敬礼
671 :
デフォルトの名無しさん :2008/12/02(火) 00:20:44
639です。C#初めて一か月くらい経ちますが、何となくGUIプログラムについて知ったつもりになりました。あるやりとりでGUIで電卓を作れ、に対して関数電卓までいきませんがそれなりに作ったつもりです。 まだ修行の身ですがこの先どのような展開があるのでしょうか?個人的にマウス操作でのI/Oにレスポンスがある事に衝撃を受けてますが、今後USB等外部装置とのやりとりまで発展していけるのでしょうか? 大学でC言語ちょっと勉強したくらいの小心者です。
そうか 勇気出してもっと堂々とするんだ
そんな雑誌の身の上相談みたいな質問されても ほとんどの人は回答に困るんじゃないかと思うんだけど・・・ ソープ池みたいなのりで突っ込んで欲しいんだろうかw
自分で作ってみたいものを作る。パクリでもいい。興味を伸ばす。
>>671 この先か・・・。仕事でやるなら、DB 系かネット系か、機器系じゃないかな。
いろいろプログラムを作ってみるといいと思うよ。
676 :
デフォルトの名無しさん :2008/12/02(火) 00:35:26
獄中から出所した、コムロの気持ちが分かりました。 これからガンガリます!
いや、つまんないから
いや、こいつはひょっとするとひょっとするかもしれんぞ
しねーよw
マジコムロ臭い
KOMUROって誰よ?
KOMUROといえばHITOSHIにきまってる
オッサンハケーン
Rectangleなプロパテーなんですが。 中身のをX++;とかしても反映されないんです。 どうすればいいですか?
作り直せ
なぜそうなるのか理解してないようだから作り直しても同じだろう
プロパテーってなんか食欲をそそるな
>>684 Rectangle rct = hage.RectPropate;
rct.X++;
hoge.RectPropate = rct;
値型だからね
hage.RectPropateで取得した時点でコピーされてhageが持ってる構造体とは
関係なくなってるのね
>>688 Propateが地味にかっこよくてワロスwwww
>>684 FormにもXとかYのプロパテーがあるだろ。
C++ならハンドル返すのプロパティ作れるぞ。
C#っぽく書くならこんなイメージ public ref RectPropate { get { return ref this.rectPropateField; } } フィールドへの参照を返せる もちろんこんなことするとプロパテーの意味がなくなる
え? ポインタを返すってこと?
ただのポインタとはちょっと違うよ GCで行方不明になったりしない「トラッキング参照」ってやつ
実行中のワーカースレッドが全部終了するまで待機するときの簡単な書き方ないですか? ThreadPool.QueueUserWorkItem()を使うとWaitHandleを返してくれないから、 自分でManualResetEventを用意しないといけなくてめんどくさい
しょうゆこと
>>693 戻値にrefは使えない。使えるのは引数だけだ。
>>698 だから「っぽく」って書いてあるんだろうに。
C++のはなしか、了解
どうでもいいがC++じゃなくてC++/CLIな
public: System::Rectangle^ RectPropate;
const ref とか constメソッドがないことに非常にショックを受けた
要らないから
C++だって、fstreamやstringsreamにはほとんどconst使わなかっただろ。 それと同じさ。
const char*みたいに欲しいけどなー
>>703 それは
>>693 とは違うよ
値型に^付けるとボックス化された値型になる
C#と違って型付けされてるけど,値型のオブジェクトをobject型にキャストするのと同じ
>>693 に対応するのはRectangle%
流れを切って申し訳ないですが皆さんはどんな難読化ツールを利用されていますか? フリーで難読化ツールというとNandokuが有名だと思うのですが文字列や外部参照などを隠すことができませんし Dotfuscatorの製品版はすばらしい性能ですがとても手が届く値段じゃないですし…。 海外製などで良い難読化ツールはないものでしょうか、ご教授ください。
使用してません 何故そんなに隠したいのかが分からない はっきり申し上げてあなたのプログラムに興味ある人なんていないのです
Dotfuscator使ってる
難読化ツールってなんなの? 逆コンパイルできないようにするとかか? そんなもん突破しようとする奴は強引に突破するんじゃねえの?
715 :
デフォルトの名無しさん :2008/12/04(木) 04:54:49
最大の対策は魅力の無いプログラムを作ること。
難読化ツールは、パクリコード流用だとか色々と隠さなくてはならない事情を持った恥ずかしい プログラムしか書けない人向けのツール。 普通は堂々としていればいい。
自分のコードが恥ずかしいから難読化してる
例えば体験版のような、日付やパスで認証するようなロジックがあると、最低でも難読化しないと使えないのだわ
うちは客に渡すコードの特にコアのライブラリのとこは難読化していきますが( ゚Д゚)ナニカ?。
そのコード渡された客が可哀想www
パスの部分を他言語で作ればいいのでは
難読化してなるべく解析に手間取って欲しくなる必要がないようなプライドのないコードばかりを量産しているコーダ-二集まるスレはここですか。
1ライセンスくらいDotfuscatorついてるグレードのVS買えよ。
Dotfuscatorってなんて読むの? どっとふぁすけいたー? どっとふゅーずけいたー?
数独化してますが何か?
認証系とか見られては困るコード部分だけネイティブのDLLにするとか?
そんなけちっちゃいDLLなら逆アセンブラで読むのも大した苦労じゃないだろうな
認証系のキーや生データは普通はソースになんて書かないでDBに持つだろ。
難読化+Emit/Expression Treeで動的に作ると、追いかけるの困難だよ! 無駄に手間が掛かり保守性も悪いけど
コア部分は高速化も兼ねてCで書いたりするからいい
コアな所がフレームワークで全体に関わってることもあるんですよ
>>725 どっとふぁすけいたーでないか?本当に正しいかどうかはわからんけど、
俺はそう読んでるw
俺のコアな部分を低速化したい。
Path.GetFileNameでファイル名だけ取り出せるのに、 Path.GetDirectoryNameでフォルダ名だけ取り出せないのって言語仕様的におかしくね?
(儲)
.net frameworkとC#の言語仕様を分けて考えようネ
.NETライブラリに限らず C:\foo\bar\baz.txt において dirname って言えば C:\foo\bar を指すことが一般的じゃない? でも bar だけ返して欲しいのもわからなくはない
C:\foo\bar\baz.txtのbarだけ欲しいケースが少ないからじゃないか
両方あるもんだと思ってた。 フルパスとbarだけの方
c:\foo.txt だと何返るんすかそれ
""
>>735 おかくしない。というかどちらでもいい。
便利さで言えば
Path.GetFileName(Path.GetDirectoryName(path))
みたいに一個ずつ消しながら全部取れる方が便利。
むしろGetFileNameという命名の方がおかしい。
内部的にはファイルとフォルダの区別が無かった気がする。 デスクトップ以下のアイテムIDリストとかそういうの。
>>744 同意
でも全部欲しいときはSplitか正規表現使うから現状で不便ではないな
747 :
デフォルトの名無しさん :2008/12/04(木) 20:34:06
MacでいうところのCoreDataとかCocoaBindingとかに相当する機能はありますか?
Mac使ったことないから全然わかんないや
>>713 ありがとうございます。
パッカーを難読に利用するなんて思いつかなかったです。
ただ、使用してみたところURLを扱うメソッドで
「パスの形式が無効」という例外を吐いて落ちてしまいます。
URLを文字列として直接打っているのが原因なのかなとも思うのですが
オプション設定も見てみたのですがわかりませんでした
重ね重ね申し訳ありませんがご教授いただけないでしょうか
>>747 永続化という意味ではEntityFrameWork。
Bindingでは依存プロパティとかかな。
Cocoaとちがって、基本オブジェクトの属性ではないが。
>>749 自己解決しました。
URLとか文字列なんて全く関係なくReflectionを呼んでいたからでした。
ご指導頂きありがとうございました。
#endregionの後ろにも説明を書けるの? コンパイルしてもエラーとか出ないしMSDN見たけど触れられてなかった #region 説明1 ・ ・ ・ #endregion 説明2
OH!! そっちか Thanks!!
755 :
デフォルトの名無しさん :2008/12/06(土) 22:30:28
GlobalAlloc, GlobalLockで取得したメモリポインタに Marshal.StructureToPtr( Object structure, IntPtr ptr, bool fDeleteOld ) で構造体をコピーしました。 第3引数のfDeleteOld にtrue渡していても、アセンブリにngenをかけていない場合は アプリケーションは正常動作しているように見えましたが、 ngenかけるとこの場所で落ちるようになりました。 これってどういうことですか偉い人? とりあえずfDeleteOld にtrueを設定するとどこかのメモリを破壊することはナントナク理解しました。 >このメソッドの実行前に、ptr パラメータに対して Marshal.DestroyStructure メソッドを呼び出す場合は true ↑こいつがなんかやばいやつを解放しちゃった? しかしネイティブイメージの有無で結果が変わるというのが分かりません
A社のトイレットペーパーは半径12mmの芯に巻かれ、 トイレットペーパーの最も外側の半径が53mmである。 トイレットペーパーの紙厚が0.1mmのときに、この トイレットペーパーの長さはおおよそ何mであるかを求めるプログラムを書け。 ただし、長さはm単位で小数第2位まで表示するものとする。 これをvisualstudioで作りたいのですがイマイチわかりません。 どなたか教えていただけないでしょうか?
宿題スレ逝け
>>756 それはVisual Studioの使い方が分からないのか
それともコードの書き方が分からないのか、はたまたロジックが思いつかないのか
あともし課題なら宿題スレにいけばいい。
宿題スレに行きます。 スレ違いで本当にすみません。
C++だったのかよwwwwwww
83594.64? なんか妙に長いトイレットペーパーだな。
ミリじゃないか?
ああ小数点第二ってm単位でか。 じゃあ83.59m
なんかネタで意地悪してるのかもしれんけどC++宿題スレのコードもアレだなw
C#からExcelを操作する処理を頻繁に行うアプリケーションを今作ってるんだけども、 try〜finallyの入れ子やらの記述がすんごい面倒なんだねこれ 自作でクラス作って少しは本体側のごちゃごちゃ感を軽減したんだけどもまだイマイチな感じ だれか似たようなことやろうとした人いたら経験談とか教えてください
>>766 Marshal.ReleaseComObjectのことかな。まじめに漏れなく書くとめんどいね。
正常系はちゃんと書くが異常時の開放はあきらめてGCまかせにしてる。
俺はメジャーなオブジェクト(Application, Workbook, Worksheet)以外 ReleaseComObjectなんて呼ばないけど、何も問題に遭遇してないけどな。
4.0になれば楽になりますよ
dynamic はこれと関係ないだろ
http://code.msdn.microsoft.com/csharpfuture このNew features in C# 4.0読むとdynamic lookupの他にも
COMのための機能拡張があるみたいだけどReleaseComObjectについては触れられてないな
でも一切リソースを気にせずにExcelやWordを操作してるサンプルコードが付いてる
どういうことなんだろうね
refだらけになるのを避けるためにrefパラメータに対する値渡しを許すとか
細かい使い勝手に気を配ってるくらいだから,さすがに一番の問題を放置するわけはないと思う
言語とは関係なく,CLR側で対処するのかな
try〜finallyの入れ子にしないで、 使うCOMオブジェクトは全部nullで宣言〜 一番外のfinallyでnullじゃなかったらReleaseComObjectってやってるな IDisposableなジェネリック再ラッパーとか作ったりしてみたけど それでも結局usingの嵐になったりするんだよね
773 :
766 :2008/12/07(日) 16:08:01
レスありがとうございます。
丁寧に真面目に記述していくとごちゃっとするのはある程度仕方ないところもあるのね。
>>772 の全部null宣言する形を取るのが一番すっきりしてそう、かなあ。
>>771 のURLの内容読もうと思ったがすぐに挫折してしまったw
違うインターフェイスにキャストした場合、内部でQueryInterfaceして参照数増えてんの?
最後にまとめてやるならFinalReleaseComObjectだったかにした方がいいかも。
>>775 ReleaseComObjectやFinalReleaseComObjectが減らしている参照カウンタは
COMの参照カウンタそのものではなくて、RCWの参照カウンタ。
FinalReleaseComObjectを呼んだほうが安全というのは都市伝説に近い。
自分でCOMのサーバー側作って検証すればいいな じゃまくさいからお前らやって
778 :
デフォルトの名無しさん :2008/12/07(日) 18:19:23
C#の初心者です。 現在、独習C#を使っていますが、 次のステップには、どのような参考書を使えばよいでしょうか? どなたか、ご教授いただければ幸いです。
独習C#終えたら言語の勉強は終わり あとは使う
>>772 Excelではないが、IShellFolder関連の
ReleaseComObjectが不要なラッパーを作ったことがある。
usingの嵐にならないようにしたら、
第二のガベージコレクタみたいになってしまったよ。
とりあえず作りたい物を決めて、作り始めちゃうのがいいよ。 先に理解しようなんて思わなくていい。知らないこといっぱいおっぱい。 何かをしようとする毎につまづくから、そしたらまた調べまくる。 デザイナが作ったコードもサンプルとして良い。
>>776 最後に開放する場合でも?
COMの参照カウンタ減らすためにはまずRCWの開放が必要で
そのためにはRCWの参照カウンタを減らす必要があって、
とかそういう構造ではないのかな?
場合によってはReleaseComObjectを複数回呼ばなきゃならないことになって、
簡単のためにFinalReleaseComObjectを呼ぶってのは駄目?
まあ俺は良く分かってないから根本的に勘違いしてるかもしれんが。
RCWの参照カウントが2以上になるケースを見たことがないな。 例えば、ComHoge ch1 = new ComHoge(); ComHoge ch2 = new ComHoge(); とした場合の RCWはch1とch2で別になりカウントは両方1のまま。 また、ComHoge ch3 = ch1 で単に参照を代入しただけの場合も変わらない。
MarshalのCOM系メソッド使えば増やし放題だよー
785 :
デフォルトの名無しさん :2008/12/08(月) 03:26:53
あるドライブの中にある、txtファイルの一覧を取得したいのですが、 うまくいきません。 DirectoryInfo di = new DirectoryInfo(s調査Path); foreach (FileInfo fi in di.GetFiles("*.txt", SearchOption.AllDirectories)) {〜〜} 結果はこんなエラーです。 'System.UnauthorizedAccessException' の初回例外が mscorlib.dll で発生しました。 "パス 'X:\\System Volume Information' へのアクセスが拒否されました。" これってサブディレクトリ検索するためにSearchOption.AllDirectories指定すると出てしまうのですが、 どうすればよいでしょうか? アクセス権ないのが当たり前のフォルダなので、回避する方法があるような気がしたのですが 見つけられませんでした。 VBのOn Error Resume Nextみたいなのがあって、それを使うのでしょうか?
vbしらないけどtry catchのことかな foreach(){ try{ .../}catch(UnauthorizedAccessException){} }
順々にしらべないとおんなじ結果になる気がするけど
.netのOLEまわりって腐ってない? クリップボードやドラッグ&ドロップですぐリークするんで 結局API直呼びすることになる
>>790 うわーありがとー
スレタイみてネタスレかと思って中身チェックしてなかったわ…
いってくるー
ひょっとして==のオーバーロードが定義されてるクラスで参照の等値検査しようと思ったら objectにキャストするしかない? VBのIsみたいな演算子ってC#にはないんだっけ?
Object.ReferenceEquals
いや、そりゃそうなんだけど。。
795 :
785 :2008/12/09(火) 00:38:57
>>786 VBのOn Error Goto Resume Nextは
C#のtry catchとはまた別です。
On Error Goto Resume Nextはcatchに飛ばず、
そのまま処理を続行できますので。
ちなみにtry catchはやはりVBでもTry Catchです。
すみません。
>>787 こういう処理は基本ループでフォルダを下っていくものと私も思っていたのですが、
それを簡略化するために「SearchOption.AllDirectories」が指定できるようになった、
という風にヘルプを解釈したわけです。
でもやはりできなくて質問に至りました。
try-catch-finally で表現できるように書き直すのが無難。 On Error Goto Resume Next なんて VB でも使わない方が良い。 デバッグしづらいバグを生み出す原因になってしまう。
797 :
785 :2008/12/09(火) 00:50:39
>>796 基本的にはそうだと思います。
私もダラダラ書いて要点絞れてないので書き直させてください。
1.C#にVBのOn Error Gotoに相当するものはあるか
(今回はループに回る前にエラー投げるのでそもそも使えませんが)
2.これが↓
DirectoryInfo di = new DirectoryInfo(s調査Path);
foreach (FileInfo fi in di.GetFiles("*.txt", SearchOption.AllDirectories))
このエラーを返すのは
'System.UnauthorizedAccessException' の初回例外が mscorlib.dll で発生しました。
"パス 'X:\\System Volume Information' へのアクセスが拒否されました。"
使い方が間違ってますか?
というのが疑問です。
>>797 たとえOn Error Resume Nextが出来たとしても、何も値は戻ってこないはずじゃなかったっけ。
別のメソッド内でエラーが起こったら、途中でも強制的に戻ってくる感じで。
(実際にテストしてないから間違ってたらスマソ。)
希望している処理をしたいのなら、再帰させてディレクトリ毎に例外処理しながらやれば良いと思う。
799 :
785 :2008/12/09(火) 01:37:17
>>798 1.について
>たとえOn Error Resume Nextが出来たとしても、何も値は戻ってこないはずじゃなかったっけ
いえ、そうでもないです。
Dim i As Integer = 0
On Error Resume Next
i /= 0
Console.WriteLine("ErrorNumber:" & Err.Number)
Console.WriteLine("Description:" & Err.Description)
--------------------------
2.について
>希望している処理をしたいのなら、再帰させてディレクトリ毎に例外処理しながらやれば良いと思う。
もちろんこれでも可能です。
が、今回質問させていただいてますのは
GetFiles("*.txt", SearchOption.AllDirectories)が使えない理由です。
再帰してくれるようなメソッドが既にあるようなら使いたいのですが
意図したように動かないので悩んでます。
DirectoryInfo..::.Delete(true)が使えない理由です。 再帰してくれるようなメソッドが既にあるようなら使いたいのですが 意図したように動かないので悩んでます。 これとおんなじ
1.
C# にはそのような機能はない。try-catch-finally でなんとかする。
http://msdn.microsoft.com/ja-jp/library/cc392473.aspx > On Error Resume Next ステートメントは、別のプロシージャが呼び出されると非アクティブとなるため、
よって、DirectoryInfo.GetFiles(...) を用いるなら VB でも不可能。
2.
.NET Framework のライブラリには、そのような(アクセス権限による検索のスキップ)機能を持ったメソッドはない。
グダグダ言ってるヒマがあったらコードを書けばいい。
ちなみに 1. のリンク先は VBA に関してだけど、.NET になっても同じだと思う。 呼び出し先のメソッドでも Resume Next されたらそれこそカオスな状況になるwww
パーミッション無いディレクトリにアクセスしようとしておいて、使えないも何もって感じだな
スキップするオプションあってもいいと思うけどな。 全部読むオプションあるんなら。 でないと全部読むオプションの意味ないだろ?って話でしょ?
コレクションを返す今の仕様だとスキップしたかどうか何をスキップしたかを判別できない からそう言うオプションを用意してないんじゃないかな
807 :
デフォルトの名無しさん :2008/12/09(火) 12:12:47
無いなら自分で作ればいいじゃない そのためのプログラミング言語だろ
ないから作れないなんて誰が言ってんだ?
ProcessStartInfo psi = new ProcessStartInfo("
http://www.yahoo.co.jp/ ");
psi.UseShellExecute = true;
psi.ErrorDialog = true;
Process.Start(psi);
この4行で Kaspersky が「コード侵入」と「他のプロセスを一時停止」の2つの警告を出してくるんですが
回避方法は何かありませんか?
ソビエト代表カスペルスカヤ選手にご退場願う
811 :
デフォルトの名無しさん :2008/12/09(火) 16:50:26
>>804 | ____ ヽ lニ|ニl | __Lヽ
─|─ / _  ̄ ̄ ̄ /|ヽ| _ レ
| _∠ _. 、--|-、 ──, | |ニニ| | | 口 ヘ,
. ノ|\|_| | ソ /\/ |. / . | |ニニ| | ノ
| 、ノ 'ヽ ヽノ ノ ヽ_ ./\/ ヽ | /\ヽノヽ
| ────  ̄ ̄ ̄
813 :
785 :2008/12/09(火) 17:48:30
>>801 >>802 >>805-808 なるほど、無い、というのが結論のようですね。
サブディレクトリまで検索してくれるようになったのはよいですが
簡易的なものであり、各フォルダに対してアクセス権含め、なんらかの検査が必要な場合は
自分で再帰していかなくてはならないみたいですね。
System Volume Informationなんてアクセスできなくて当然のフォルダなので
回避方法がきっとあるんだろうと思ってましたが甘かったみたいです。
ありがとうございました。
ないから作れないなんて誰も言ってないから だから作れって話になるわけさ
こういう処理って問題ないんでしたっけ? if( data == null || data.num == 0) {
|| 演算子 (C# リファレンス) を見れ
順不同という記憶があったんだがあれは | 演算子のときか。 さんくす
ショートカット演算だろ
それを言うならショートサーキット
短絡演算子?
>>817 C#は順序は左から(代入演算除く)って決まってる。
| と || の違いは順序じゃなくて、右が必ずしも実行されないってところだけ。
つまり data = null の場合は、右側の式は評価されない。
823 :
815 :2008/12/11(木) 00:11:15
いつまでもくどいぞ。カスども
if(
>>824 == カス || チョメチョメ() )
{
ごにょごにょ();
}
orz
825 :
815 :2008/12/11(木) 08:46:49
826 :
デフォルトの名無しさん :2008/12/11(木) 11:34:44
自分はUNIX(主にLinux)でC++を使っているのですが、ある人からWindowsでC#を使えるようになれといわれたのですが、 自分的にはWindowsでやるならVC++でもいいんじゃないかと思っているのですが、C#がVC++よりも勝っている点を教えてください。 よろしくお願いします。
勝っている点が無いって言ったらどうするつもりなの?
IDEが秀逸
>>826 えーっと、それは業務アプリなどを手がける会社の仕事での話ですか?
それでしたらC#でしょう。
趣味プログラマならC++にも「やろうと思えば何でもできちゃう」という
Cと同じような捨てがたいメリットがあると思いますが。
生産性に決まってんだろ
831 :
デフォルトの名無しさん :2008/12/11(木) 12:12:52
ありがとうございます。
>>827 829さんが言われているとおり、自分は業務系ソフト開発をしないといけない立場なのですが、
もし本当にC#でもVC++でも同じなら、VC++を選びたいのです。C#を使えといっている人は、
XMLの処理とか文字列の扱いとかが楽と言ってて、C++でXMLやるのは面倒なのは分かるとしても、
文字列くらいなら慣れてるC++でやってしまってもいいかな、、、と思ってます。
自分の周りでWindowsで開発している人がC#でやってる人ばかりなので、C#いいよという
人しか居ないので、勝っている点しか知りません。でも色々意見を聞いてみると、
「これはC#を使うしかない!」というのがないような気がするのですが、、、、
>>828 IDEはVisual Studioなので、同じではないのですか?
>>829 仕事の話です。
業務アプリならC#だ、というのは何度か言われたのですが、やっぱり開発
が速い(楽?)ですか?
道具は目的に合わせて使い分けろってことさね。
職場で自分だけ違うことしたいって言ってる様が思い浮かんだ
>>831 C++に比べてC#は、簡素なコードで複雑な処理を安全にできる
安全にってのは大事だぜ
俺の場合、あえてC++使う場面と言えば
ウィンドウなんて表示しないし処理速度を重視したいって言う時くらいかなぁ
835 :
デフォルトの名無しさん :2008/12/11(木) 12:26:27
>>833 実はそうです。
でも今まで説得力のあったのは、C#の方が文字列の扱いが楽、というのだけだったんですよ?
保守性無視のスタンドプレー
837 :
829 :2008/12/11(木) 12:33:56
>>831 UNIX/Linuxなどのミドルウェア製品の開発を除けば、もうC/C++の選択は有り得ないといって間違いない。
とにかく、.NET上でC#による開発はクライアントから分散系までJava & C/C++にも勝り、圧倒的にムダが
無くて生産性が上がる。高度な技術を楽に使えるようにMSが提供してくれるから仕事屋の強い味方だよ!
おかげで「プログラムを考えながら自分で好きなように操れる感覚が好き」というヲタには不人気だがw
仕事なんだろ? みんな使ってる<最大の理由
>>831 C#の方が開発が圧倒的に楽です。
業務用アプリ開発において工数の短縮という要素が最大のメリットであることはわかるでしょ?
コーティング、テスト、デバッグが非常に楽
VB使おうがC#使おうが変わらないわけだし、.NETにメリット感じるかどうかだと 3.0になってからはかなり関数言語的なプログラミングできるようになったのでC++で組む時にも応用利くと思うよ
C/C++で食ってきた奴からするとVB.NETの冗長的なコーディングは苦痛になると思うが
842 :
デフォルトの名無しさん :2008/12/11(木) 12:56:22
なるほど、、、 色々とありがとうございます。2chでここまで言われるとは、、、 一応処理速度重視の3D画像系のアプリなのですが、とりあえずC#で開発を始めてみます。 速度面で問題が出たら、C++を検討します。
>>842 とにかく、ダミーのガワだけでなく、正常に動作するモノが早く出来上がる。
→ 早く評価できるのでクライアントも嬉しい
評価において、必要があれば部分的にC/C++を用いて処理性能を上げられる。
→ 腕の見せ所を持つあなたも嬉しい
このシナリオ展開の筋書きでどうだ?
処理速度で問題が出たら、C++でDLL作ってC#から呼び出す方法を検討したらいいと思う
俺もずっとC++やってきたけど、たまたまC#使ったらもう抜けられん・・・ 併用もできるし、両方使ってからどっちか決めても遅くはない。
846 :
デフォルトの名無しさん :2008/12/11(木) 14:24:34
ありがとうございます。 だんだんC#で開発を始めるのが楽しみになってきた。 でも2chで色々聞いてみて考えを変えました(C#でやってみることにしました) とは言いにくいなあ。とりあえず上司にもう一回話しを振ってみて、そこでC#で やれと言われたときに、わかりました、と言ってみる予定です。
2ch なんて言わなくていいじゃん。ネットで色々調べた、って言えば。 クソガキかクソジジイのどちらかだな。
そんなレスくらいで年齢や性別の特定はできんよ
年齢はともかく、性別は推測できそうだけどね
ごうじょっぱりって云う事だけは判った。
すぐに年齢認定して煽り始める。 ゆとり世代のコンプレックスが原因です。 ネットで色々調べて分かりました。
能力の程度も C++とC#の比較なんてぐぐればいくらでもあるだろうに
新しいことの習得を嫌がる → ジジイ 駆け引きの未熟さ → クソガキ といったところ。
いや、そこはどうでもいいって
>>831 >IDEはVisual Studioなので、同じではないのですか?
見た目は一緒だけど、中身の質はかなり違う。
少なくともIntelliSenseの出来は桁違いにC#のほうが良い。
インターネットを知らない未開民族にインターネットの便利さを説くようなもの
いんてりせんすはC#のが圧倒的にいいよなー C++は構文解析するの難しすぎて使い勝手のいいIDE作るの難しいってどっかで読んだことあるわ Javaとかだとリファクタリングの機能とかもはや常識だけどC++でそういうのってないっしょ?みたいな
今や静的型付け言語の最大のメリットはコンパイル時チェックよりもインテリセンスだからなあ
正直、C++ でも C# でもどっちでもいい状況下で C++ 使うなんてありえない。 ガベコレはやっぱ欲しいしなぁ。 C++ でまともに使いやすいコード書こうと思ったら、 自前で参照カウント実装してとかしなきゃいけないし、 そうするとプラットフォーム側でGCしてくれる言語の方が効率いいし、 循環参照気にしだすとものすごい面倒だし。 あと、イテレーターとかLINQとかない言語はもう使えないわ。
他にも、属性、デリゲート、プロパティ、ラムダ式、挙げだしたらきりがない。 正直、C++とC#だったら生産性1桁違うと思う。
少なくとも業務系でC++はないわー パフォーマンスのこと抜かしたら、言語的にC++でできてC#でできないのって型制約無しGenericsでのとりっきーなもんだけじゃない?
C++だとコスト的に悪いよな 業務アプリ程度で速度が求められる事なんて最近はそんなにないし
Cは精製材料、C++は機能素材、そしてC#は高機能パーツ。 これぐらい違うな。
おまえらソフトはWindowsのデスクトップクライアントばかりじゃないですよ
>>864 何がいい言いたいのか意味わかんねえよ。
>>864 サーバーもWindows Server 使えってこった。
型推論、ラムダ式、拡張メソッド、LINQは本当に便利 今までの退屈なC#プログラミングが一気に幅が広がった気がする C++の変態的なのも楽しいけど今はC#が楽しい 所詮プログラミングなんてコード書いてる時間より考えてる時間の方が長いんだから楽しくないとね
匿名型も忘れないであげて
突然WindowsMoblie6.0の開発やらされる俺が通ります。 なんだ、CEってやったことないんだけど、.netなら殆ど同じなのかな…… 死にてえ。
やってから言えやカス だからおまえはつかえねーんだよ
あんな機能やこんなライブラリがCompactFrameworkでは・・・
C#は余計なこと考えなくて良いから好きだ。 もうMFCには戻れない。戻りたくない。
>>869 匿名型とラムダ式はちょっと相性が悪いので・・・
LINQって使うか?
前から思うんだけど、2ch(というかweb全体かもしれんが)って個別の新技術への 関心度はなぜか異常に高いけど、なんていうか「お前大きなアプリ書けないんじゃないの?」って 感じの人が多いような印象を受ける。 普通にコード書いてる人なら(もちろん新技術もそれはそれで重要ではあるが) 設計レベルの話の方が重要だし関心がありそうに思うんだが、その種の話っていうのは なぜかあまり盛り上がらないんだよね。 まあ邪推かもしれんが。
その手の話をするスレでもないしな
>>876 勘違いしてた
型推論とラムダ式が相性悪くて匿名型がうまくいかなかっただけだった
コーディングがどうとか、DBのチューニングがどうとか、ツールの使い方がどうとか、 そういう話題に関心の薄い人は、そもそも設計とか技術全般に関心が薄いような印象。
それって食えんの?
LINQなんか使ったらコードが読みにくくてしょうがないが
抽象度の高さに慣れたら読める
最初読みにくくても木としての構造がしっかりとしてるから考えやすい 変な分岐やループの解読不能コードよりはるかにマシ
LINQtoSQLよりSQL直書きのほうが手っ取り早いよ
言語に統合されていて、IDEやコンパイラが対応しているならな SQL自体は悪くないけど、今時クエリを文字列で扱うとかありえん
デリゲートの型がわからないと使えないってことかな? こういうことができない。 var f1 = i => i * 2; 推論になってないけどキャストは必要になるな。 var f2 = (Func<int, int>) (i => i * 2);
>>882 SQLライクな組み込みクエリ使わなくても、
集合操作系の関数がそろってるってだけでものすごいありがたい。
C++ で points.Select(p => p.X) 相当のコードを C++ で書くのがどれだけ面倒か。
>>886 そうそう、IntelliSenseとコンパイラによる構文チェックがありがたい。
あと、in-memoryオブジェクトとDBアクセスが同列に扱えるのもありがたい。
>>888 型推論に頼る者同士を重ねて使うと相性悪い。
var とラムダ式もだけど、あと、テンプレートでも時々型推論の問題出る。
まあ、どれか1つ型を明示すればいいだけなんだけども。
いまだに p=>p.Xってのがなんだか理解出来ないんだが、 object foo(object p){ return p.X;} と同等の無名メソッドって理解でいいのかね
そんな感じなのだが、引数や戻値の型はdelegateで定義される。 そのため p=>p.X の式だけではC#のラムダ式として成立しない。
匿名型があるのになぜローカルな型宣言ができないのだろう
javaとは違ってデリゲートがあるから不要と判断されたんだろう メンバクラスも同様
var f = x => t.Where( t => t.t1 == x ).Select( t => new { a = t.t1, b = t.t2 } ); できればこんなことをしたいけど型推論が無理 Func<int, IQueryable<'a>> みたいになるので明示的宣言もできない 汎用Variantみたいなもの作ってFunc<int, IQueryable<Variant<T1,T2>>>的なことはできるけど冗長になりやすいのでtypedefが欲しくなるし 型推論ができないのは仕方ないとしてせめてローカル型宣言できればなあって
static Func<T, TResult> Func<T, TResult>(T t1, Func<T, TResult> func) { return func; } var f = Func("ダミーだよ", x => new { X = x }); Console.WriteLine(f("Hello World").X); こうする。キモいけど。
なるほど、ちょっといじって var f = Func( (string x) => new { X = x } ); でいけた ありがとう
static List<T> NewList<T>(T type) { return new List<T>(); } も必須だな
Application.Exit()してもメモリは全部解放されるの?
プロセスを終わらせるのだから当然。 その前に未実行のデストラクタもちゃんと動くから、 プロセス外のアンマネージドリソースやアウトプロセスサーバーの開放も機能する。
プロセスを終了ちゃう。
デストラクタ実行の保証もない。 一部はあるけど。
確かに、メッセージループを抜けるだけだな 元の質問がプロセス終了を意図したものならば、 プロセス終了時の(未解放の)リソース解放はOSが責任を負う
Environment.Exitとはまた別だな
Environment.FailFastが最強
多値返したいんだけどどうすればいいんだ? return new { Result = true, Message = "うどん>そば" }; とかを返すような関数って型宣言どうすればいいの?
>>905 匿名型返す非匿名メソッドは無理。
ちゃんと Result と Message 持つ型作るしかない。
4.0 なら dynamic で返せばいいんだけど。
>>906 マジか ありがとう
4.0ならいけるのか… C#はバージョン上がるたびに気持ちよく書けるようになるな
C# 2005 ADOXのカタログ使って*.mdbファイル作ってるんだが 複数の主キー設定する方法がわからないんだ… ADOX.KeyClass pk = new ADOX.KeyClass(); で宣言してColumnsに列名追加してやってるんだが Keys.Append(pk,ADOX.KeyTypeEnum.adKeyPrimary,"","",""); ではダメらしい…orz
>>907 でも、そんなののためにdynamic使うのはどうかと思うけどなぁ。
匿名型はメソッド内だけで使え。
dynamicで返すとIntelliSense効かなくなるしね。
ある程度効かせて来たりするかもしれんがやっぱり名前ぐらい与えてやれ戻り値の型に。 自動プロパティとイニシャライザでだいぶいい感じにはなるから
効いたらdynamicじゃないだろ もし推測が可能でも意味的におかしいからありえない
913 :
912 :2008/12/13(土) 22:12:12
dynamic型を返すメソッドの場合に限った話だよ dynamic x = "a"; これはインテリセンスが効いてもおかしくはない
intellisenseに頼る状況ならdynamic使う意味なくね?
もう3.0以降はついて行けない LINQって何? おいしいの? データベースなんか触らないボクに関係ある? ラムダ式ってなに=>あの矢印。べつにデリゲートでいいじゃん。こないだやっと理解したばっかなのに。 ダイナミックてw ダイクマかよw
むしろ宇宙刑事ギャバン
後でxに違う型のオブジェクトを代入するかもしれないでしょ 右辺にdynamicを返すメソッドが来ないかぎりは推測できるはず
別にIntelliSenseが今よりもっさりしてもいいなら可能なんじゃないかな
>>915 データベース関係なくても、Enumerableクラスで
配列やコレクションに対する操作を行うメソッドが充実しているのは便利。
ラムダ式なくて生きていけるヤツとか存在するの?
>915 ToLookupが便利だよ。ここだけは勧める。 ToLookupとかToDictionaryとか一時変数なしでさっくり処理できるのが嬉しい。 ToLookupしてToDictionary(it => it.Key, it => it.ToList())とかToDictionary(it => it.Key, it => it.First())とかよく使う。 LookupはDictionaryと違ってキーがなくても長さ0のコレクションが返ってくるのでそれも便利。 linqをデータベースに適用するのはデータ量的にも予想できそうにない処理速度的にも怖くて出来ない。
LINQ to XMLが使いやすすぎる 軽いし
924 :
デフォルトの名無しさん :2008/12/14(日) 00:21:14
人の書いたLINQのソースってなんか読むのがすごく苦痛じゃね? 俺が単にまだぽつりぽつりと使うぐらいで、きちんと使いこなして いないせいなのかもしれないけど。
>>922 データベース相手でも、複雑でなければLINQ使っても直にSQL使ってもそう変わらないと思うけど。
普通のSQL書いてくれたほうがLINQより読みやすいのは確定的に明らか
読みにくいと思うのは思考がまだ慣れてないだけだと思うけどなあ クエリ式は正直いらなかった
>925 LINQでも直にSQLでも同じクエリが実行されるなら普通にSQL書いて欲しいよ。 「そう変わらない」って表現できるように違うクエリになる可能性があるとなると ちょっとでも違うのが原因で予想外な実行プランになるのが怖いんだよ。 SQLServerをプロファイラでチェックして重いクエリを見つけたときに SQLが直接書かれていれば簡単にgrepできるのに LINQだとどこで実行されたクエリか探すのが大変なことになるよ。
LINQ to SQL/EntityとLINQ to Objectの話が混ざってるような。 分けて考えたほうが無難だと思うよ。
LINQ to Objectがないとコレクションに対するあらゆる操作が面倒くさくなる
2.0でデリゲートの型宣言がメソッド内で出来たらいいのに。
>>928 いやいや、それはない。
LINQ to SQL、LINQ to Entity は、C# ソース中に型安全で IntelliSense とコンパイラの構文チェック付きで書けるってのが何よりもおいしい。
確かにパフォーマンス最優先なら結局 SQL 文直接書いてぎりぎりまでチューニングした方がいいんだけども。
それは「C++ は遅いからアセンブラ書け」って発想と大差ない。
LINQのような使い手(開発者)向けに改良された高機能技術はデータベースでこそ使いたいな。 複雑で難儀するものこそ技術者コミュニティの美徳という、サグラダ的なリナ糞系では生まれない 洗練された技術だしな。
LINQはまず第一にジェネリックアルゴリズムなんであって SQLとかクエリ式とかおまけもおまけだろ
ずっと桜田ファミリアだと思ってた
ようするにあると便利だけど なくても実現できないものがあるわけではない でおk?
>>937 分からないなら黙っててください。ウザいだけです。
どうでもいいループまで得意げにLinqで書かれるとうざい
Linq to SQLが無かったらトークンごとのコンパイル時型チェックができないじゃないか SQL文字列を自前でトークナイズしてたら実行時になっちゃうし
SQLインジェクションとか気にせず適当に突っ込んどけばいいから楽だよ
>>940 どうでもいいループなら消した方がいいと思うけどどんなの?
サクラダファミリアじゃないのかよw
>>943 定形処理までLINQにされると読みにくいんじゃないのか?わからんけど
今までの書き方のほうが見た瞬間わかる!とかはあるじゃん
ようするに俺らの脳内が時代に追いついてませんwwwみたいな
コピペ君って馬鹿だな、まで読んだ。
>>946 ワロタw確かに使ってるww
「〜やろ。いやよう知らんけど。」みたいなw
でもそれが大阪の味やねんからほっといて。
よう知らんけど・・・
950 :
デフォルトの名無しさん :2008/12/14(日) 17:11:29
C#でGUIアプリケーションを作っているのですが、 アプリ内でフォームに入力した内容をMS Word、Excelに出力する事はできるのでしょうか? メニューを作り、txtファイルに出力されるようにはしているのですが、 そこから印刷する時にいつもWordを開いてコピペしてやっているので、 直でWord形式で出力はできないのか?と思いました。
平気で断定的に嘘をつく人間よりは不正確であることをそうと宣言する人間のほうがいいと思うがなあ
>>950 できるよ。「オートメーション」で調べてみ
954 :
デフォルトの名無しさん :2008/12/14(日) 18:09:25
>>953 XNamespaceで解決するかも、しないかも
>>955 そこは「よう知らんけど」を使わないとw
>>930 同感、もう手放せないったら手放せない
ほかの言語に行くのが怖い・・・
>>955 やってみたけど解決しなかったわ… や、よう知らんけどな
LINQでゴニョゴニョすると、わけのわからんクラスがアセンブリに勝手に作られたりすんの?
>ゴニョゴニョ 出たよヲタグラマ用語。本当に気色わるいな。 ゴ〜ニョゴニョゴニョヲタクの子
>>959 ローカル変数をラムダ式(もしくはクエリ式中の式)に取り込むとクラスが生成されるけど
LINQとは直接関係ない
一番アセンブリが汚くなるのはyieldだな
結構な量の汚いコードを生成する
yield これもまた使えるんだよな ただそろそろ整理しないと言語が崩壊する…
とっととラムダ式の中でyield使えるように汁
LINQの中で一番恐ろしいのはExpressionsだと思う
>>961 あるぇー?(´・ω・`)
わざわざコード書いてくれてあんがと
喰わせたXHTMLがダメだったんかな… どうやって追いかければいいんだ…
XDocmentの奴は例外飛ばすときなんか行番号がでていたのを見たことがあるような気がする〜 良く知らないけどw もし行番号でているなら手で開業売ってみたらええのでは
俺なんかは、HTML系はエラーが出過ぎてもう面倒くさいからって、ダサダサの全部手パースだw
dynamicで生成されるコードもかなり酷いよ
正規表現万能説ですねわかります
その発想はなかったわ
974 :
953 :2008/12/15(月) 00:10:12
今もっかい
>>961 が書いてくれたコードをコピペしたら動くようになった よう知らんけど
で、そのあと自分の流儀でもっかい書き直してみた 動いた
元のコードと新しく書いたコードを見比べてみて特に違いがわからない
何で動くようになったのか全然わからなくて嬉しいけど気持ち悪い
ほとんど変わってないけど以下動いたコード
XDocument x = XDocument.Parse(xml);
XNamespace xn = "
http://www.w3.org/1999/xhtml ";
var hrefs = from a in x.Descendants(xn + "a")
where a.Attribute("href") != null
select a.Attribute("href").Value;
foreach(var href in hrefs) {
Console.WriteLine(href);
}
良くあることでつ
ねーよw
979 :
デフォルトの名無しさん :2008/12/15(月) 15:57:17
エクスプローラでは隠しファイル属性のファイルのアイコンは淡い色で 表示されていますが、あのようにアイコンを淡い色で表示するためには どういったクラスでできるのでしょうか。
981 :
デフォルトの名無しさん :2008/12/15(月) 20:00:03
>>980 ご指導ありがとうございます!!
この方法をアイコンの表示に使う場合にはどうするか、
わかればいいのですね。また調べてみます。
またわからないときにはお聴きします。
ControlPaint系のスタティックメソッドが使えるかもしれない
983 :
デフォルトの名無しさん :2008/12/15(月) 22:01:29
だれかjmeterの砲弾作ってくれる人いないかー? Vs韓国戦の砲弾が劣悪らしいんだ 戦争できねえっうぇえっっw
仕返ししたら韓国人と同レベルじゃないか。程度が知れるぞ
自分の足を撃ち抜く砲弾作ってやろうぜ!
構えると後に飛んでくバズーカとか
めくそはなくそ
C#についての質問です コンソールで上の行に戻ることはできますか? C言語ならば\x1b[2Aのようなエスケープシーケンスで戻ることができたのですが C#ではこれが使用できませんでした 何か方法があったら教えてください
C#じゃなくて.NETでの回答だけど 2.0以降ならConsoleクラスにカーソル関係のプロパティとか用意されてる
Cでも今時Win32アプリケーションでは無理だな。
ANSI.SYS組み込んだDOSプロンプトじゃないとね。
>>989 返答ありがとうございます
なるほど,Consoleクラスにあるんですね…盲点でした
次スレの用意は?
いいだしっぺの法則