[プログラム板] C#, C♯, C#相談室 Part47at TECH
[プログラム板] C#, C♯, C#相談室 Part47 - 暇つぶし2ch175:デフォルトの名無しさん
08/07/11 16:20:27
>>165
別のスレッドでフォームを書き換えるの?それは無理
[STAThread]  <-
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

176:デフォルトの名無しさん
08/07/11 16:21:05
>>170
LOHに何があるか、専用のデバッガやプロファイラで調べられなかったっけ?

CLRProfilerやsos.dllを使えばできそうな気がするよ。

177:143
08/07/11 16:24:22
>>153
できたっ
ありがとうありがとう

178:デフォルトの名無しさん
08/07/11 16:27:06
>>176
ちょっとそのあたりのツールを調べてみます。ありがとうございました。

179:デフォルトの名無しさん
08/07/11 16:28:15
>>174
それって最初のボタンのクリックイベントの最初に
非同期通信中だったら非同期通信キャンセルなり終了させるような処理書けばいいのでは?
その完了を待って再度非同期通信を開始すればよいのでは


180:デフォルトの名無しさん
08/07/11 16:30:31
>>175
>別のスレッドでフォームを書き換える
スレッドからフォームのプロパティを書き換えるのではなく、
同期通信のメソッドが通信を受けた時のイベントがあるんです。

そのイベントの中でフォームを弄るので、簡単に言えば、
ButtonClickイベントが起きたら通信メソッドをDispose()出来れば良いんです。

ですが、DoWork()内にButtonClickをどう通知したら良いのかわかりません。

181:デフォルトの名無しさん
08/07/11 16:33:08
>>180
IsBusy
CancelAsync

こんな感じのメソッドとプロパティなかったか?wwww

182:168
08/07/11 16:34:11
FileNameに"/c"パラメータとかつける方法ありませんか。

183:デフォルトの名無しさん
08/07/11 16:40:19
>>179 >>181
ButtonClickイベントの中で
BackgroundWorker.IsBusyでスレッドの使用を確認して、
動いていたらCancelAsyncを呼び出せばRunWorkerCompletedイベントが発生する訳ですね。

よくわかりました、ありがとうございます

184:デフォルトの名無しさん
08/07/11 16:51:07
一応いっとくけどCancelAsync呼んだだけじゃRunWorkerCompletedは発生しないぞ
CancelAsyncの解説読めば分かることだけど

185:デフォルトの名無しさん
08/07/11 17:12:52
object result = type.InvokeMember("test", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, new string[1] { "sample" });
ってDLLを動的に呼び出して MyClass1 ってのを返すんだけど
object型のresultをMyClass1にキャストする方法がわからないのだが誰かヒントでも良いから助けて

186:デフォルトの名無しさん
08/07/11 17:17:16
>>185
動的にDLL呼び出しができてキャストできないとか・・・・・

(T)

187:デフォルトの名無しさん
08/07/11 17:23:16
きっと「動的にキャスト」みたいなこと考えてるんだろう

188:デフォルトの名無しさん
08/07/11 18:00:26
MyClass1返すならなんで動的に呼ぶ必要があるんだよ
まあこれはMyClass1が対象のアセンブリに含まれてると仮定した場合だが
MyClass1を静的に参照してるんじゃなきゃキャストなんてできるわけがないぞ


189:デフォルトの名無しさん
08/07/11 18:03:13
解決しました
第三のDLLかましてあげればよかったんですね

190:デフォルトの名無しさん
08/07/11 18:07:32
>>170
>任意の型(ただしdoubleに変換可能、実際の想定はfloatとdouble)

ならdouble決め打ちでいいんじゃね?
って思うんだが駄目ですか

191:デフォルトの名無しさん
08/07/11 18:15:15
double[]引数にはfloat[]を与えられない

192:デフォルトの名無しさん
08/07/11 18:25:51
つうかキャスト動作が食ってるとかありえないのかな?

何万も回せばコストはでかいと思うんだが
外からは意識しないように内部で分岐させて処理してみればよくねぇか?

この分だとキャストは一回だけで終わりそうな感じがするんだが・・・


193:デフォルトの名無しさん
08/07/11 18:34:48
>>189
第3のDLLのはインターフェイスにしておくと融通が利く。

194:デフォルトの名無しさん
08/07/11 18:44:04
>>170
<T>[]で受けると型が特定されなくてそのままSystem.Convert.ToDoubleが呼ばれる
結果的にもう1つ<T>[]を作っている感じな予感。
float[],double[]で受けると最適化されてSystem.Convert.ToDoubleは呼ばれない。


195:デフォルトの名無しさん
08/07/11 18:48:26
IConvertibleで制約してhoge[i].ToDouble(null)とか

196:デフォルトの名無しさん
08/07/11 18:55:15
>>173
return直前にdoubleにすればいいだろ。

197:デフォルトの名無しさん
08/07/11 18:57:26
Tのままじゃ比較できないじゃん

198:デフォルトの名無しさん
08/07/11 19:00:52
比較はCompareToかな。それよりT.MinValueって使えるのかな

199:デフォルトの名無しさん
08/07/11 19:18:12
lengthがゼロならMinValueを返すのが仕様なら仕方ないが
普通初期値は配列の最初の要素だろ。
T ret = src[offset];


200:デフォルトの名無しさん
08/07/11 19:36:11
総称型の場合Convert.ToDouble(Object)でボクシングが
大量発生してヒープを使いすぎるのはわかるがLOHが使われるのは解せんね。

201:デフォルトの名無しさん
08/07/11 19:55:28
>>170
じつはToArrayでラージオブジェクトヒープを使っているとか言うオチだったり
List<int> arr = ..
double ans = Max(arr.ToArray(), 0, ar.Count);

202:デフォルトの名無しさん
08/07/11 19:58:18
>>199
そうなんだけどT.MinValueが使えるのかが気になった。
Length==0なら例外投げるのが妥当だよね。

203:デフォルトの名無しさん
08/07/11 21:42:05
相談です。

C#3.0(2.0でも可)にて
PDFからオブジェクトの取得をしたいと思っています。
PDFはベクトルデータであることが前提で、ラスタデータは考慮しません。

●抽出
テキストデータは テキスト、フォント、サイズ、座標を取得
画像データは 画像、座標を取得
各データにジャンルを割り当てDBに保存

●復元
テキスト、フォント、サイズ、座標からPDFに復元する。
その座標に画像も存在していれば画像も復元する。

何か良い方法はご存知でしょうか?

204:デフォルトの名無しさん
08/07/11 21:45:08
>>203
本屋でPDFの仕様書を見たことがあるから、amazonで探せばあるんじゃね?
英語なら買うまでもなく、ネットでもありそうだけど。

205:203
08/07/11 23:43:25
>>204
PDF仕様書の英語版はWebで公開されてます。
日本語版の仕様書は本で出てます。
PDFの使用がわかってもC#でPDFを扱う術(COMやSDKなど)がわからないのです。
iText,PDF4NET, PDFLib など様々なものを試していますが、これというものがありません。
画像抽出に関しても、抽出するだけならできるが、座標の取得などは不明だったりします。

206:デフォルトの名無しさん
08/07/12 00:15:58
つかライブラリ使うつもりなら、仕様書まで読む必要ないよ。

207:デフォルトの名無しさん
08/07/13 03:14:35
>>205
そこに挙げてる既存のライブラリで満足できないなら、新しいのを書くしかないだろ。

208:170
08/07/13 08:05:41
170ですが、遅くなって申し訳ありません。まだ解決したとはいえないのですが、>>194っぽい気がしています。
なお、最初に書いた文章が改行大杉と言われたので改行減らしています。読みにくいかもしれません。すみません。

とりあえず
public double Max<T>(T[] src, int offset, int length)
{
double ret;
if(src is float[])
{
float[] srcFloat = src as float[];
int end = offset + length;
for(int i = offset ; i < end; i++)
{
double val = (double)srcFloat[i]
if(val > ret)
ret = val;
}
}
else if(src is double[])
{
(略。明示的キャストをしないこと以外はfloatと同じ)
}
return ret;
}
というようにfloat[]、double[]の型に変換してからキャストするようにするとLOHを食う現象は見られなくなりました。
ただ、今でもキツネにつままれたような気分は抜けないので、もう少し元のコードだと何をやっているか調べてみようと思っています。
>>200で指摘があるように、キャストでヒープを消費するのはわかるんですが、Gen0やGen1ならともかくLOHを食うのは相変わらず解せないので…。

また何かわかったら報告します。ありがとうございました。

209:170
08/07/13 08:07:17
あと、>>208のコードでは対応していませんが、
・キャストは最後に1回やればいい(float、doubleに決め打ちできれば可能)
・Tで受けずに最初からfloat[]、double[]で受けるほうがいい
というのも納得しています。追って対応しようと思います。

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

210:デフォルトの名無しさん
08/07/13 08:29:38
そうまで限定するならoverloadしたほうが早いような。

211:170
08/07/13 09:29:10
>>210
「Tで受けずに最初からfloat[]、double[]で受けるほうがいい」
はoverloadにすることを考えて書いてました。


212:170
08/07/13 09:31:16
細切れですみません。いずれにしても
>>170のコードだとなぜLOHを侵食する?
という大本の疑問はまだ謎のままなので、
追い追いプロファイラとかで調べてみようと思っています。

213:デフォルトの名無しさん
08/07/13 13:11:43
何かよくわかりませんが、これ↓

やねう企画代表者やねうらお(本名・磯崎元洋)が
・ソフトウェアの不正コピーを行っていた
・労働契約上の違反をしていた
・他は不正コピーしていないことを証明しようとしてエロゲーのパッケージを発見し、
 写真に撮ってアップロードしようとした。
URLリンク(d.hatena.ne.jp)
やねう企画の裏側(競馬の詐欺ソフトの製作現場)
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
有限会社やねう企画(所在地・大阪府八尾市末広町2-1-2)が計画倒産
URLリンク(www.sia.go.jp)

やねうらおプロフィール
性格:友達から「チンピラ」「ヤクザ」と呼ばれている。前世で殺人鬼だった宿業を背負っているという妄想(自覚)あり。
最終学歴:専門学校卒
主な職歴:有限会社センキ(凌辱系アダルトゲームの製作会社)を経て独立、有限会社やねう企画を設立、2006年に計画倒産
代表作:『夜這いマニア』『盗撮マニア』『お楽しみCDシリーズ』『競馬詐欺ソフト』『BM98』

やねうらお語録
>「ワシのほうが潔癖やと思うんやけどな。
>絶対に違法コピーのソフトしか使わんし。
>たとえば強盗に入ったときに、ちょっとかわいそうになって
>十万円だけ残してったら、おかしいやろ?
>自分の『強盗する』という意思に対して矛盾やろ?
>だからワシは、一個も買ったソフトを使ったことがない!!」


214:デフォルトの名無しさん
08/07/13 13:15:09
コピペ君って馬鹿だな、まで読んだ。

215:デフォルトの名無しさん
08/07/13 13:21:57
最近、やねうらおは弓月(>>213)とか言う真性のキチガイに絡まれている

【自作自演】弓月城太郎氏に関するまとめ【神秘体験】
URLリンク(d.hatena.ne.jp)

216:デフォルトの名無しさん
08/07/13 13:57:02
コピペ君って馬鹿だな、まで読んだ。

217:デフォルトの名無しさん
08/07/13 14:00:45
こっちにまではってやがるw



218:デフォルトの名無しさん
08/07/13 21:54:07
ここまでコピペ


219:デフォルトの名無しさん
08/07/14 11:21:45
何度かここで質問しようとした事があるんだけど、なんでだろう。
書き込みボタン押す直前に閃いて解決してしまう。


220:デフォルトの名無しさん
08/07/14 16:34:41
日記はチラシの裏に

221:デフォルトの名無しさん
08/07/14 16:44:41
やだね

222:デフォルトの名無しさん
08/07/14 17:44:05
じゃあチラシの表でいいや

223:デフォルトの名無しさん
08/07/14 17:45:26
やだね

224:デフォルトの名無しさん
08/07/14 18:46:51
今作ってるプログラムが500行超えた
こんなに長いコード書くの初めて・・・

フォームアプリケーションってめんどいね

225:デフォルトの名無しさん
08/07/14 18:57:13
むしろそんなに大きくないファイルがたくさんできないか?
と思ったら500行か、、、、そりゃテストコード書くんでもなけりゃ
あっというまだべ。

226:デフォルトの名無しさん
08/07/15 12:24:44
データバインドとか使わずに愚直コピーしてるとか?
それでも500ぐらいあっと言う間だろうけど

227:デフォルトの名無しさん
08/07/15 22:48:06
UI絡みは長くなるの仕方なかろう

228:デフォルトの名無しさん
08/07/16 17:14:27
チラシって普通両面に印刷されてるよね。
そういえば昔は片面印刷だったっけ。

229:デフォルトの名無しさん
08/07/16 17:15:27
どことまちがえてるんですか?w

230:デフォルトの名無しさん
08/07/16 22:07:19
マーシャリングについて教えてくれ。
C#からCで書いたDLLのGetImageを呼び、ImageProcデリゲートで画像のデータを受け取りたいんだが、
ImageProcデリゲートの第一引数を何と書いていいか分からない…

【C側】
typedef void (*ImageProc)(unsigned char* pImageBuffer, unsigned int imageSize);

__declspec(dllexport) void GetImage(char* pFileName, ImageProc pImageProc)
{
unsigned char* pImageBuffer = 0; //画像バッファ
unsigned int imageSize = 0; //画像サイズ

//中略:pFileNameの画像を開き、pImageBufferを動的確保し、
//pImageBufferに画像のデータを、imageBufferSizeに画像のサイズを入れる。

pImageProc(pImageBuffer, imageSize);
}

【C#側】
↓???を何と書いていいか分からない…
public delegate void ImageProc(???, UInt32 imageSize);

231:デフォルトの名無しさん
08/07/16 22:16:41
IntPtr

232:デフォルトの名無しさん
08/07/16 22:28:42
string

233:デフォルトの名無しさん
08/07/17 08:51:39
byte[]でいいんじゃね?
推奨できないけどどうしてもというならunsafeつけてbyte*とか


234:デフォルトの名無しさん
08/07/17 11:07:03
正直受け側の実装次第

235:デフォルトの名無しさん
08/07/18 09:35:50
脱線するけどBitmap.LockBitsじゃダメなのか

236:230
08/07/18 11:15:25
>>231で行けました。THX!

【c】
#include <windows.h>
typedef void (CALLBACK* ImageCallBack)(VOID* pImageBuffer, UINT32 imageSize);

【c#】
public delegate void ImageCallBack(IntPtr pImageBuffer, UInt32 imageSize);

public static void ImageCallBackHandler(IntPtr pImageBuffer, UInt32 imageSize)
{
byte[] imageData = new byte[imageSize];
imageData.Initialize();
Marshal.Copy(pImageBuffer, imageData, 0, imageData.Length);
}

237:デフォルトの名無しさん
08/07/18 22:27:57
VisualStdio2005なんですが、使用する.netFrameworkを1.1にして開発に使用する事って可能ですか?

238:デフォルトの名無しさん
08/07/18 22:30:37
いいえ

239:デフォルトの名無しさん
08/07/19 01:03:13
実はできなくもなかったりするんだが、いろいろと面倒なんでお勧めしない。

240:デフォルトの名無しさん
08/07/19 14:35:26
ListViewの詳細表示モードで、ダウンロードの進歩状況を表示するような・・・
例えば、WinnyなどのP2Pソフトによくある横棒グラフに % 表示があるような
ものを表示したいんですが、どのように実装したらいいでしょうか?

とりあえずオーナードローでサブ項目にRectangleで描画したりしてみましたが
あまりにも遅くて実用的ではありません。
もっと効率的な方法があるのでしょうか?

241:デフォルトの名無しさん
08/07/19 14:36:40
それはおそらく実装の方法に問題がある。
そんなに遅くなるはずがない。

242:デフォルトの名無しさん
08/07/19 14:46:42
>>241
いや、それが試しにRectangleの描画処理だけを入れただけのものなんで
ほとんどこれが最少の処理なんですよ

確か、Winnyを作っていた47氏も描画の遅さに悩んでいた記憶があるので
もともとどうやってもある程度の遅さはしょうがないのかもしれませんが
オーナードロー以外にもっと上手い方法があれば教えて頂きたいのですが

243:デフォルトの名無しさん
08/07/19 14:57:24
その部分のコード晒せば今日暇だから改良してみようか
晒せないならしょうがないけど

244:デフォルトの名無しさん
08/07/19 15:13:27
ListViewのDetailモードはバギーだからさもありなん、という気もする。

245:デフォルトの名無しさん
08/07/19 15:21:43
>>243
上記した通り、四角の描画しかしていないんですが
具体的に書きますと

if (e.ColumnIndex == 3) {
 e.Graphics.FillRectangle(Brushes.Red, e.Bounds.Left, e.Bounds.Top, percent, e.Bounds.Height);
}

の処理を入れてあるだけの、最小限の物です。
他の余計な処理は一切していません。

246:デフォルトの名無しさん
08/07/19 15:23:38
描画処理が何回呼ばれてるかとか描画に何ms掛かってるかとか調べてみたら

247:デフォルトの名無しさん
08/07/19 16:37:44
>>245
そんなんじゃわからん
普通に軽いのができてしまったぞ


248:デフォルトの名無しさん
08/07/19 17:34:04
ほかの部分が重いんじゃないか?
追加部分をコメントアウトして確認

249:デフォルトの名無しさん
08/07/19 18:43:16
俺のもめちゃ軽い。ちらつきはDoubleBufferedで抑えてみた。

250:デフォルトの名無しさん
08/07/19 19:06:50
追加するときに重いとかいうオチだったり?

251:デフォルトの名無しさん
08/07/19 19:09:28
どうせListViewだし、

0u2007 FIGURE SPACE
0u2588 FULL BLOCK
0u258C LEFT HALF BLOCK
0u2590 RIGHT HALF BLOCK

の手抜きでいいじゃんとか思ってしまう
虫食いなしなら、1/8のまで使えるし

一応こんな感じに
URLリンク(www.imgup.org)

252:デフォルトの名無しさん
08/07/19 19:09:34
実は実行環境が驚くほどプア

253:デフォルトの名無しさん
08/07/19 19:31:09
>>244
ListViewといえばDetailなのにバグ多いよね。
そして改善されない。

254:デフォルトの名無しさん
08/07/19 19:40:35
うわ、疲れて寝てしまった。

>>247
でも、これしか書いてないから他の部分無いんですよ、全く。

>>248
上にも散々書きましたが、他の処理は無いのです。
ListView検証の為にTestListViewというプロジェクトを作って
フォームにListViewを貼り付けただけのプロジェクトなので
描画処理部分以外も、余計な処理が全く無いんですよ。

>>249
やっぱり軽いですか。何で重くなってしまうのか・・・

>>250
動的にデータを追加することは無いです。

>>251
うわ、昔を思い出す処理ですね(w
MSX の SCREEN 1/2 でやっていた時に
そんな感じでゲームのパラメータそんな感じでやってたなぁ

>>252
Pentium-M 1.6GHz なので、それほどプアでも無いと思うのですが。

255:デフォルトの名無しさん
08/07/19 20:46:38
Debugつうオチではない?

256:デフォルトの名無しさん
08/07/19 22:32:15
そんだけのプログラムならうpすればいいのに

257:デフォルトの名無しさん
08/07/19 22:38:16
サブ項目は、一つ一つがリソースを消費するから
数によってはかなり重くなってメモリを消費すると思うが
それとは違う?

258:デフォルトの名無しさん
08/07/19 23:06:06
自分のは10万個とか追加したらスクロールバーでのスクロールははっきり重くなった
マウスホイールでのスクトールは軽いままだけど


259:デフォルトの名無しさん
08/07/19 23:22:24
配列かリストのスライスとかないんでしょうか。

260:デフォルトの名無しさん
08/07/19 23:22:53
自分で作ってください…

261:デフォルトの名無しさん
08/07/19 23:24:17
ちゅうかまず描画の頻度がどの程度なのよ


262:デフォルトの名無しさん
08/07/19 23:28:01
そりゃWM_PAINTとんでくる度だろ

263:デフォルトの名無しさん
08/07/19 23:36:49
オーナードローって言ってるのにねぇ

264:デフォルトの名無しさん
08/07/19 23:41:58
>>254
プロジェクド丸ごとうpしろよ
原因見つけてやるから


265:デフォルトの名無しさん
08/07/19 23:52:00
馬鹿はレスしなくて良いと思うんだ

266:デフォルトの名無しさん
08/07/20 00:02:49
じゃあお前レスすんな


267:デフォルトの名無しさん
08/07/20 00:07:23
オーナニードローのパフォーマンスが悪いのは仕様だと思う。

268:デフォルトの名無しさん
08/07/20 00:10:48
>>267
言いたかっただけだろw

269:デフォルトの名無しさん
08/07/20 00:20:08
俺もやってみたが軽かった
どんな糞コード書けば重くなるんだ?


270:デフォルトの名無しさん
08/07/20 01:09:26
バーの長さをe.SubItem.Textでパーミル指定とかしてみたけど、
10万個の項目でもスムーズに動く。スクロールも無問題

因みに、環境はPemM 1.7GHz/mem 1GB

271:デフォルトの名無しさん
08/07/20 01:16:30
そういえば、カスペが入ったPCでデバッグビルドを動かした時に、
異様に遅くなったことがあったな。
コンボボックスを開くのに数秒かかったり。
VSを信頼するアプリに設定してプロセス動作の監視対象から外したら
普通に動くようになった。

272:デフォルトの名無しさん
08/07/20 12:40:04
こんな親切なレスの流れはひさしぶり

273:デフォルトの名無しさん
08/07/20 13:12:32
火スペって何?
まさか名取裕子とか出てくるドラマ枠のことじゃないだろうし

274:デフォルトの名無しさん
08/07/20 13:28:30
ググれば一発で出てくるのに
しかも、一番上に

275:デフォルトの名無しさん
08/07/20 13:33:21
質問者の反応が悪いな
諦めたんかね

276:デフォルトの名無しさん
08/07/20 15:41:54
カスペ、監視からjustの扱ってるアンチウィルスソフトだとわかると思うんだがなぁ。
これくらいは許されてもいいような省略系じゃないのか?


277:デフォルトの名無しさん
08/07/20 15:45:09
よくない

278:デフォルトの名無しさん
08/07/20 15:45:43
はじめて聞いた
俺は気付いたけど

279:デフォルトの名無しさん
08/07/20 16:19:19
すまん。セキュリティ板なんかではよく見かける略称だったもんで。

280:デフォルトの名無しさん
08/07/21 23:35:58
C++のboostみたいなC#の定番ライブラリってないですかね

281:デフォルトの名無しさん
08/07/21 23:46:18
標準で機能かなりそろってるからなぁ。
patterns & practices とか EntLib とか、MS が提供してる標準外コードも多いし。

282:デフォルトの名無しさん
08/07/22 14:23:54
entlibなんかきらいだ

283:デフォルトの名無しさん
08/07/22 18:08:55
最近C#に乗り換えたんだが
初心者はSDKから入ったほうがいいよな?

284:デフォルトの名無しさん
08/07/22 18:15:47
日本語でおk

285:デフォルトの名無しさん
08/07/22 19:24:45
>>283
初心者はIDEから入るべき
自分でことを難しくすることはない

286:デフォルトの名無しさん
08/07/22 21:43:08
VC# Express Edition 1択。

287:デフォルトの名無しさん
08/07/22 22:14:16
ム自体初心者なら SDK というかそのレベルのことからはじめるのは
ありだと思うが C# の言語的な思想ってのは IDE が存在する世界だ
から IDE で触れないとなんつーか色々わかりゃしない。結果遠回り

288:デフォルトの名無しさん
08/07/22 22:17:11
別にそんなこと無い

289:デフォルトの名無しさん
08/07/22 22:38:55
別にそんなこと無い
インテリセンスとGUI作成以外は、
SDKから構築した自作コンパイル環境の方が早かったりする

でも初心者はVC#EE使うべきだよ
楽だもん

290:デフォルトの名無しさん
08/07/22 22:39:49
初心者はCASLからだろJK

291:デフォルトの名無しさん
08/07/22 23:22:09
>>289
コーディングの速さなんか問題にしていないしそれぐらい慣れたら
できる人間(他から移行中とか)で C# 初心者の場合に言ってる

IDE からみないと C#(.NET) 的なコンポーネントとかメタデータやらで
宣言的にとかそういう発想が分かりにくいよという話


292:デフォルトの名無しさん
08/07/22 23:32:43
> IDE からみないと C#(.NET) 的なコンポーネントとかメタデータやらで
> 宣言的にとかそういう発想が分かりにくいよという話

もっと具体的に言ってくれないとわかんない

293:デフォルトの名無しさん
08/07/22 23:40:15
IntelliSense は楽をさせてくれると同時に、
初心者にとっては学習ツールでもあると思う。

294:デフォルトの名無しさん
08/07/23 00:41:02
通ぶってるのか何か知らないけど、今時SDKだの素のエディタ使うだのって
そういう背伸びは中学生までにしとけって言いたくなるよな。

傍から見てても恥ずかしくなるよ。

295:デフォルトの名無しさん
08/07/23 00:45:17
SDK→IDE ・・・ 時代に取り残されたおっさんの発想


296:デフォルトの名無しさん
08/07/23 00:45:55
C#でIDE使わないならJAVAでいいじゃん

297:デフォルトの名無しさん
08/07/23 01:06:37
俺はVSのエディタとVIMを併用してるが、
2003→2008にしたら比重が1:9→8:2くらいになったな

LINQ、ラムダ式、拡張メソッドを使うときとか、
コンパイラ並みの構文解析してくれないエディタだと面倒くさい

298:デフォルトの名無しさん
08/07/23 01:18:22
>>294
ム板だし、人に強要しなきゃいいんじゃね?
マなら仕事できない奴確定だがな

299:デフォルトの名無しさん
08/07/23 01:25:47
VC#使うのは当然としてもコンソールアプリから始めてみるのはいいんじゃないの
基本的なところの勉強で小さいコード動かすために
わざわざVBみたいにボタン一つだけ載せたフォーム作るのは格好悪すぎ

300:デフォルトの名無しさん
08/07/23 01:31:42
誰もコンソールアプリから始める事には反対してないような…

301:デフォルトの名無しさん
08/07/23 01:33:55
>>291

302:デフォルトの名無しさん
08/07/23 01:43:38
俺も反対してないけど始めるのはGUIからでもCUIからでもいいと思うよ


303:デフォルトの名無しさん
08/07/23 02:38:56
夏か!

304:デフォルトの名無しさん
08/07/23 02:47:40
どうでもいいけど、cscやmsbuildは.NET Frameworkに付属しててSDKなしでも
たいていのコンパイルはできる。

305:デフォルトの名無しさん
08/07/23 04:22:22
DLLからクラスやメソッドを詳細検索してくれるようなツールない?

protected で A から始まるメソッドをクラス 'Tool' から全部表示する みたいな

306:デフォルトの名無しさん
08/07/23 04:59:02
Reflectorでも使うか、リフレクション使って自作したら?

307:デフォルトの名無しさん
08/07/23 05:26:40
Assembly.LoadFrom("Hoge.dll").GetType("Hoge.Tool").GetMethods()
.Where(m => (!m.IsPublic && !m.IsPrivate && m.Name[0] == 'A'))
.ToList().ForEach(Console.WriteLine);

とか

308:デフォルトの名無しさん
08/07/23 06:23:03
'A'))
やっぱり顔文字に見えるな

309:デフォルトの名無しさん
08/07/23 06:24:08
>>306
Reflectorは修飾子まで考慮してくれないんだよなぁ
自作してみるわ

>>307
3.5ってそんなキモイことできるんかwwすげーなwSTLみたいだw

310:デフォルトの名無しさん
08/07/23 06:57:53
>>308
ワロスw

311:デフォルトの名無しさん
08/07/23 10:56:44
繋げて書けるのはいいけどぬるぽが怖い

312:デフォルトの名無しさん
08/07/23 13:33:57
ブレークポイント置いてデバッグする時は複数行に分けるよね

313:デフォルトの名無しさん
08/07/23 18:36:29
ToList().ForEach()はムダだろ
IEnumerableに対するForEach拡張メソッドを自分で書くか素直にforeach使うべき

314:デフォルトの名無しさん
08/07/23 18:58:33
米国時間22日、マイクロソフトは「Xbox LIVE Community Games」を北米で今年後半から
開始すると発表した。その他の地域については2009年から逐次開始する予定。

Xbox LIVE Community Gamesは、XNA Game Studioで開発されたXbox360用ソフトを
Xbox Liveを通じ一般利用者へ販売することを可能とするサービス。

Xbox LIVE Community Gamesでの販売は、XNA開発者コミュニティ「XNA Creators Club」の
有料会員(年額9,800円)であれば誰でも行うことが可能となる。

販売価格については200~800マイクロソフトポイントの間で自由に設定することができ、
手数料として売上の30%が引かれることとなる。

XNA Game Studioは、マイクロソフトが無償で公開しているVisual Studioをベースとした
ゲーム特化型の統合開発環境。.NET Framework及びDirectXをベースとしたライブラリ
「XNA Framework」を使用し、基本的には設定ひとつでXbox360及びWindowsへの両対応が
可能となる。

XNAについては、RPGツクールが次期バージョンでの対応を表明しており、日本での
普及にも期待がかかる。また、教育機関による学習教材としての採用も増加しており、
月刊ベーシックマガジンの休刊以降問題視されていた日本人ゲーム開発者の急激な
減少に歯止めをかける期待も持たれている。

URLリンク(news4xbox.blogspot.com)

315:デフォルトの名無しさん
08/07/23 19:00:00
XNAとC#関連のスレみてると何回もこれ読まされるんだが

316:デフォルトの名無しさん
08/07/23 19:01:42
そういう気分の時は「コピペ君て馬鹿だな、まで読んだ」と書くんだ

317:デフォルトの名無しさん
08/07/23 19:41:15
「コピペ君て馬鹿だな、まで読んだ」
ってことはさ、そのコピペの中に「コピペ君て馬鹿だな」って文言が含まれているって事だよね?
だとしたらそこそこまともな事言ってるって事になっちゃうよ。

318:デフォルトの名無しさん
08/07/23 20:02:51
>>315
巡回してるとこ見てきたら、6箇所で貼ってあった・・
コピペ君て馬鹿だな

319:デフォルトの名無しさん
08/07/23 21:38:55
どうせ数独とかマインスイーパーみたいなのが氾濫して
おわるんじゃねーの

320:デフォルトの名無しさん
08/07/23 22:58:03
ボンバーマンの超ぱちもんなら既にある

321:デフォルトの名無しさん
08/07/23 23:09:13
1時間もあれば作れるようなくそげーが氾濫することは目に見えてるけど
URLリンク(www.nicovideo.jp) を見る限り期待できるかも

X  期待できるかも
O  期待したい


322:デフォルトの名無しさん
08/07/24 01:05:08
文章の最後に「コピペ君て馬鹿だな」って書いておくと、
「コピペ君て馬鹿だな、まで読んだ」ってレスされても
即座に「最後まで読んだんかい!!」ってレスできる。
これ豆知識な。

コピペ君て馬鹿だな



323:デフォルトの名無しさん
08/07/24 01:16:40
僕は馬鹿なコピペ君です、まで読んだ。

324:デフォルトの名無しさん
08/07/24 01:20:46
>>323
なんということでしょう・・・orz

325:デフォルトの名無しさん
08/07/24 15:35:07
swichとforとifの組み合わせって速度にどれくらい差があるんでしょうか?

326:デフォルトの名無しさん
08/07/24 15:36:56
調べてみたら?

327:デフォルトの名無しさん
08/07/24 15:54:20
switch と if に for が絡むのがわからん


328:デフォルトの名無しさん
08/07/24 16:06:37
複数のコンポーネントがある時に、
label[i]みたいにインデクサを使いたいんですが、
コンパイラにlabelなんてねーよバーヤヽ(`Д´)ノ

って言われてしまいます。
やっぱり一行づつ書いていくしかないのですか?

329:デフォルトの名無しさん
08/07/24 16:08:15
もうちょっと具体例を

330:デフォルトの名無しさん
08/07/24 16:10:37
>>328
自分でコレクションに入れろよ。

331:デフォルトの名無しさん
08/07/24 16:31:29
>>329-330
しょうがないからLabel配列型の変数にいれてやりました。
コンパイラが面倒みてくれたらいいのに・・・

332:デフォルトの名無しさん
08/07/24 16:40:28
そんなキモいことされてたまるか

333:デフォルトの名無しさん
08/07/24 16:56:37
どう考えてもコンパイラじゃなくて、せいぜいライブラリのありがた迷惑だろ。

334:デフォルトの名無しさん
08/07/24 17:27:25
MenuItems.Addでメニュー項目を追加するときにイベントハンドラを指定しますが、
項目の数だけメソッドを用意するのが個人的に好きじゃありません。
各項目に共通のイベントハンドラを指定し、
その中でどの項目が選択されたのかを確認したいのですが、
このようなことは可能でしょうか。

335:デフォルトの名無しさん
08/07/24 17:28:10
sender

336:デフォルトの名無しさん
08/07/24 17:33:09
public void menuItem_Click(object sender, EventArgs e)
{
if (object.ReferenceEquals(sender, menuItem1))
{ ... }
else if (object.ReferenceEquals(sender, menuItem2))
{ ... }
}



337:デフォルトの名無しさん
08/07/24 17:50:18
>>335
>>336
サンクス!

338:デフォルトの名無しさん
08/07/24 18:04:23
Tag使えよ

339:デフォルトの名無しさん
08/07/24 18:10:25
うむ

340:デフォルトの名無しさん
08/07/25 01:38:05
プログラミングの初心者で恐縮ですが、質問です。

オセロゲームを練習として作ってみたいと考えています。
そこで、Panelを継承したクラスを作ってOseroPanelという名前にしました。

このOseroPanelを
this.Controls.Add(p);
とフォームに貼り付けました。

次にパネル側の描画処理を書きました。
一つはOnPaintをオーバーライドして描画しました。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawLine(new Pen(Color.Red), 10, 100, 200, 100);
}
こちらはうまく動いています。



341:デフォルトの名無しさん
08/07/25 01:39:03
もう一つはイベントを使ってみたのですが、問題が発生しました。
VSを使って、イベントを自動作成し、
private void InitializeComponent()
{
this.SuspendLayout();
//
// OseroPanel
//
this.Paint += new System.Windows.Forms.PaintEventHandler(this.OseroPanel_Paint);
this.ResumeLayout(false);

}

private void OseroPanel_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(Color.Blue), 100, 10, 100, 200);
}
というコードを書きました。
どうやら
OseroPanel_Paint()メソッドが呼ばれていないようです。

原因がわかる人がいましたら教えてもらえるとありがたいです。


342:デフォルトの名無しさん
08/07/25 01:51:20
this.Paint += new System.Windows.Forms.PaintEventHandler(this.OseroPanel_Paint);

this.OseroPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.OseroPanel_Paint);

343:デフォルトの名無しさん
08/07/25 09:40:22
>>342
OseroPanelクラスのなかでやっているので
thisはOseroPanelを指しています。

344:デフォルトの名無しさん
08/07/25 11:09:12
×Osero
○Othello

345:デフォルトの名無しさん
08/07/25 11:18:37
取りあえずその記述だけでは原因不明なので
まずデバッガでInitializeComponent通ってるかどうかから確認

346:デフォルトの名無しさん
08/07/25 14:13:04
オセロは(TM)だから注意ね

347:デフォルトの名無しさん
08/07/25 14:16:22
TMならセーフじゃん

348:デフォルトの名無しさん
08/07/25 14:43:35
暑さでボケてたw
(R) だよ

349:デフォルトの名無しさん
08/07/25 15:43:20
>>345
orz
まさにそれでした。
InitializeComponent()の呼び出しは自分で書かないといけないんですね。

Oseroクラスのコンストラクタに書いてみたところ、
すべてうまくいきました。

どうもありでしたm(_ _)m

350:デフォルトの名無しさん
08/07/25 16:30:44
フォームアプリのForm1とかのように使い捨てのクラスはともかく、
継承クラスではイベントハンドラではなくOn~メソッドのオーバーライドが推奨のはず

探したけどソースが見つからんorz

>>346-348
オセロ(玩具)とソフトウェアじゃあ区分が違うんじゃないか?

351:デフォルトの名無しさん
08/07/25 17:48:32
>>350
たしかにOnPaintをオーバーライドした方が、
コードがすっきりしますね。

352:デフォルトの名無しさん
08/07/25 17:57:31
>>340-351
ふらっと行け

353:デフォルトの名無しさん
08/07/25 18:42:36
一様乱数を生成する関数のソースについて質問があります。y=1/sqrt(2)*exp(-1/2*x*x)の計算で
In function `GaussRandom':: undefined reference to 'sqrt’と In function `GaussRandom':
: undefined reference to `exp'
というエラーがでて実行できません。もちろん<math.h>は定義しました。
レポート課題なのでマジで困ってます。是非教えてください。ソースを下に載せておきます。
ちなみにxが一様乱数で、yが正規乱数です。

double GaussRandom()
{
double x;
double y;

x=UniformRandom();
y=1/sqrt(2)*exp(-1/2*x*x);
return y;
}

double UniformRandom()
{
double x;
int r=1;

r=1229*r+351750;
x=r/1664501;

return x;
}


354:デフォルトの名無しさん
08/07/25 18:44:02
>>353
スレタイをよめ

355:デフォルトの名無しさん
08/07/25 18:57:48
>>353
>In function `GaussRandom':: undefined reference to 'sqrt’と In function `GaussRandom':
>: undefined reference to `exp'
翻訳するとだな
「型または名前空間名 'sqrt' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
型または名前空間名 'exp' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」
だな。何に翻訳したかは秘密だ。
さらに言うとusing System.Math;が足りないなw

356:デフォルトの名無しさん
08/07/25 18:59:27
>>354 すいません。

357:デフォルトの名無しさん
08/07/25 19:09:17
>>353
マルチすんなゴミ

358:デフォルトの名無しさん
08/07/25 19:12:00
ReflectorでSystem.Randomクラスのコードをパクる奴とかいそうだな

359:デフォルトの名無しさん
08/07/25 19:23:59
>>355 ありがとうございます。

>>357 期限が迫ってたので色んな場所で聞こうと思っただけです。気を悪くしてすいません。

360:デフォルトの名無しさん
08/07/25 19:32:50
ほんとにKYですね^^
死んでください

361:デフォルトの名無しさん
08/07/25 19:35:51
気を悪くしてすいませんだと?
気を悪くしたのはこっちだ!クソが!

362:デフォルトの名無しさん
08/07/25 20:43:39
期限が迫ってたので色んな場所で聞こうと思っただけです

363:デフォルトの名無しさん
08/07/25 20:47:26
こういうゴミに教えてあげるような偽善者も死ねよ

364:デフォルトの名無しさん
08/07/25 21:43:47
自己中乙

365:デフォルトの名無しさん
08/07/25 22:26:13
レポートの最後に「参考:2ch プログラム板」って書いておけよ

366:デフォルトの名無しさん
08/07/25 22:36:26
>>361 気を悪くさせての間違いです^^

>>365 課題落とされるかもしれないので書けません 教えてくれた人ありがとうございました^^

367:デフォルトの名無しさん
08/07/25 22:36:57
今プログラミングスレがいっぱい上がってるがどゆこと?

368:デフォルトの名無しさん
08/07/25 22:45:14
>>367
なに言ってんだお前

369:デフォルトの名無しさん
08/07/25 22:46:18
しまった板違いwwwAA板じゃねえwwwww

370:デフォルトの名無しさん
08/07/25 23:00:15
>>369
斬新な板違いだなおい
しかもよりによってスレタイに[プログラム板]って付いてるこのスレで

371:デフォルトの名無しさん
08/07/26 01:30:27
なんでこんな荒れてんの?

372:デフォルトの名無しさん
08/07/26 01:35:00
荒れてないよ

373:デフォルトの名無しさん
08/07/26 12:06:15
突然すみません。
C/C++のように構造体配列の定数データを持ちたいんですが、
C#ではどうすればよいのでしょう?


374:デフォルトの名無しさん
08/07/26 12:21:19
無理

375:デフォルトの名無しさん
08/07/26 12:23:06
static readonlyな配列で良いんじゃね

376:デフォルトの名無しさん
08/07/26 12:30:22
static readonly な ReadOnlyCollection<T>

377:デフォルトの名無しさん
08/07/26 17:04:31
GDI+でICONへは変換不可ですか?

378:デフォルトの名無しさん
08/07/26 17:27:39
>>377
可能
Dim bmp As New Bitmap("hoge.bmp")
Dim ico As Icon = Icon.FromHandle(Bitmap.GetHicon())
Dim fs As New FileStream("hoge.ico", FileMode.Create)
ico.save(fs)
fs.Close()
ico.Dispose()
bmp.Dispose()

379:デフォルトの名無しさん
08/07/26 17:40:09
ども、やってみます!

380:デフォルトの名無しさん
08/07/26 18:15:04
ただし制限きついけどなー

381:デフォルトの名無しさん
08/07/26 19:11:37
>>378
意味不明な質問には「日本語で書け」と叱責してやるのが本人のためだと思うけど。
ああちゃんと嫌味の意味でVBで答えてるわけかw

382:デフォルトの名無しさん
08/07/26 19:33:38
>>381
そういうことwww
お前は、エスパーかw

383:デフォルトの名無しさん
08/07/26 22:03:26
Using使えよって思った。

384:デフォルトの名無しさん
08/07/26 22:04:52
キモすぎ

385:デフォルトの名無しさん
08/07/26 22:12:36
>>381
意味不明な質問には「日本語でおk」だろ?

386:デフォルトの名無しさん
08/07/26 22:15:29
意味不明な質問にわざわざ絡む奴ってなんなの?
いじめられっこ?

387:デフォルトの名無しさん
08/07/26 22:19:19
>>382
自作自演乙

388:デフォルトの名無しさん
08/07/27 04:59:50
>>381
二行目で気づいたならその時点で書き直せよ気持ち悪い

389:デフォルトの名無しさん
08/07/27 15:52:58
GraphicsクラスのDrawImageメソッドで
画像の表示位置や高さ幅は通常intで指定すると思います。

ところが、実はfloatで指定する方法も用意されています。
public void DrawImage(
Image image,
float x,
float y,
float width,
float height
)

floatで指定すると何かよいことがあるのでしょうか?
基本的には四捨五入でintに繰り上げていると思うのですが、
そのような理解で正しいでしょうか?

390:デフォルトの名無しさん
08/07/27 16:07:44
>>389
WMFとかベクター画用じゃね?

391:デフォルトの名無しさん
08/07/27 16:10:09
Graphicsの描画単位はPixelだけじゃないぜ?

392:デフォルトの名無しさん
08/07/27 16:14:24
DirectXで使うためでしょ

393:デフォルトの名無しさん
08/07/27 16:15:14
ピクセル単位が整数だとしても
縮小拡大の原点が0,0で固定されないで
指定点から始まると困ることが多数あるのです。

394:デフォルトの名無しさん
08/07/27 16:47:49
いやそういうことじゃないでしょw
>>391が言ってることが全てだよ。

よく言われることだが、そもそもピクセルなんていうのは
デバイス側の勝手な都合に過ぎん。

395:デフォルトの名無しさん
08/07/27 17:48:10
VB6時代にもTwipsとかあったな。
GraphicsUnit列挙体がGDI+で扱える単位すべてじゃね?

396:デフォルトの名無しさん
08/07/27 18:50:20
画像表示するアプリ作ったときWin32APIのStretchBlt使ってたら
スクロールの更新部分だけ描画させるたら非更新部分と結果がずれて困ったことあったな。
無効領域だけしか処理しないから全体を更新すればいいんだけど
大きい比率で拡大したときに表示してくれないから結局自前で処理するしかなかった。
GDI+が出たときに少数単位で渡したらずれなかった。

397:デフォルトの名無しさん
08/07/27 19:01:47
画像を反転させるには
RotateFlip(RotateFlipType.Rotate180FlipXY);
というメソッドを使えばいいことがわかりました。

画像Aと反転後の画像Bを作りたいのですが、
Cloneメソッドを使うと両方反転してしまいます。
Imageオブジェクトをコピーする良い方法はありますか?

398:デフォルトの名無しさん
08/07/27 19:09:50
RotateFlipしたあとにCloneしてるってオチじゃないだろうな

399:デフォルトの名無しさん
08/07/27 22:51:02
ものすごくヘビーな処理をしています
計算途中でスリープやサスペンドに入られるとちょっと困るので、計算中は一時防止したいのですが
何か良い方法はないでしょうか?

400:デフォルトの名無しさん
08/07/27 22:56:56
何か処理してれば普通サスペンドしないだろ

401:デフォルトの名無しさん
08/07/27 23:01:32
いや、寝る前に仕掛けて朝起きたらサスペンドしていてちっとも処理が進んでなかったです。

402:デフォルトの名無しさん
08/07/27 23:18:35
>>399
処理と重力定数は関係ない・・・

403:デフォルトの名無しさん
08/07/27 23:21:21
電源の設定でサスペンドしないように出来ない?

404:デフォルトの名無しさん
08/07/27 23:44:05
>>399
WM_POWERBROADCASTのPBT_APMQUERYSUSPENDの応答でサスペンド入りを拒否できるらしい。

405:397
08/07/28 02:27:50
>>398
違うようです。
シャローコピーのようで、
Imageクラスの中ではイメージ実態への参照(ポインタ)
を持っているようです。
一方、回転するのはイメージ自体です。

406:397
08/07/28 02:48:15
大ボケかましました。
RotateFlip(RotateFlipType.Rotate180FlipXY);
だと画像が回転せず
正しくは
RotateFlip(RotateFlipType.Rotate180FlipNone);
でした。
頭悪すぎてすみません。
暑さでやられましたorz

407:デフォルトの名無しさん
08/07/28 11:10:24
rubyにおけるmechanize的なクラスとか無いんですか?

408:デフォルトの名無しさん
08/07/28 11:40:56
よほど自明でない限りrubyのmechanizeを説明するのが先だろ

409:デフォルトの名無しさん
08/07/28 12:05:25
C#にはスクレイピング用の定番ライブラリはないんじゃないかな。

410:デフォルトの名無しさん
08/07/28 12:15:43
逆行列、最小二乗法のフリーのライブラリないでしょうか?

411:デフォルトの名無しさん
08/07/28 12:31:34
ライブラリっつーか、ソース探してきては

412:デフォルトの名無しさん
08/07/28 19:17:38
CLapackなんかの必要な関数だけC++/CLIでラップして使うのが楽

413:デフォルトの名無しさん
08/07/28 19:41:02
string に格納されたデータが整数に変換可能な形なら int に
浮動小数点形式なら float に変換する方法教えてください。

414:デフォルトの名無しさん
08/07/28 19:44:33
TryParse

415:デフォルトの名無しさん
08/07/28 19:44:49
TryParse

416:デフォルトの名無しさん
08/07/28 20:24:51
プロパティというのは、クラスのフィールドを外部に公開する時に、柔軟性や冗長性を持たせるために、
必要ならば何らかのラップ処理を行うためのものだと、今まで思っていました。

つまり、プロパティは必ずpublicなものしか存在しないのかと。

ところが、最近、外人さんのソースを読んでいると、すべてのフィールドに対してプロパティを用意して、
クラス内部のアクセスに対しても、privateのプロパティを経由して行っているプロジェクトが多いです。

個人的には、フィールドは小文字で、publicなプロパティは大文字の命名規則(Pascal)だったのですが、
外人さんの流れでは、privateなプロパティもPascal記法になっていて、
クラス内部のすべての操作が大文字から始まるメンバを操作しています。

皆さんはどうされてます?もしかして、外人さん流儀の方が主流なんでしょうか?
C#以外の言語も含めて、そっちの方が主流になるんでしょうかねぇ。
個人的には、ローカルなnullチェックなどはプロパティの中ではなく、メソッドの中で操作する前に
行うほうが行儀が良いんじゃないかと思ったりもするのですが‥‥。

417:デフォルトの名無しさん
08/07/28 20:42:03
>>416
質問の意図がクリアーじゃない気がするよ。
も一度他人の目線で自分の文章読みなおしてみ?

418:デフォルトの名無しさん
08/07/28 20:53:45
>>417
単に話題提起してるだけなので、こんなもんじゃないでしょうか。解析的に解ける問題でも無いし。
興味を持たない人には、一生縁のない内容でもあると言えるし。
おそらく、LL言語的にはプロパティはあって当然の記述なので、おそらく外人さんが正しいのでしょうが。

419:デフォルトの名無しさん
08/07/28 21:36:43
サンプル見ると、MS 自身も private なプロパティ使ってるね。

クラス内部であっても、プロパティの実装変えたときのこと想定しとけよってことだと思う。

420:デフォルトの名無しさん
08/07/28 21:41:28
>>418
だから何を問題提起してるのか読み取れない、と言ってるんだよ。
質問内容にケチをつけているのではない。
ナニが言いたいのか分からないといってるの。

421:デフォルトの名無しさん
08/07/28 21:44:35
>>416
Delphi(Win32,.netじゃないやつ)のVCLをみると
private/protectedのレベルではpropertyは使われてない。
(protectedまで使ってるものもあるがTCustom~と直接使わないクラス。ここから継承してほかのコンポネを作る)
でも内部ではプロパティを使ってアクセスしてる。(Get/SetとCreateをのぞく)


422:デフォルトの名無しさん
08/07/28 21:47:38
外人さんの手法はクラスが大きくなると有効じゃね


423:デフォルトの名無しさん
08/07/28 21:52:49
>>420 読解能力がないか、話に興味が持てないならスルーすればいいんじゃね?

話からずれるが
C#じゃ配列のプロパティはインデクサとして1つしか使えないと思ってたけど
配列型をプロパティの型にしてしまえば一応いくらでも使えるのだな。今初めて気がついた
public Boolean[] Hoge { get;set;}

でも、配列としてデータを持ってるんでなくてその場で計算して値を出したり入れたりしてたり、
内部では別の型のデータとして扱ってて、便利のためにほかの型でのアクセスさせるためにほかの配列使ったりってことはどうやったらいいの?
int[,] でかると = int[100,100];
public int 極座標[int R,double Rad] { (ry とか
しかもこういうのがほかの変数にも必要だったりする場合にはどうやって対処すればいいの?


424:デフォルトの名無しさん
08/07/28 21:57:52
メソッドを使いなさい

425:デフォルトの名無しさん
08/07/28 22:00:32
>>423
妄想力と読解力は違うよ。
ま、区別がつかない人間に縷々説明して分かることとは思わないけど。

426:デフォルトの名無しさん
08/07/28 22:06:20
>>423
VBからだと引数付きのプロパティは作れるのだけどこれをC#から使う場合がヒントになるかな。
Public Property NameProp(ByVal index As Integer) As String
    Get
        Return array(index)
    End Get
    Set (ByVal Value As String)
        array(index) = Value
End Set
// C#から使う
o.set_NameProp(1, "nnnnn");
o.get_NameProp(1);



変なのが沸いてるけど無視していこう。


427:デフォルトの名無しさん
08/07/28 22:20:48
そこまでして[]を使いたい意味がわからん

428:デフォルトの名無しさん
08/07/28 22:21:12
だから言わんこっちゃない。

説明能力がない奴がろくに推敲もせずに書いた文章を
エスパーしてやることが親切だと勘違いしている馬鹿が多くて困るが、
意味不明な文章(例えば>>423)にははっきり「意味不明だ」と言ってやるのが
結局は一番親切な事だとなぜ分からないのだろう。

429:デフォルトの名無しさん
08/07/28 22:35:17
インデクサほとんど使わないんだよなぁ

430:デフォルトの名無しさん
08/07/28 22:54:54
だから423はスルーしたのか


431:デフォルトの名無しさん
08/07/28 22:56:45
>>423
配列を返すプロパティは実装変えられなくなるからダメ

432:デフォルトの名無しさん
08/07/28 22:59:12
インデクサと GetEnumerator を持つコレクションクラスを返すプロパティを作るの推奨。

433:デフォルトの名無しさん
08/07/28 23:00:51
晒しage

434:デフォルトの名無しさん
08/07/28 23:04:13
配列使うってまだ.netに慣れてない人に多い気がする。

435:423==421 (IDが出ない板は面倒くさい)
08/07/28 23:16:40
>>431
確かにそうだけど
ListBoxはObjectCollection返してるけど、こうするとどう変わってくるの?
暇なときに調べるか…

436:デフォルトの名無しさん
08/07/28 23:18:19
ここっていつも空気悪いよね

437:デフォルトの名無しさん
08/07/28 23:23:41
そりゃいつも低脳がでしゃばるからな

438:デフォルトの名無しさん
08/07/28 23:30:24
>>435
挙動変えたいときに、ObjectCollection継承したクラス作って
インデクサとかGetEnumeratorをoverrideしてしまえば
利用側に迷惑かけずに挙動変えれるでしょ。

439:デフォルトの名無しさん
08/07/28 23:32:48
IList<>かICollection<>でいいだろ。

440:デフォルトの名無しさん
08/07/28 23:43:33
IEnumerator<>という手も

441:デフォルトの名無しさん
08/07/29 00:02:38
>>439-440
多分、今作るならそういう実装になってると思う。

442:デフォルトの名無しさん
08/07/29 00:29:07
>>441
ちゃんと理解できてない&元使用言語によっては配列使いまくりになるよ。
VB厨が使うVB.netなんていい例

443:デフォルトの名無しさん
08/07/29 00:43:42
ちゃんと理解できてない?
それはたぶんお前さんのことでもあるんじゃないの?
別に配列を返すプロパティやメソッドが一義的に悪いとも思えないけどね。

もちろん配列を返した場合の弊害を知らないのは愚かだと思うが、
村の掟でもあるまいし、無条件に否定するのも同様に愚かだろう。

444:デフォルトの名無しさん
08/07/29 00:53:05
配列を返すプロパティがガイドライン違反であることには留意すべきじゃないか

445:デフォルトの名無しさん
08/07/29 02:42:46
>>443
まぁ、探してみてみろよ、わかるから。
お前の想定レベルみたいな生半可なもんじゃねーぞ、VB厨は・・・
そのうち.netの仕事が増えれば嫌でも見る事になると思うよ。

446:デフォルトの名無しさん
08/07/29 07:06:09
もし配列を返すことが目的ならばindexerを使うのはおかしい。
逆にindexer代わりに配列を使うのも変だな。
配列だけでなく変更可能なクラスをプロパティにするならある種の副作用は覚悟しなければならない。
getで予防的コピー、setで妥当性の検査や値のコピーといった措置は必要になるだろう。


447:デフォルトの名無しさん
08/07/29 07:42:27
メンバのコレクションの中身だけを渡したいときは配列使うようにしてるかも。
実測してないが早いと聞いたので。

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


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

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

451:デフォルトの名無しさん
08/07/29 11:05:59
ケースごとに分けて考えようぜ。

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

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

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


452:デフォルトの名無しさん
08/07/29 11:06:58
>>451
>>449はこれ 

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

453:デフォルトの名無しさん
08/07/29 12:27:22
今北産業

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

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


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

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

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

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

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

obj.Hoge[2] = 10;

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

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

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

460:デフォルトの名無しさん
08/07/29 14:43:39
インデクサだって・・・ダサッ

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

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

462:デフォルトの名無しさん
08/07/29 16:20:51
上手くいかないならどう上手くいかないのか書けよ

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

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

465:デフォルトの名無しさん
08/07/29 17:04:44
>>462
int ret;
float x;
float y;

ret = (int)(x-y)

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

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

466:デフォルトの名無しさん
08/07/29 17:07:15
>>465
x==y/x<y/otherwise
でいいだろ。

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

468:oth
08/07/29 17:27:22
otherWiseがコンパイル通りません

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

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

470:デフォルトの名無しさん
08/07/29 17:36:39
MSDNの解説ぐらい読めよ……

471:デフォルトの名無しさん
08/07/29 17:38:01
ふらっと池よクズ

472:デフォルトの名無しさん
08/07/29 17:39:50
>>469
スマートと行数が少ないは違うだろ。

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

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

474:デフォルトの名無しさん
08/07/29 17:44:57
>>473
馬鹿はすっこんでろ。

475:デフォルトの名無しさん
08/07/29 17:46:08
振り出しに戻る、だなw

476:デフォルトの名無しさん
08/07/29 17:47:20
>>469
MSDN読んでこいよ
バカ丸出し

477:デフォルトの名無しさん
08/07/29 17:52:12
return (x - y).CompareTo(0.0);

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

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

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

480:デフォルトの名無しさん
08/07/29 17:55:32
俺が正解書いてやったのにまだやってんの?

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

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

483:デフォルトの名無しさん
08/07/29 17:56:56
>>481
お前もそうだろww

484:デフォルトの名無しさん
08/07/29 17:59:00
>>483
お前もそうだろwww

485:デフォルトの名無しさん
08/07/29 17:59:32
>>484
お前もそうだろwwww

486:デフォルトの名無しさん
08/07/29 17:59:53
>>486
お前もそうだろwwwww

487:デフォルトの名無しさん
08/07/29 17:59:57
ふらっとのがまともだな

488:デフォルトの名無しさん
08/07/29 18:00:06
何がおもしろいのやら…
くだらない奴しかいなくなってしまったな…

489:デフォルトの名無しさん
08/07/29 18:00:40
>>490
お前もそうだろwwwww

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

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

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

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

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

ってことじゃないの?

493:デフォルトの名無しさん
08/07/29 18:04:50
ああ、荒れてしまってすいません

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

ありがとうございました

494:デフォルトの名無しさん
08/07/29 18:07:37
わざわざ引き算してるのは何で?

495:デフォルトの名無しさん
08/07/29 18:08:03
>>416からの流れほどは荒れなかったなw

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

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

497:デフォルトの名無しさん
08/07/29 18:15:26
>>496
正解に近いんじゃなくて正解だよ

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

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

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

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

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

503:デフォルトの名無しさん
08/07/29 18:35:21
>>496
自己紹介乙

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

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

506:デフォルトの名無しさん
08/07/29 19:06:06
>>505
ソースコード見てこいよ

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

508:デフォルトの名無しさん
08/07/29 22:05:31
個人的には

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

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

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

510:デフォルトの名無しさん
08/07/29 22:46:51
いいえ

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


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

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

514:デフォルトの名無しさん
08/07/29 23:39:50
Dictionary - ハッシュ
SortedDictionary - 赤黒木

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

515:デフォルトの名無しさん
08/07/29 23:39:50
Dictionary<,>はただのHashtableのラッパ。

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


517:デフォルトの名無しさん
08/07/29 23:42:57
>>515はデタラメ

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

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

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

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


521:デフォルトの名無しさん
08/07/30 03:07:07
@ITってそこらの入門書より使えると思う俺

522:デフォルトの名無しさん
08/07/30 18:46:12
>>517
ソース読めよ馬鹿

523:デフォルトの名無しさん
08/07/30 19:00:13
>>522
reflectorで確認した限りでは使ってないな。どのあたりで使ってるの?

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

525:デフォルトの名無しさん
08/07/30 20:05:13
URLリンク(www.itmedia.co.jp)
.NET大勝利ですか?

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

527:デフォルトの名無しさん
08/07/30 20:12:12
どうせ10年後くらいだろ

528:デフォルトの名無しさん
08/07/30 20:18:43
横浜市緑区?
めっちゃ近所なんだが

529:デフォルトの名無しさん
08/07/30 20:23:06
俺んとこの市にも緑町があるぜ、隣の市とかその向こうにも。

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

531:デフォルトの名無しさん
08/07/30 20:59:47
Singularity ベースってだけで 9 割方ネタだろとしか正直

532:デフォルトの名無しさん
08/07/30 21:54:51
>>522
ソース読めよゴミ

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

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

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

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

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


537:デフォルトの名無しさん
08/07/31 00:04:01
お前の意見なんて求めていない
消えろ

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

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

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

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

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

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

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

541:ノムヒョン
08/07/31 11:26:38
using System;
using System.Collections.Generic;
using System.Text;

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


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



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

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


544:ノムヒョン
08/07/31 11:30:09

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

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



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


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

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

547:ノムヒョン
08/07/31 11:40:38
<<546
ありがとうございます

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

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

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

550:デフォルトの名無しさん
08/07/31 13:44:34
>>545

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

551:デフォルトの名無しさん
08/07/31 13:46:32
>>549

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


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

553:デフォルトの名無しさん
08/07/31 18:26:49
デフォルトメーラーの起動で質問が有ります。

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

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

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

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

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

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

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

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


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

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

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

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



558:デフォルトの名無しさん
08/08/01 11:47:18
C#をベースにした言語って?

559:デフォルトの名無しさん
08/08/01 11:53:29


560:デフォルトの名無しさん
08/08/01 11:53:57
シーチンコ?

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

562:デフォルトの名無しさん
08/08/01 12:02:55
ふうやれやれ

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

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

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

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

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

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

567:デフォルトの名無しさん
08/08/01 13:34:35
>>564
そのツールって何?

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

569:デフォルトの名無しさん
08/08/01 13:50:08
>>564
ツール・・・ここらへんっすね。
URLリンク(www.accuratetechnologies.com)
URLリンク(www.necel.com)

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

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

571:デフォルトの名無しさん
08/08/01 14:08:01
DLLにしてしまうのがいいかもね

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


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

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

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

574:デフォルトの名無しさん
08/08/01 14:31:49
×namespace std;
○using namespace std;

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

ドラッグ中にウインドウの内容を - Google 検索
URLリンク(www.google.co.jp)ドラッグ中にウインドウの内容を&start=10&sa=N

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


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

577:デフォルトの名無しさん
08/08/01 15:10:13
>575
URLリンク(www.google.co.jp)

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

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

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

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

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

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


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

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

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

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

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

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

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

584:デフォルトの名無しさん
08/08/01 23:01:12
なんという蘭学事始。

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

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

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

588:デフォルトの名無しさん
08/08/02 00:03:34
お前は黙ってろ

589:デフォルトの名無しさん
08/08/02 00:05:26
お前がだまれ。

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

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



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

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

594:デフォルトの名無しさん
08/08/02 09:58:15
C、C++のincludeが遅いのはマクロのせいでしょう

595:デフォルトの名無しさん
08/08/02 10:01:48
C++の

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

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

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

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

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

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

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

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

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

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

602:デフォルトの名無しさん
08/08/02 11:35:10
VSのマクロでCSharpProjectConfigurationProperties3.DefineConstants触るとか

603:デフォルトの名無しさん
08/08/02 11:39:48
>>599
既出 >>593

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

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

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

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

606:デフォルトの名無しさん
08/08/02 11:55:40
設定ファイルを直にいじれよ

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

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

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

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

611:デフォルトの名無しさん
08/08/02 12:17:23
>>605
これのことでしょ
URLリンク(msdn.microsoft.com)

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

612:デフォルトの名無しさん
08/08/02 12:25:45
>>609
Dとかどうよ

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

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

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

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

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

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

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

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

617:デフォルトの名無しさん
08/08/02 14:51:54
黙ってスルーする能力もないのかよ

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

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

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

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


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


621:デフォルトの名無しさん
08/08/02 15:36:53
適当でいい

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

URLリンク(msdn.microsoft.com)

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


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

624:デフォルトの名無しさん
08/08/03 10:41:21
シングルトン

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

または

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


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch