ふらっとC#,C♯,C#(初心者用) Part32at TECH
ふらっとC#,C♯,C#(初心者用) Part32 - 暇つぶし2ch262:デフォルトの名無しさん
08/10/18 22:47:22
>>261
もともとハッシュというのはそういうものだから。
それでも>>254に書いたとおり、元のデータが違っていてもハッシュ値が一致する
確率が十分小さければ意味がある。

小学生でもわかる理屈だと思うけどなこれ。

263:デフォルトの名無しさん
08/10/18 22:50:34
>>259
ほとんどがガラッと変わってる前提で、変わってないものを抽出したいなら意味はあるかもしれないが、
Webの情報というと、文字列の一部だけが変わってる可能性もあると予想できる。

長さが変わってる可能性は高いだろうが、それは文字列のただの一致判定でも最初にチェックされるから、
わざわざハッシュでやる意味はない。

そういう簡単なハッシュの意味が出るとしたら、文字列の多くの場所が変わってる前提
かつ、数千件の文字列の多くが変わっている場合だろう。

おれはそんな前提とは思えなかった。


264:デフォルトの名無しさん
08/10/18 22:54:36
>>262
>それでも>>254に書いたとおり、元のデータが違っていてもハッシュ値が一致する
>確率が十分小さければ意味がある。

それには、>>263で書いたような前提が必要。
ガラッと変わっていない文字列でも一致の可能性を低くするには、
文字列の多くの場所を検査する必要があり、そうなるとただの一致検査に対する
パフォーマンスのメリットも小さくなる。
その上偶然一致する危険も無視できない。
無視できるほど小さくするには、文字列のずべてを使う必要がある。

まあ、ちょっとくらい違っても一致でいいやって思ってるなら、
そもそも話が合わないのでもういい。


265:デフォルトの名無しさん
08/10/18 22:57:59
>>264
だから無視できるほど小さくする必要なんてないんだってば。。
アバウトな言い方をすれば、一致する確率が両者の方法のパフォーマンスの比より
小さければ十分でしょ。

そしれそれがそんなに実現困難な目標とは思えん。

266:デフォルトの名無しさん
08/10/18 22:59:31
>>262
>>261
>もともとハッシュというのはそういうものだから。

それはハッシュテーブルなどで使う用途。
結局一致した場合は後できちんと一致比較する前提。
GetHashCodeなどの場合(といってもGetHashCodeも全文使って重いが)。

で、暗号的なハッシュは、現実的にそれが無視できるほど確率が低い。
もともと似た文字列で一致することがないように設計されているから。


267:デフォルトの名無しさん
08/10/18 23:07:23
>だから無視できるほど小さくする必要なんてないんだってば。。
>アバウトな言い方をすれば、一致する確率が両者の方法のパフォーマンスの比より
>小さければ十分でしょ。

それが意味があるのは、文字列の多くが変わってる可能性が高い場合。
その場合は、ハッシュが一致することが少ないので、変わってることを早く確認できる。
一致した場合のみ、全文確認すればいいから。

でも何度もそうは思えないって書いてる。
多くの文字列が変化してないなら、多くの場合ハッシュは一致するんだから、
多くの場合に全文の一致検査が必要になる。
つまりメリットは少ない。

つうかな、長さの比較レベルまでハッシュに含めたら、
もはやハッシュの話を別にする意味ないだろ。
それは単なる文字列の一致検査の実装のチューニングだ。
多分そういう感覚でいってるんだな?
なんとなく話題にしてるハッシュの前提が根本的に違うことは分かったわ。


268:デフォルトの名無しさん
08/10/18 23:12:56
初心者おいてきぼりのこの展開

269:デフォルトの名無しさん
08/10/18 23:19:44
あとな、全文一致検査でも頭から見て違った時点で検査は終わるんだから、
ガラッと変わってれ場合はかなり速い可能性が高い。
でもガラッと変わってなければ、簡単なハッシュじゃ一致する可能性が高い。
単なる長さ検査なら全文一致検査でも既にやってる。

やっぱりあんまり効果があるとは思えない。

270:デフォルトの名無しさん
08/10/18 23:27:26
おーい>>205生きてるか~?


271:デフォルトの名無しさん
08/10/18 23:37:07
ハッシュってのは衝突しないのが前提だぞ。
ハッシュが一致してたら一致、一致してなければ不一致とみなす。
そうじゃないと世の暗号や署名なんか成り立たないじゃないか。

んで、本題に戻ると、文字列比較なんかREPE CMPSBすりゃ一発だから、
単純比較のためにハッシュを利用する意味はない。IOを考慮するなら
確かに意味があるケースもあるような気はするが。

272:デフォルトの名無しさん
08/10/18 23:48:31
まあ、今の話は暗号ハッシュとそうじゃないハッシュ、さらに、不一致をざっと確認するハッシュもどきまで話に出てきてるからね。

まあさすがに長さ検査はハッシュとは呼ばんと思うが。


273:デフォルトの名無しさん
08/10/18 23:51:52
まあこのスレ的には
最低限の常識さえ踏まえていれば後は実際に問題になってから考えればいい

274:205
08/10/19 01:33:09
>>270
((((((;´・ω・))))))ガクガクブルブル

275:デフォルトの名無しさん
08/10/19 02:35:53
>>271
逆操作が難しいってのは暗号に使うハッシュ関数の特徴であるけれども、
それは衝突が起こらない/起こりにくいという意味ではない。

そもそも128bitとかそこらで、どれだけの長さの文字列が表現できると思ってるんだ。

276:デフォルトの名無しさん
08/10/19 02:51:10
Imageクラスに入っている画像から24bit/RGBそれぞれのbyte配列を得たいのですが、
GetPixelでは遅すぎて困ってます。

高速に処理するにはどうしたらいいのでしょうか?

// Image imgを
// byte[] r;
// byte[] g;
// byte[] b


277:デフォルトの名無しさん
08/10/19 02:53:37
ImageにGetPixelはねーだろ

278:デフォルトの名無しさん
08/10/19 03:04:14
>>275
長さ?


279:デフォルトの名無しさん
08/10/19 03:09:49
MSはなんでgetpixelみたいな誰が見ても糞なやつを実装したんだ?

280:デフォルトの名無しさん
08/10/19 03:11:55
>>278
128bitの空間でハッシュが衝突しないようにするには、
どれだけの長さまでの文字列を保持できるのか、って話なんじゃね。

281:デフォルトの名無しさん
08/10/19 03:27:09
長さは関係ないでしょ。

282:デフォルトの名無しさん
08/10/19 03:28:39
同じハッシュが生成される文字列がいくらあろうが(っていうか無限にあるわけだが)、
現実に衝突発生の「確率」が低ければよい。


283:デフォルトの名無しさん
08/10/19 03:31:14
>>275
一般に確率的にしか衝突を起こせない場合、
十分なビット数があればそれでいい。
そして普通はそれを、衝突が発生しにくい、という。
そして、暗号ハッシュは衝突が発生しにくいのが大前提、と表現する、普通は。


284:デフォルトの名無しさん
08/10/19 03:32:47
逆操作が難しいだけじゃ暗号ハッシュとして使い物にならない。


285:デフォルトの名無しさん
08/10/19 04:33:09
>>276
ちょうどいい記事があった。
URLリンク(www.atmarkit.co.jp)

286:デフォルトの名無しさん
08/10/19 06:19:51
コピー元の値(参照型)を変更すると、コピー先の値も変更されるようにするにはどうすればいいでしょうか。
具体的には、

class A
{
public string text;
public A(string text) { this.text = text; }
}

int main()
{
string text = "abc";
A a = new A(text);
text = "def";
Console.WriteLine(text);
Console.WriteLine(a.text);
}

で、最後の出力がどちらも def になるような動作にしたいのです。

287:デフォルトの名無しさん
08/10/19 06:23:20
C#にそのような機能はありません

288:デフォルトの名無しさん
08/10/19 06:45:23
なるほど、無理ですか。もう一度構造見直して考えてみます。
どうもでした!

289:デフォルトの名無しさん
08/10/19 09:43:51
>>276
>>285はなんでこんな変なことしてるんだろう
普通はBitmap.LockBitsを使う

290:デフォルトの名無しさん
08/10/19 09:51:18
まだ2003も出てない時期の記事だぜ?
色々定石とかできてなかったんだよ

291:デフォルトの名無しさん
08/10/19 10:55:20
>>276
「MemoNyanDum」
URLリンク(junki.lix.jp)
こちらのサイトのここを見るといい
「C#(GDI+) : Bitmap の内部色データにアクセスする (1)」
URLリンク(junki.lix.jp)

292:デフォルトの名無しさん
08/10/19 19:53:30
VS2005のエディタ上でスラッシュ(/)を3回連続で打ち込むと突然

/// <summary>
///
/// </summary>

に変換されるんですがこれなんですか?

293:デフォルトの名無しさん
08/10/19 19:55:29
XMLドキュメント

294:デフォルトの名無しさん
08/10/19 19:57:47
XMLの書式でしたか。
ちなみにスラッシュ2回じゃ何もおこらず、3回目で変換された理由は何でしょう?

295:デフォルトの名無しさん
08/10/19 20:02:55
2回で起こったらおちおちコメントも書いてられんわw

296:デフォルトの名無しさん
08/10/19 20:03:13
や、ヘルプで調べろよ

297:デフォルトの名無しさん
08/10/19 20:17:14
//の後ろにはコンパイルされないコメントが書けるとか書けないとか

298:デフォルトの名無しさん
08/10/19 20:18:38
ちょっと質問を。

構造体を返すメソッドを記述しているんだけどエラーが発生したときの処理に困ってる。
エラーを探知したら終了させるようにしたいんだけどコンパイルするときに
「構造体を返すメソッド書いてんだからエラーが発生したときもちゃんと構造体を返せ( ゚Д゚)ゴルァ!!」
って怒られちまった。

エラーが発生したときに返す構造体なんて全く想定していなかったわけだがこういうときって
何を返せばいいんだろうか?

ちなみに
return null;
じゃコンパイルは通らなかった。

299:デフォルトの名無しさん
08/10/19 20:22:56
そもそもクラスでなく構造体を使う意味がわからんけど、
空の構造体でも返せばいいんじゃね?

300:デフォルトの名無しさん
08/10/19 20:29:12
>>298
>「構造体を返すメソッド書いてんだからエラーが発生したときもちゃんと構造体を返せ( ゚Д゚)ゴルァ!!」
そんなこと言うわけないと思うが。

こんなスレで質問するご身分なんだから、コンパイラ様のお言葉を勝手に意訳せずに
「ありのまま」書くべきなんじゃないのか?


301:デフォルトの名無しさん
08/10/19 20:29:12
値を返せないような場合は例外投げるしかないんじゃね?
でTry...パターンを追加

302:デフォルトの名無しさん
08/10/19 20:29:40
>>299
複数個のデータを効率よく渡そうと思って構造体を使った。
クラス的な活用方法はしないから構造体で十分かなと。

> 空の構造体でも返せばいいんじゃね?

return new myStruct();

↑こういうこと?こんな方法使っていいのかな?

303:デフォルトの名無しさん
08/10/19 20:32:50
>>298

intを返すメソッドで何らかの例外的な場合には0や-1を返したりするだろ。
nullを返すか?
クラスじゃなくてあえて構造体を使うなら、初期状態の構造体を返すなり
構造体メンバにフラグやメッセージを含めてそれにわかるようなもんを入れて
返したりするのがいいんじゃね

304:デフォルトの名無しさん
08/10/19 20:34:58
ここはCスレかと

305:デフォルトの名無しさん
08/10/19 20:41:13
エラーが起きて値が返せないなら例外を投げればいいだけだと思うが。

306:デフォルトの名無しさん
08/10/19 20:41:43
>>302
同じ意味だけどreturn default(myStruct);の方が誤解を生まない

307:デフォルトの名無しさん
08/10/19 20:41:57
例外投げるかnullable使えよ

308:デフォルトの名無しさん
08/10/19 20:42:45
> 同じ意味だけどreturn default(myStruct);の方が誤解を生まない

こんな方法があったとは・・・
C#って奥が深いな・・・

309:デフォルトの名無しさん
08/10/19 20:42:52
Nullableは意味のあるnullに使うものだと思うんだけど

310:デフォルトの名無しさん
08/10/19 21:02:52
そうでもない

311:デフォルトの名無しさん
08/10/19 21:20:21
戻り値が必須のメソッド内でも

throw Exception()

すれば戻り値設定しなくてもコンパイル通るの?

312:デフォルトの名無しさん
08/10/19 21:21:24
やってみればいいんじゃね?

313:デフォルトの名無しさん
08/10/19 21:39:58
>>311
愚問だよ。
例外を投げるって意味が分かってる?

314:デフォルトの名無しさん
08/10/19 21:48:18
>>311
当たり前の事だが、正常処理の戻り値は設定する必要はあるぞ。
で、例外というのは、その正常処理を続行出来なくなった時に、
処理を強制終了させる仕組みだから。

315:デフォルトの名無しさん
08/10/19 22:51:55
>>311
new がないからコンパイルは通らんね。

316:デフォルトの名無しさん
08/10/19 23:18:23
System.Exception Exception(){ return new System.Exception(); }

317:デフォルトの名無しさん
08/10/19 23:22:06
次は文末のセミコロンが無いから……

318:デフォルトの名無しさん
08/10/20 00:32:22
C#にてDWM(WindowsVistaのAeroグラス)をウィンドウに適用する方法についての
詳細な方法や情報はありませんか?

ちょっと好奇心でやってみたらどうもうまく行かなくて突っかかっています

319:デフォルトの名無しさん
08/10/20 00:40:36
>>318
単純な例で良ければ。
URLリンク(msdn.microsoft.com)

320:デフォルトの名無しさん
08/10/20 00:41:01
> 同じ意味だけどreturn default(myStruct);の方が誤解を生まない

残念だが同じ意味ではない。
return default(myStruct);
の方がいいのは事実だが。


321:デフォルトの名無しさん
08/10/20 00:44:44
>>318
ごめん>>319じゃほとんどコード無かったから、代わりにこっちを。
URLリンク(www.danielmoth.com)

322:デフォルトの名無しさん
08/10/20 02:00:10
NPlotを使って散布図を描こうと考えています。
二次元配列で格納してあるデータをそれぞれX軸Y軸に対応させて
linePlot.AbscissaData = test[j,0];
linePlot.OrdinateData = test[j,1];
のように設定しfor文でjを変えてデータをどんどんグラフに点を加えさせていきたいのですが上手くいきません。
どのように設定すればよいのか、ご存知の方ご指導お願いします

323:デフォルトの名無しさん
08/10/20 02:03:17
STLでよく使うイテレータってC#でも使う?

324:デフォルトの名無しさん
08/10/20 04:38:46
>>322
それforで回したら上書きされて最後のデータしか残らないやん
AbscissaDataとOrdinateDataにはコレクション入れるんでないの?

325:デフォルトの名無しさん
08/10/20 06:22:22
graphicsメンバに1ドットだけ描画するメソッドが見あたらないのですが、
1ドットだけ描画するにはどうすればいいのでしょうか?
drawlineで 1,1,1,1 にしても何も表示されませんでした。

326:デフォルトの名無しさん
08/10/20 09:21:58
ドットなんて概念を排除してるからねー
FillRectangleで代用かな

327:デフォルトの名無しさん
08/10/20 11:41:14
STLみたいな柔軟な使い方はない。
基本的には前方読み取りのみだから。


328:デフォルトの名無しさん
08/10/20 12:29:36
C#を始めたばかりなので上手く質問が出来るのか分からないのですが

今、平均点を求めるクラスを作り
heikinten Asan = new heikinten();
でAさんの平均点を求めることが出来るようになりました

これをAさん固定ではなく
Bさん、Cさん、、、、Zさんなど
いろいろな名前が記載されてるname.txtから人数を数えて
その人数分だけそれぞれ平均点を求めたいと思っています
人数に応じて動的にheikintenクラスをオブジェクト化する方法は無い物でしょうか

こんな方法もあるぞみたいなのがありましたら教えていただけないでしょうか
よろしくお願いいたします




329:デフォルトの名無しさん
08/10/20 12:57:55
List<heikinten>
heikinten[]


330:デフォルトの名無しさん
08/10/20 13:01:08
>>328
人数を数える方法はいいのかな?
人数がわかればその分だけList<heikinten>に突っ込めばいいんじゃないかな?
List<heikinten> people = new List<heikinten>();
for (int i = 0; i < 5; i++)
  people.Add(new heikinten());

331:デフォルトの名無しさん
08/10/20 13:17:24
訂正:
for分のi<5は人数を入れてね

List<heikinten> people = new List<heikinten>();
for (int i = 0; i < 人数; i++)
  people.Add(new heikinten());


332:デフォルトの名無しさん
08/10/20 13:24:02
heikintenクラスに突っ込みたくてならないのだが
StudentクラスにAverageメソッド用意するのが普通だろうと

333:デフォルトの名無しさん
08/10/20 13:48:30
>>329->>332
思った通りのことが出来ました
ありがとうございます


人数を数える方法は 改行コードをカウントして行けばいいかなと思っていますので
ファイル操作周りを勉強してやって行こうと思います




334:デフォルトの名無しさん
08/10/20 14:02:59
計算した値を返すメソッドを実装しています。

中には計算が無意味なケースもあり、そういうときはNullableの変数を返して
大元の呼び出しもとでの処理に役立てようと思っています( .hasValueフィールドで
Nullableかどうか判別がつきます)。

そこで普通の変数と、Nullableの両方を返すメソッドを書くことにしました。

public Nullable<int> Method(int x)
{
   ・・・(処理)・・・
   if (計算が無意味なケース)
   {
       return Nullable<int> null;
   }
   return (計算結果);
}

↑のように実装したところ、return Nullable<int> null; のところでエラーが出てしまいました。
そこでこの部分を、

Nullable<int> i = null;
return i;

としたところ問題なく通ったのですが、Nullableを返すためだけにわざわざNullable型の変数iを
宣言してやる必要はあるのでしょうか?なにか無駄なことをやっているような気がしてならないのですが。

335:デフォルトの名無しさん
08/10/20 14:10:58
return null;
でいいんじゃないかな
return Nullable<int> null;はたとえばintの3を返すときに
return int 3;
とかやるようなもんだべ

336:デフォルトの名無しさん
08/10/20 14:27:15
>>335
> return null;
> でいいんじゃないかな

( ゚д゚)!

うわぁ・・(;´・ω・)、それで通っちゃいましたorz・・・

お騒がせしてすいません(´・ω・`)

337:デフォルトの名無しさん
08/10/20 15:38:22
>>334
余計なお世話かもしれんが、int.TryParseとかDictionary<T>.TryGetValueみたいに

Public bool Method(int value, out int result){
{
   ・・・(処理)・・・
   if (計算が無意味なケース)
   {
       return false;
   }
   result = (計算結果);
return true;
}

こうした方が良くないかね?

338:デフォルトの名無しさん
08/10/20 16:11:00
>>337
処理を明確化する意味でもNullableを使わずにbool値を使った方がいいでしょうか?

逆にNullableを活用すべき分野はどういったところでしょうか?

339:337
08/10/20 16:18:23
>>338
俺は使ったことないから分からんけど、たとえばPoint構造体を使って座標計算をするときに、
普通にPoint p = new Point(); とやるとX=0,Y=0の構造体ができちゃうけど、それをそのまま座標計算に
使われると困ってしまうような設計のクラスライブラリとかで、Nullable<Point>とかを使うとか。
あくまで想像だが。

処理を分岐させたいだけだったらやっぱり>>337の方法にすべきだと思う。

340:デフォルトの名無しさん
08/10/20 16:21:31
out を使うのは負けだと思ってる・・・

341:デフォルトの名無しさん
08/10/20 16:22:29
>>338
よく使われる例だけど
データベースなどでは、通常の(有効な)値と null(無効な値)を取る型が使われる為、Nullable型があると便利。

342:デフォルトの名無しさん
08/10/20 16:30:07
まとめますと

-データベースや行列のように大量のデータを一括して扱うときにNullable型を活用すると
 処理に一貫性が出て楽

-一つ一つの処理を確実に行いたいときは戻り値にbool型で計算の可否を判定、計算結果の値は
 参照型として渡す

というのが定石ということですね?

343:デフォルトの名無しさん
08/10/20 16:37:58
参照型じゃなくて参照渡しな

344:デフォルトの名無しさん
08/10/20 17:44:56
すいません質問です。
publicなフィールドと両方publicな自動プロパティ、具体的に動作が異なるのはどんな時でしょうか?

345:デフォルトの名無しさん
08/10/20 17:50:36
>>344
virtual とかできる。

346:デフォルトの名無しさん
08/10/20 17:57:05
数字を指定したスペースに表示させたいのですが、

Console.Write("{0,10}", num);

上記の例は数字numを10桁分のスペースに右詰めで表示させよ、という意味です。
この「10桁分」のところを変数にして、状況に応じて任意のスペースにさせたいのですが
プログラムはどう書けばよろしいでしょうか?

任意のスペースを表す変数を n とします。

おそらく
Console.Write("{0, n}", num);
とするとエラーが生じてしまうと思います。
他に方法はあるでしょうか?

347:デフォルトの名無しさん
08/10/20 18:08:43
string fmt = "{0," + n.ToString() + "}";
Console.WriteLine(fmt, num);

348:デフォルトの名無しさん
08/10/20 18:09:22
C#で画像ビューア作りながら勉強しているのですが、Google Picasaみたいな
画像一覧部分でのスムーススクロールってどうやるのでしょうか?

ListViewで画像一覧は出せたのですが、スムーススクロールもやってみたいのです。
画像に限らずスムーススクロールの仕組みを教えていただけるとありがたいです。

349:デフォルトの名無しさん
08/10/20 18:20:05
>>345
逆に言えばvirtualをつけなければ、同じなんですね。ありがとうございました。

350:デフォルトの名無しさん
08/10/20 18:26:56
>>347
どうもです

351:デフォルトの名無しさん
08/10/20 18:36:30
プロパティかフィールドかっつう最も大きい違いがあるがな

352:デフォルトの名無しさん
08/10/20 19:57:56
プロパティは参照渡しできないし値型のときはコピーが発生する
後でフィールドを何の問題もなくプロパティに変更することはできないから,
とりあえず何も考えずプロパティにしとけ

>>320
>>302の場合はまったく同じだよ
違いが出るのは対象がジェネリック型パラメータの場合のみ

353:デフォルトの名無しさん
08/10/20 20:01:16
private void Form1_FormClosing(object sender, EventArgs e)
{
//なぜか設定の保存が出来ない
Settings.Default.SettingFont = textBox1.Font;
}

private void Form1_Load(object sender, EventArgs e)
{
//なぜか設定の読み込みができない
textBox1.Font = Settings.Default.SettingFont;
}

SettingFontはSystem.Drawing.Font型です
エラー警告メッセージ出ません
両辺を逆にしても駄目でした
複雑なコードにしたくありません
処理の早さ等は考慮しません
よろしくおねがいします

354:デフォルトの名無しさん
08/10/20 20:05:03
>>353
Saveしてない、なんてオチではないだろうな

355:デフォルトの名無しさん
08/10/20 20:10:32
オレもまっ先に >>354 と同じ発想がうかんだのだが
それはあまりにも…w と思い書けなかった


356:デフォルトの名無しさん
08/10/20 20:18:13
こっちのページですか?
下の二つのイベントハンドラを有効にして
いま下の怪しいところにSave();を足してみました

private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
// SettingChangingEvent イベントを処理するコードをここに追加してください。
}

private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
Save();
// SettingsSaving イベントを処理するコードをここに追加してください。
}

これでもエラーでませんでしたが
保存できていません、もしくは読み込まれていませんでした
>>353のコードにも何か書くのですか?

357:デフォルトの名無しさん
08/10/20 20:19:30
>>355
勇気を持って全てをさらけ出してくれませんか?
わからないんです

358:デフォルトの名無しさん
08/10/20 20:26:28
Properties.Settings.Default.Save();
を書いてなけりゃSaveされんだろう?ってことだったんだけど。


359:デフォルトの名無しさん
08/10/20 20:39:09
>>358
private void Form1_FormClosing(object sender, EventArgs e)
{
//なぜか設定の保存が出来ない
//↑出来ました
Settings.Default.SettingFont = textBox1.Font;
//今、感動して涙が止まりません
Settings.Default.Save(); //Saveって本当に良いものですね
//ありがとうございました
}

360:デフォルトの名無しさん
08/10/20 21:03:33
ワロタ

361:デフォルトの名無しさん
08/10/20 22:17:35
>>321
レスありがとうございます。
DWMを利用するまでは自分でも何とか検索して出来たのですが、ボタン等のコントロール上の黒色が
透明化されてしまう、という問題があったので、それについて調べた所

URLリンク(piece.coron.jp)
こちらのサイトで、UseCompatibleTextRenderingをtrueに変更してやる方法、というのがあったのですが
どうも使い方が分かりません、Program.csにてApplication.SetCompatibleTextRenderingDefault(true);に
してみたのですが、全く状況が変わりません

自分のレベルではまだこのようなことをするのは早いのでしょうか?
DWMは情報が少なすぎて困っています・・・

362:デフォルトの名無しさん
08/10/20 22:21:42
>>361
UseCompatibleTextRenderingはButtonやLabelとかの一部のコントロールにプロパティとして存在する。

363:デフォルトの名無しさん
08/10/21 11:56:48
DataGridViewのColumnsプロパティのようなものを自作するにはどういう方法が一般的なのでしょうか?
やりたいことは、Columnsのようにプロパティ名[インデクサ]が実装したいのと
Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。

初めはColumnsクラスにイベントを作って親クラスに知らせる方法を考えたのですが、
その方法だと外からColumnsのイベント一覧が見えてしまいます。

そもそもそんなやり方は一般的ではないのでしょうか?宜しくお願いします。

364:デフォルトの名無しさん
08/10/21 12:06:59
普通にコレクション作ればいいじゃん
> Columns[i].Visible=false等で親クラスにプロパティ変更を知らせることです。
このVisibleの変更はDataGridViewColumn.Visibleの変更であってColumnsとは関係ない

まあ実際には大抵internalでDataGridView持ってたりするけどな

365:363
08/10/21 12:34:44
ありがとうございます
早速試してみたのですが、internalを指定しても外部から見えてしまうのですが…

[test1.cs]
public class Data
{
  internal Parent parent;
}

[test2.cs]
Data test=new Data();
test.parent=null; ←通ってしまう

internalって別ファイルからは参照できなくなると理解したつもりなのですが違うのでしょうか?

366:デフォルトの名無しさん
08/10/21 12:37:45
別アセンブリ。
exe/dll単位。

367:363
08/10/21 12:44:57
ありがとうございます。
すると同アセンブリ内では隠しようがないんですね。フレンドもないようですし…
となるとデータクラスのコンストラクタで親クラスを渡すしかなさそうに思えます。

ただ、データクラスのプロパティ変化時に親クラスのプライベートな処理を走らせることも難しそうですね^^;
DataGridであればColumnクラスのWidth等変更時にグリッドの表示幅が更新されたりしていますが
あれはどういったメカニズムなんでしょうか…

さらに言えば、コレクションクラスにはデフォルトでRemoveAtが実装されているようですが、
これでは外部から削除できてしまいます。外部から要素数の変更はさせたくない場合、
コレクションクラスの実装は向かないのでしょうか…

混乱してきた・・・・長々とすみませんm(_ _)m

368:デフォルトの名無しさん
08/10/21 12:50:59
> ただ、データクラスのプロパティ変化時に親クラスのプライベートな処理を走らせることも難しそうですね^^;
> DataGridであればColumnクラスのWidth等変更時にグリッドの表示幅が更新されたりしていますが
> あれはどういったメカニズムなんでしょうか…
別にevent使ってもいい。
DataGridViewColumn.Widthなら多分DataGridViewのinternalなメソッド呼び出してる。
いやまあ再描画だけならInvalidate呼び出すだけだけどな。

> さらに言えば、コレクションクラスにはデフォルトでRemoveAtが実装されているようですが、
> これでは外部から削除できてしまいます。外部から要素数の変更はさせたくない場合、
> コレクションクラスの実装は向かないのでしょうか…
やらせたくないなら例外投げればいいだけ。

369:デフォルトの名無しさん
08/10/21 13:09:38
なるほど、例外を投げるという手がありますね。参考になります。
イベントで実装もありかと思うのですが、何れにしろ同アセンブリ内なので
外部クラスからイベントの定義も出来てしまいますね。そこだけが問題です。

しかし実装自体は出来そうなので頑張ってみます。ありがとうございました!

370:デフォルトの名無しさん
08/10/21 13:57:37
0以上の整数しか使わないような変数に積極的にuintを使うのはいい方法でしょうか?
それとも整数は特殊な事情がない限りintで統一するべきですか?

371:デフォルトの名無しさん
08/10/21 14:22:31
符号なし整数はCLS非準拠なので他の言語で使えないかもよ、と
実際VB7では扱い面倒だったしな

private/internalならお好きに

372:デフォルトの名無しさん
08/10/21 15:00:49
2次元配列を作成し
ARRAY[*,0]に得点を入れて
ARRAY[*,0]の順番は変更しないで
ARRAY[*,1]に順位を作成したいと思いるのですがいい方法が浮かばないで困っています
皆さん何かいい方法は無いものでしょうか

373:デフォルトの名無しさん
08/10/21 15:01:27
>>371
> 符号なし整数はCLS非準拠なので他の言語で使えないかもよ、と

おお、そういう落とし穴があったとは・・・
int型に統一させていただきますm(_ _)m

374:デフォルトの名無しさん
08/10/21 15:03:30
>>372
心底意味が分からん。
具体的に値入れて説明してくれ。

375:デフォルトの名無しさん
08/10/21 15:13:44
Console.Writeline("hoge");

で白文字以外にカラフルな文字を表示させることってできませんか?

それが無理なら反転文字とか、アンダーライン文字とか、目立つ文字を表示できないでしょうか?
文書の一部分を強調表示したいんです。

376:デフォルトの名無しさん
08/10/21 15:18:49
>>374
分かりにくくて申し訳ないです
詳しく書くと

int[,] array = new int[8,2];
array[0,0]=100;
array[1,0]=10;
array[2,0]=80;
array[3,0]=20;
array[4,0]=90;
array[5,0]=40;
array[6,0]=60;
array[7,0]=30;
という得点が入ってるとして
得点によって順位を決めて隣の要素に入れて行きたいと思っています
array[0,1]には1
array[1,1]には8
array[2,1]には3
array[3,1]には7
array[4,1]には2
array[5,1]には5
array[6,1]には4
array[7,1]には6
といった感じに、、、、
まだ分かりにくいかもしれないのですが
何かいい方法無い物でしょうか


377:デフォルトの名無しさん
08/10/21 15:40:49
>>375
Console.ForegroundColor = ConsoleColor.Red; とかで切り替えればいいかも。

378:デフォルトの名無しさん
08/10/21 15:49:39
>>377
ありがとうございます、無事変えられました

379:デフォルトの名無しさん
08/10/21 16:09:19
>>376
static void setRank(int[,] array)
{
SortedList<int, int> sl = new SortedList<int, int>();

for(int i = 0; i < array.GetLength(0); i++)
{
sl.Add(array[i, 0], i);
}
int rank = 1;
foreach(var kvp in sl.Reverse())
{
array[kvp.Value, 1] = rank++;
}
}
こうかな、なんかもっとうまく書けそうで俺には書けなかった

380:デフォルトの名無しさん
08/10/21 17:20:37
>>379
こういうのって、「もっとエレガントにかけるかも」って思ってしまうよな…w

381:デフォルトの名無しさん
08/10/21 17:21:25
複数の計算結果を配列に格納する予定なんですが、あいにく得られる計算結果の順番と
配列の順番が逆だったりします。というわけで計算結果は配列の先頭からではなく最後尾から
先頭に向かって格納する必要があるわけですが、これを実現するには


a) とにかくもうひとつ仮の配列(同サイズ)をつくり、何も考えずに先頭から計算結果を
  詰め込む。全ての計算結果が出たところで本来の配列に後ろから値をコピーしていく。

b) 配列の要素数を表すstaticな変数を準備し、その変数を参考に配列に書き込む場所を特定する。
  配列に書き込むたびにそのstaticな変数を -1 することで保存すべき配列の位置を特定することができる。

c) 配列をNullable型として宣言し、書き込む位置はnullが格納されている最後尾と決めれば
  後ろからデータを格納することができる。

d) c)の亜種。配列を用意し、あり得ない数字(0とか-10000とか)で初期化する。
  あり得ない数字の最後尾からデータを格納していけば後ろからデータを詰めていったことになる。


ざっと考えて上記のa)~d)が思いついたんですがどの方法がいいでしょうか?
あるいは他に方法がありますか?

382:デフォルトの名無しさん
08/10/21 17:33:27
初めから要素数が分かってるならbで十分だし(ていうか何故static?)
そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

383:デフォルトの名無しさん
08/10/21 17:40:32
labelのTextが増えたとき、左に伸びていくようにするには
どうすればいいでしょうか?

例えば、
label1.AutoSize=true;
label1.TextAlign=TopRight;
for(int i = 0; i < 10; i++) label1.Text += "あ";
では右に伸びていってしまいました。

384:デフォルトの名無しさん
08/10/21 17:40:41
>>382
> 初めから要素数が分かってるならbで十分だし(ていうか何故static?)
> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

もしかしてReverseってList<>だけでなく普通の配列にも使えたりしません?
要素数は分かっているので何も考えず計算結果を配列に突っ込んだ後
最後にReverseかければa)~d)のようなややこしいことをするまでも無い気が・・・

385:デフォルトの名無しさん
08/10/21 17:44:23
もしかしなくても、.NET 3.5では配列はおろかIEnumerable<T>ならReverseが使える。

386:デフォルトの名無しさん
08/10/21 18:35:45
>>382
> そうでないならList<>に突っ込んでいって最後にReverseすればいいだろ

List<>型に対してReverseはどう使えばいいでしょうか?

List<int> a;

に対して

Array.Reverse(a);

としたらエラーが返されてしまったのですが。
ちなみに一般的な配列なら問題ありませんでした。

387:デフォルトの名無しさん
08/10/21 18:39:17
a.Reverse();

388:デフォルトの名無しさん
08/10/21 18:50:32
>>387
ありがとう( ´∀`)

389:デフォルトの名無しさん
08/10/21 19:36:09
メソッドに変数を渡して、そのメソッド内で変数を書き換えてかえしてもらうとき
値型なら問答無用でout/refを付ければいいとして、参照型の変数のときはどうすればいいでしょうか?

参照型なら別にout/refは付けなくてもメソッド先での変更はちゃんと反映されるかと思いますが・・・

390:デフォルトの名無しさん
08/10/21 19:42:15
どうしたいかによるとしか

391:デフォルトの名無しさん
08/10/21 19:45:00
例えば、参照型でもそれ自体を書き換えるなら必要。
void f(out object o)
{
o = new object();
}

392:デフォルトの名無しさん
08/10/21 19:56:44
newするかしないかで使い分ければいいということですね

393:デフォルトの名無しさん
08/10/21 20:23:58
使い分けというのは変だな
どうしても必要な場合以外は基本的に参照渡しは使わない,でいいと思う

394:デフォルトの名無しさん
08/10/22 00:04:42
>>379-380
一次元配列ならこれだけなんだがなぁ

var array = new[] { 100, 10, 80, 20, 90, 40, 60, 30 };
var indices = Enumerable.Range(0, array.Length).ToArray();
Array.Sort(array, indices);


てか、誰か指摘してやれよ
>>376の問題に多次元配列を使うこと自体が愚策だと

395:デフォルトの名無しさん
08/10/22 00:07:16
特別な事情があるか、どうせそのうち丸ごと捨ててやりなおすかと思ってさ

396:デフォルトの名無しさん
08/10/22 01:50:42
C++と違ってC#は構造体にもメソッドを定義できるようにされていると聞きますが、
わざわざクラスではなく構造体でメソッドを定義できるようにした意味は何でしょうか?

メソッドを書くならクラスにするよう統一しても良かったと思いますが・・・

397:デフォルトの名無しさん
08/10/22 01:58:07
わざわざメソッドが定義できるのをクラスに限定するメリットがわからん


398:デフォルトの名無しさん
08/10/22 02:09:36
それ以前にC++でもstructにメンバ関数書けるんだが。


399:デフォルトの名無しさん
08/10/22 02:26:02
C++の場合はデフォルトのアクセス制限がpublicかprivateかの違いしかない。
他は全部classとstructは一緒。

>>396はC#におけるクラスと構造体の違いを知りたいの?

400:デフォルトの名無しさん
08/10/22 03:17:06
C#では構造体とクラスはこれだけ近い存在にされてるのになぜあえて分けているのかが分からないんです。

401:デフォルトの名無しさん
08/10/22 05:02:37
話し聞いてないな。
C++においての違いはほぼ無い。
C#においての違いはそれよりある。

402:デフォルトの名無しさん
08/10/22 08:35:52
>>400
そもそも、C++の構造体にもメソッドが定義できるわけだが。

403:デフォルトの名無しさん
08/10/22 08:51:43
C++ は元々は C との互換性のために struct キーワード残しただけかと。
結局それが、慣例として使い分け方ができて、
C# では言語的にも値型と参照型で使い分けるように変化。

404:デフォルトの名無しさん
08/10/22 13:16:03
デフォルトのアクセス権がちがうだけだよね。あと、慣例ってのは重要なキーワードだな。

405:デフォルトの名無しさん
08/10/22 13:19:57
C++/CLIみたいにref classとvalue classにして
呼び方も参照クラスと値クラスにしたほうがわかりやすかったかもね

406:デフォルトの名無しさん
08/10/22 13:24:33
なんかC#の話じゃなさげなんだけど聞いてくれ。
デスクトップのアイコンにファイルをD&Dすると
開くアプリケーションとかあるでしょ?あれをやりたいんだけど
C# D&DとかでググるとアイコンへのD&Dじゃなく
開いてるウインドウへのD&Dばかりがみつかるのさ。

だれか解説してるサイトか、これぞ、みたいな検索ワード
教えてくれないかなーっと。

407:デフォルトの名無しさん
08/10/22 13:27:01
static void Main(string[] args) { Console.WriteLine(args[0]); }

408:デフォルトの名無しさん
08/10/22 13:34:08
>>407
うわーい。ただの引数になるのか。
確認しますた。おばかでスマソ。

409:デフォルトの名無しさん
08/10/22 14:04:42
string[]型配列に処理した結果を参照で返すメソッドを作っています。
返す結果の有無を判別させるためにbool型をreturnします。

private bool Hoge(out string[] Str)
{
  ・・・・(処理)・・・
  return true/false;
}

この際、Strに返す結果が無いとき(つまりfalseをreturnするとき)、コンパイラに
「out宣言したStrを空のまま返すな( ゚Д゚)ゴルァ!!」としかられてしまうんですが
こういうときはみなさんどうされますか?
falseを返すときでも適当な文字を入れてお茶をごまかすべきでしょうか?

410:デフォルトの名無しさん
08/10/22 14:09:22
TryParseパターンではnull(default(string[])のほうがいいかも)を入れるのが普通みたい

411:デフォルトの名無しさん
08/10/22 14:14:02
>>410
Str = null(default(string[]);
としたうえで return false; すればよろしいんですね?

412:デフォルトの名無しさん
08/10/22 14:14:34
配列を返値にして要素数0の配列を返す
要素数0に意味があるなら仕方ないのでnull返す

413:デフォルトの名無しさん
08/10/22 14:18:58
TryParseパターンがfalseを返す時は「初期化されていない」って意味だから使えない値を返すべき
str = default(string[]);だよ (str = null;と同じ意味)
値型かジェネリック型の場合は前者だけど参照型なら後者でいいと思う

414:デフォルトの名無しさん
08/10/22 14:24:33
みなさんどうもです。
まとめますと、

1.要素数を0の配列をつくりこれを返値にする : Str = new string[0]: return Str;

2.参照型だからnullを代入して返す : Str = null;

のどちらかということですね。

>>413
値型の場合は
default();
を採用すればいいと言うのは初耳でした。以前値型の変数にnullを代入して返そうとした
んですがコンパイラに蹴られてしまいました。代わりに default(「値型」); とすればいいとは
知りませんでした。結構有名な手法なんですか?

415:デフォルトの名無しさん
08/10/22 14:37:08
default(値型)はnew 値型()と同じなんだけど後者はなんか値に意味がありそうで嫌でしょ
defaultは本来はジェネリックのために導入された機能で,
default(T)は型パラメータTが参照型のときはnullを返し,Tが値型のときはnew T()を返す

416:デフォルトの名無しさん
08/10/22 14:50:39
なるほど、.Net2.0からの付加機能でしたか>ジェネリック

417:デフォルトの名無しさん
08/10/22 16:16:24
Control.BringToFront()が呼ばれたときに発生するイベントってないのかな?

418:デフォルトの名無しさん
08/10/22 16:58:44
WM_CHILDACTIVATE

419:デフォルトの名無しさん
08/10/22 17:08:08
>>418
Win32APIは出来るだけ使いたくないのでBringToFrontをオーバーライドすることにした。


420:デフォルトの名無しさん
08/10/22 17:12:55
や、WndProcのオーバーライド(またはNativeWindowでのメッセージフック)
だから純粋なマネージドコードだが。

421:デフォルトの名無しさん
08/10/22 18:13:39
"abc123" -> ok
"abc:12" -> ng
みたいにファイル名が有効か判断するメソッドってある?
なければ例外で処理すればいいんだけど

422:デフォルトの名無しさん
08/10/22 18:21:24
Path.GetInvalidFileNameChars とかあるけどドライブ指定できない時点で厳密ではないな
やはり基本は実際に作ること
:だってNTFS的にはパスとして有りなんだぜ .NETからは使えないけど

423:デフォルトの名無しさん
08/10/22 19:40:00
C#でできたソフトってどんなのがあるのでしょうか?
また、普通ソフトってどの言語で作られているものなのでしょうか?
(ここでいうソフトってのは、市販のソフトだったり、フリーソフトだったり。)

424:デフォルトの名無しさん
08/10/22 19:52:45
>>423
マジレスすると実行ファイル開いて
はじめの一行(#!~)に
perlってあればperl
shってあればシェルスクリプト
ruby(ry

Delphiで作ると Delphi臭がするのはなぜだろうw

425:デフォルトの名無しさん
08/10/22 21:50:02
同じクラス内に最後と引数の個数以外が全く同じメソッド1,2があるとします。

void Method1(int i)
{

・・・・・(うり二つ)・・・・・

・・・(ココだけ違う)・・・・
}

void Method2(int i, intj)
{

・・・・・(うり二つ)・・・・・

・・・(ココだけ違う)・・・・
}

最後の (ココだけ違う) と、引数の個数の違いだけですが律儀に2つのメソッドを記述する必要があるでしょうか?

426:デフォルトの名無しさん
08/10/22 21:55:22
private void うり二つ(int i) { うり二つ… }
void Method1(int i){
 うり二つ(i);
 ここだけ違う
}
void Method2(int i, int j){
 うり二つ(i);
・・・(ココだけ違う)・・・・
}

427:デフォルトの名無しさん
08/10/22 22:01:31
>>426
な、なるほど・・・

428:デフォルトの名無しさん
08/10/22 22:31:01
コンストラクタでよくあるパターンだよなw

429:デフォルトの名無しさん
08/10/22 23:26:08
> 値型の default(T), new T()
Point構造体とかだと明示的にEmpty返すことはあるな

>>421-422
確か、Path.GetFullPathかFileInfo使えという結論だったはず
パスの有効性をチェックする非公開メソッド(確かinternal)があって、
結局はそれが呼ばれるので、最も副作用が無いもの使うのが良いという話

>>423
> C#でできたソフト
VS, SSMS, etc.
SSMS(2005)はよく落ちる(.NET標準のエラーハンドラが出る)からすぐ分かるよ



430:デフォルトの名無しさん
08/10/22 23:55:51
参照型はnewしないと使えないって教えられたんですが
string型は参照型なのにnewしなくても使えるのはなんでですか?

431:デフォルトの名無しさん
08/10/22 23:57:31
C#とCLRに組み込まれてるから
簡単に言うと,特別だから

432:デフォルトの名無しさん
08/10/23 00:01:09
なるほど
ありがトン

433:デフォルトの名無しさん
08/10/23 00:06:41
そんなすっとこどっこいな回答で納得しちゃダメw
実際にはnew(インスタンスの生成)しなくても使えているわけではなく、
インスタンスの生成がラップされている、つまり間接的に生成してるだけ。

つまり、別に文字列以外のクラスでも同じように見かけ上newを隠蔽することはできる。

434:デフォルトの名無しさん
08/10/23 00:08:25
( ・∀・)つ〃∩ ヘェーヘェー

435:デフォルトの名無しさん
08/10/23 00:08:43
>>433
ちげーよ。文字列ってのはCIL上はプリミティブ型で、
それを巧妙にクラスに見せかけてあるだけ。

436:デフォルトの名無しさん
08/10/23 00:12:29
>>435
わけのわからん混同しすぎ。
System.Stringが様々な場面で特別扱いされるという事実と
>>430の話は直接関係がない。

437:デフォルトの名無しさん
08/10/23 00:14:36
string str = "Hello World";がなんでnewしなくていいのかという話なら
暗黙にnewされてるからというのは間違いで「特別扱いだから」としか答えようがない

438:デフォルトの名無しさん
08/10/23 00:16:38
String str = new String("Hello World");で統一すれば惑わされずにすむ


439:デフォルトの名無しさん
08/10/23 00:18:35
javaと違ってC#ではできないよそれ

440:デフォルトの名無しさん
08/10/23 00:19:37
new は実行時にヒープにオブジェクトを作ってそれへの参照を返す。
文字列リテラルの場合はコンパイルの段階でメタデータに格納しておき、
実行時にはその文字列への参照を返す。
こういった仕組みの相違が文法にも反映されている。

たぶん。

441:デフォルトの名無しさん
08/10/23 00:19:58
String str = new String("Hello World".ToCharArray());
うはは、無駄無駄無駄!

442:デフォルトの名無しさん
08/10/23 00:24:16
>>436
>>435>>430ではなく>>433へのレスに見えるんだが

443:デフォルトの名無しさん
08/10/23 00:25:32
>>440

違う
stringはCLIの組み込み型
string定数を読み込むIL命令があるの

444:デフォルトの名無しさん
08/10/23 00:25:53
変数sに代入したアルファベットをtextboxに出力するのってどうすればいいんですか?

445:デフォルトの名無しさん
08/10/23 00:28:46
>>443
> string定数を読み込むIL命令があるの
ldstr だよね。通常の参照型は newobj 。
別に>>440で間違ってないと思うけど、どこか勘違いしているなら指摘お願い。

446:デフォルトの名無しさん
08/10/23 00:29:51
俺には>>440>>443が同じことを言っているように見える。

447:443
08/10/23 00:30:31
ああすまんミスリード
コンパイラの話してるのかと思った

448:デフォルトの名無しさん
08/10/23 00:32:38
textbox.Text = s;

449:デフォルトの名無しさん
08/10/23 00:46:35
むしろ全部暗黙newすべき

450:デフォルトの名無しさん
08/10/23 00:57:00
せんでよか

451:デフォルトの名無しさん
08/10/23 01:00:44
ldstrでインターンプールから読むだけ。
stringインスタンスは、インターンプールにまだなければ、
JIT時に実体が作成されインターンプールに保存される。





んじゃないかな?


452:デフォルトの名無しさん
08/10/23 01:02:17
正規表現で文字列を表現しようとしているんですが、

@"(文字列)"

↑の(文字列)の部分に " マークが入っている場合はどう対処したらいいでしょうか?
エスケープシーケンス\をしても認識してくれません。

たとえば↓のような例の場合です。

string str = @"<a href="URLリンク(www.google.com)" target="_blank">";

453:デフォルトの名無しさん
08/10/23 01:03:43
@使うな

454:デフォルトの名無しさん
08/10/23 01:03:54
>>452
@"""文字列"""

455:デフォルトの名無しさん
08/10/23 01:06:23
>>452
その質問に答えるのは簡単だが、これ読んで他のことも理解した方がためになると思う。
URLリンク(www.microsoft.com)

456:デフォルトの名無しさん
08/10/23 01:11:36
失礼しました。
@は使わない方向で頑張りますorz・・・

457:デフォルトの名無しさん
08/10/23 01:15:03
使っていいんだが。
>>455は読んだか?

458:デフォルトの名無しさん
08/10/23 02:45:47
>>457
正規表現を使いたいなら@は使うな、ということですよね?

459:デフォルトの名無しさん
08/10/23 02:55:58
  _, ._
(;゚ Д゚)


460:デフォルトの名無しさん
08/10/23 03:01:23
吹いた

461:デフォルトの名無しさん
08/10/23 06:00:49
private void系を並び替える機能ありますか?

462:デフォルトの名無しさん
08/10/23 10:58:01
>>461
List.Sort

463:デフォルトの名無しさん
08/10/23 15:28:56
グラフ(散布図)を作りたいのですが、よくわかりません。
書店に置いてある本は、線や円の描き方は載っているものの、グラフ作成の方法までは載っていないのがほとんどでした。
NPlotも試してみましたが、NPlotの使い方が分からず挫折しました。
グラフの描き方について詳しく書かれている本があれば、教えて欲しいです

464:デフォルトの名無しさん
08/10/23 15:39:04
>>463
座標系とプロットしたい値、それを描画方法する方法が全てじゃない?
全て知ってると思うけど

465:デフォルトの名無しさん
08/10/23 19:18:46

YouTube - 9.11真相究明講演会 ベンジャミン・フルフォード講演ダイジェスト
URLリンク(jp.youtube.com)

911 Truth Tokyo 2008 (テロ事件真相研究-東京日本) -MP Fujita Yukihisa 藤田幸久
URLリンク(jp.youtube.com)
9.11真相究明講演会 藤田幸久議員講演ダイジェスト
URLリンク(jp.youtube.com)

9.11真相究明講演会 きくちゆみさんダイジェスト Part1-2/2
URLリンク(jp.youtube.com)
URLリンク(jp.youtube.com)

9.11真相究明講演会 3人の対談・ラストメッセージ
URLリンク(jp.youtube.com)

YouTube - 9.11真相究明講演会 ベンジャミンvs藤田議員 ダイジェスト版 Part 12
URLリンク(jp.youtube.com)
URLリンク(jp.youtube.com)


466:デフォルトの名無しさん
08/10/23 19:19:17
コピペ君って馬鹿だな、まで読んだ。

467:デフォルトの名無しさん
08/10/23 19:31:05

YouTube - グリフィン博士来日!911真相究明国際会議(2008113イベント)CM
URLリンク(jp.youtube.com)


468:デフォルトの名無しさん
08/10/23 19:32:08
コピペ君って馬鹿だな、まで読んだ。

469:デフォルトの名無しさん
08/10/23 19:47:00
書店の本でおすすめを教えてください

分厚いのではなく萌えるC#的なのでお願いつかまつります!

470:デフォルトの名無しさん
08/10/23 19:51:23
薄手のエロ本片手にリッチャーのC#本でも読んどけ

471:デフォルトの名無しさん
08/10/23 19:55:06
そいやHead First C#が出たみたいだな
いつものように分厚いだろうし萌えもしないだろうけどな

472:デフォルトの名無しさん
08/10/23 21:34:34
: error LNK2019: 未解決の外部シンボル _prntf が関数 _main で参照されました。
: fatal error LNK1120: 外部参照 1 が未解決です。

VS2008でC言語のプログラムを作ったのですが、コンパイルしようとしたら↑のような
エラーが出てきてしまいました。どうすればよいのでしょうか?

473:デフォルトの名無しさん
08/10/23 21:35:54
C#とCは違う言語だ。

>>472 それはprintf()のつづり間違いだろ。

474:デフォルトの名無しさん
08/10/23 21:36:00
>>472
Cのスレで聞け。

475:デフォルトの名無しさん
08/10/23 21:38:44
>>473-474
失礼しました

476:デフォルトの名無しさん
08/10/23 23:05:27
C#2005ExpressEditionでアプリケーションを実行するとDataGridViewに
自動的にデータが読み込まれるんですが、これの接続はすぐ切れるんですか?

477:デフォルトの名無しさん
08/10/23 23:27:56
今の子供たちの切れやすさと同じです

478:デフォルトの名無しさん
08/10/23 23:53:33
C#2008Expressでネイティブコードを出すにはどうしたらいいですか?

479:デフォルトの名無しさん
08/10/23 23:56:27
ビルドプロセスを弄ってC++のコードをコンパイルできるようにする

480:デフォルトの名無しさん
08/10/23 23:57:17
>>478
C#でC++コンパイラを書く

481:デフォルトの名無しさん
08/10/24 00:14:12
>>478
無い。
むしろ.NETをネイティブだと思うんだ。

482:デフォルトの名無しさん
08/10/24 00:26:25
CodeDOMやReflectionを使えば
C#コードをManaged C++コードに直すことは出来そうなんだがな
Managed C++にしたところで、Console::Writeがprintfになるわけでもないけどね

>>478
ngenじゃだめ?

483:デフォルトの名無しさん
08/10/24 00:31:58
ネイティブコンパイルの話は定期的に出るね。
GC、型システム、BCL(基本クラスライブラリ)をそのままにしてネイティブコンパイルしても、
ほとんど効果がないばかりかマイナスになる可能性が高い。
GC、型システム、BCLを別のものに置き換えればそれはもうC#ではない。
前者のアプローチはjavaにたいしてgcjがやってみたのだがさっぱりなのはご存知の通り。

484:デフォルトの名無しさん
08/10/24 00:48:17
ngen.exeをRunに登録させればいいの?

485:デフォルトの名無しさん
08/10/24 01:04:27
ngen.exe したからといって C/C++ で作ったような exe が出来上がるわけじゃないぞ
依然として実行には .NET Framework が必要

486:デフォルトの名無しさん
08/10/24 01:08:00
フォルダにテキストファイルがあるときに自動的に起動したいと思います。

string[] files = Directory.GetFiles("my documents", "*.txt", SearchOption.AllDirectories);
foreach(string file in files) {
if ( File.Exists(file) ) { //fileがあるときだけと書いたつもり。
Process.Start("Notepad", file); //メモ帳を起動する。
}}

で、コンパイルは正常に通るのですが、ifのところでファイルがないという例外が出ています。
全体をtry~catchで包むと、ファイルがないエラーは発生しませんが、今度は、ファイルがある場合2回起動します。
なんでこんなふうになっちゃうのでしょう?


487:デフォルトの名無しさん
08/10/24 01:26:04
なんて例外が出たのか
try-catchでどう囲んだのか

488:デフォルトの名無しさん
08/10/24 01:27:40
言葉が足りなかったか
ソースとメッセージをそのまま貼ってね

489:デフォルトの名無しさん
08/10/24 02:11:10
>>478
何のために?
つか、実行時はネイティブに変換されるんだが、それじゃダメなのか?

490:476
08/10/24 04:01:56
>>477ありがとうございます。すぐ切れてしまうのですね。

あれから、プログラムを組んでまた疑問点にぶち当たりました。。お助けを・・
DataSetとDataGridをツールボックスから貼り付けてDataSetで指定したデータベースを
データグリッドのデータソースとして登録しました。Formがロードされると
一覧が表示されるのですが、フォームに貼り付けたDataSetオブジェクトにその後アクセスすることは
不可能なんでしょうか?

やりたいことは、フォームが表示される→ボタンを押すともう一度そのデータを参照・更新したいのですが
フォームがロードされたときのDataSetオブジェクトにアクセスできれば良いと思うんですが無理ですか?
やりたいことを果たすためには、ButtonのOnClickメソッドの中でDataSetオブジェクトを作成して
もう一度データベースからデータを取得する必要があるのでしょうか?

このフォームに貼り付けたDataSetオブジェクトも色々なソースファイルを眺めてもどこにもでてきませんので
利用する事は不可能なんでしょうか?

意味がわかりにくい文章ですみません。もし分かる人がいたらおしえてください。

491:476
08/10/24 04:08:49
事故解決しました。。FormLoadに書いてあった。。

すみませんでした。

492:476
08/10/24 04:24:50
すいません。。やっぱりわかりません。
FormLoad時以降もフォームに貼ったDataSetオブジェクトにはデータがいっぱいつまっているのですか?

もし、FormLoad以降もデータが蓄積された状態ならば、私は他のフォームからそのデータセットを使いたいんですが、
private宣言されています。publicにかえちゃっていいですか?

すみませんがよろしくお願いします。もう寝ますので明朝みます。

493:デフォルトの名無しさん
08/10/24 07:49:01
教えてください。
C# uniq
で、
URLリンク(d.hatena.ne.jp)
のソースが見つかったんだが、これでテキストをuniqするには、
string text = File.ReadAllText("test.txt",Encoding.Default);
text = Siokoshou.ArrayListWithUnique.Unique(text);
File.AppendAllText("test2.txt" , text, Encoding.Default);
じゃだめなん?
コンパイルすると、
エラー 1 引数を '1' 個指定できる、メソッド 'Unique' のオーバーロードはありません。
といわれる。たしかに、Uniqueには引数の指定がないが…。


494:デフォルトの名無しさん
08/10/24 08:04:12
>>493
だめ。

495:デフォルトの名無しさん
08/10/24 08:29:05
イエスノーキャンセルダイアログで

if (MessageBox.show(なんとか) == DialogResalt.Yes)
{
はいが押されたときの処理
{
else if ==DialogResalt.No //ここどういうふうに書くの?
{
いいえが押されたときの処理
}
else
{
キャンセルの処理
}

496:デフォルトの名無しさん
08/10/24 08:59:53
DialogResult result = MessageBox.show();

if(result==DialogResult.Yes)
else if(result==DialogResult.No)

じゃダメ?

497:デフォルトの名無しさん
08/10/24 09:03:20
一時変数に突っ込みたくないならそこ if じゃなくて switch にするって手もあるけどやめとけ

498:デフォルトの名無しさん
08/10/24 09:19:36
>>496-497
ではDialogResultの処理はifで統一しときます
ありがとうございました

499:デフォルトの名無しさん
08/10/24 10:35:13
IntPtrって何の略?
Int32やInt64と同じように,ポインタサイズの整数型ってこと?

500:デフォルトの名無しさん
08/10/24 11:10:56
>>499
まんまInteger Pointerの略で良いと思う。
システムによってポインタのサイズとint型のサイズは必ずしも同じではないから、区別されてる。

501:デフォルトの名無しさん
08/10/24 11:20:11
起動しているプロセスを、読み込んでいるファイル名込みで取得するにはどうしたらよいですか?
たとえば、Notepadで、orange.txtというファイルを読み込んでいる場合、
if(Process.GetProcessesByName("Notepad.exe").Length == 0)
で、Notepadが起動していることはわかります。
同時にorange.txtと、banana.txtというファイルを読み込んでいる場合に、
区別して扱いたいです。


502:デフォルトの名無しさん
08/10/24 11:25:56
notepadならMainWindowTitleで分かるんじゃない?

503:デフォルトの名無しさん
08/10/24 12:11:38
スマートな方法はないわな

504:デフォルトの名無しさん
08/10/24 12:18:48
>>492
別に良いんじゃないの?
デザイナーで貼り付けたDataSetなら、直接ソースを書き換えるより
デザイナーでDataSetのオプションのModifiersをPublicにする方が良いんじゃね?

505:デフォルトの名無しさん
08/10/24 14:45:25
using System;
namespace TestApplication {
class Test {

private string message;

public Test(string message) {
this.message = message;
}

public void Say() {
Console.WriteLine(message);
}

}
}

上記のコードをCSharpCodeProviderでコンパイルしてインスタンスを作成し、Sayメソッドを呼び出すことはできますでしょうか。
ネット上ではstaticなメソッドの呼び出しとかはよく見るのですが、このケースについては見つけられませんでした。

506:デフォルトの名無しさん
08/10/24 14:54:17
Activator.CreateInstance

507:デフォルトの名無しさん
08/10/24 15:00:34
>>505
出来るはず。インスタンスの作成はActivator.CreateInstanceで出来る.

using System.Reflection;

Assembly asm = hogehoge.CompiledAssembly
Type classType = asm.GetType("myNamespace.MyClass");
Object = Activator.CreateInstance(classType);

508:デフォルトの名無しさん
08/10/24 15:20:30
>>493
uniqになってないしw
ついでに、Enumerable.Distinctがある今ではそいつは不要だな

509:デフォルトの名無しさん
08/10/24 15:40:48
>>502
ばっちりでした。
ありがとうございます。


510:デフォルトの名無しさん
08/10/24 16:24:19
質問です。

Microsoft Visual C# 2005 Express Edition で開発しているのですが、変数やメソッドを使用している
箇所で右クリックして、「定義へ移動」や「すべての参照の検索」を選んだとき、同一ソリューションの
他のプロジェクトにあるクラスは検索の対象にならないようです。

ソリューション単位でビルドしているのにこれは変だと思い、いろいろ設定を探したのですが、
見つかりませんでした。

どのようにすれば、他プロジェクトを検索してくれるようになるのでしょうか?

よろしくお願いします。

511:デフォルトの名無しさん
08/10/24 17:20:07
>>508
Enumerable.Distinctですか。

public static IEnumerable<TSource> Distinct<TSource>(
this IEnumerable<TSource> source,
IEqualityComparer<TSource> comparer
)

というのですが、例示するとどうなりますでしょう?


512:492
08/10/24 19:54:54
>>504
デザイナーで切り替えができるんですね。初めて知りました。というよりC#が初めてだ揉んで・・
Javaの場合はデータをカプセル化して、メソッドでデータをset/getしてまして、
DataSetをカプセル化してメソッドでDataSetをset/getするのもスマートなやり方じゃないなあ、
でもソースコードでpublicにするのもちょっと違和感がありまして、一番オーソドックスな方法を知りたかったのです。
デザイナの方で色んなformから参照できるようにすることができるなら、それが一番しっくりきますね。

一番いい方法を教えていただき、感謝しています。本当に知りたかったのでうれしいです。
どうもありがとうございました。

513:デフォルトの名無しさん
08/10/24 20:29:38
>>504
フォームのコントロールのmodifierがデザイナから変えられるって俺も
初めて知った。

つーか、492と同じくコントロールをpublicで外部に公開するのは作法として
よろしくないもんだと思って一所懸命コントロール操作用のメソッドを書いてた

public void IncrementProgressbar(int i)とか…



514:デフォルトの名無しさん
08/10/24 20:35:35
作法云々じゃなくて普通のプログラミングセンスしてれば
そんなことをしたいとは思わないはずだと思う。

逆に言えば、そんなことをしたいと思うのは99.99%どこか設計がオカシイんだよ。

515:デフォルトの名無しさん
08/10/24 20:56:02
IncrementProgressbar
こんなもんコントロールをpublicにするのと変わらん
フォームの「役割」を考えるんだ

516:デフォルトの名無しさん
08/10/24 21:00:52
邪悪なBSDで邪悪なDephiを用いて邪悪な.NETアプリ
スレリンク(mac板)
消しゴムじゃないMONOを使ってみるスレ 2個目
スレリンク(tech板)

517:デフォルトの名無しさん
08/10/24 21:08:16
do~while文でループ処理をしています。
ループ処理を実行し始めてから次のループ処理を実行するまで最低でもxxx分はあけておきたい
という場合にはどうプログラムを組んだらいいでしょうか?

ループ処理が終わった時点でxxx分経っていなければ、どこかでxxx分になるまで待つ
必要があります。反面一つのループ処理にxxx分以上かかった場合は待つことなく
即次のループ作業に入らせたいです。

518:デフォルトの名無しさん
08/10/24 21:10:47
>>517
ループの先頭で、clock()とかで時刻をとって、ループの最後で一定時間たってるか確認して、
足りなかったらsleep()系の関数で止まる。

519:デフォルトの名無しさん
08/10/24 21:20:49
ゲームならスレッド止めないでApplication.Idleイベント使った方がいいよ

520:デフォルトの名無しさん
08/10/24 21:26:04
>>518
>>519
どうもです。

sleep()
Apliclation.Ide

どちらがいいですか?

521:デフォルトの名無しさん
08/10/24 21:29:12
>>520
そもそも何故そんなことをしたいのか、という重大な疑問を棚に上げたままで
まともな回答なんて期待するだけ野暮だと思うぞ。

522:デフォルトの名無しさん
08/10/24 21:29:43
>>506,507

出来ました。
これ使えればなかなか面白いことが出来そうです。

523:デフォルトの名無しさん
08/10/24 21:58:49
foreach(int a in GetIntegerList())
{
  yield return a;
}

これをもっとシンプルに書けない?

524:デフォルトの名無しさん
08/10/24 22:02:13
それだけならreturn GetIntegerList();でいいだろ
前後にもyieldがあるなら,前後のyieldをそれぞれ別のメソッドに分けてEnumerable.Concat

525:デフォルトの名無しさん
08/10/24 22:10:14
>>524
ありがと

526:デフォルトの名無しさん
08/10/24 22:13:44
string[]をstringにするときってどうやるの?

527:デフォルトの名無しさん
08/10/24 22:16:05
String.Concat

528:デフォルトの名無しさん
08/10/24 22:23:59
今から本格的にC#を勉強する!
おまいらよろしく。

529:デフォルトの名無しさん
08/10/24 22:55:51
質問していいのは一通り勉強してからだよ

530:デフォルトの名無しさん
08/10/24 22:58:45
どうして?

531:デフォルトの名無しさん
08/10/24 23:03:24
ガイドラインって通読しておくもの?

532:デフォルトの名無しさん
08/10/24 23:04:40
>>530
エスパー不足だから

>>531
読まないよりは読んだ方がいい

533:デフォルトの名無しさん
08/10/24 23:05:04
馬鹿にされたくなければ「クラスライブラリの開発者向けガイドライン」くらいは読んどいた方がいいんじゃね

534:デフォルトの名無しさん
08/10/24 23:06:22
>>530
入門者は変にいろいろ考えるよりも勉強した方が早い

535:デフォルトの名無しさん
08/10/24 23:09:13
>>529
こちら,スネーク。了解した!

536:デフォルトの名無しさん
08/10/24 23:18:51
でもわからない事はきいたほうがはやいじゃん?

537:デフォルトの名無しさん
08/10/24 23:25:49
textBoxで、下地の背景を表示したいと思います。
textBoxを半透明にするにはどうしたらよいですか?
普通に配置して、プロパティで選択すると、
できないといわれます。
代わりに、textBoxの上にpictureBoxを配置したら、
透明にはできましたが、textBoxは下になって隠れてしまって、
文字入力できません。


538:デフォルトの名無しさん
08/10/24 23:27:44
初心者のみなさん
こまったちゃんが>>529みたいなこと言ってるけれど
好きな時にすきなだけ質問していいんだよ


539:デフォルトの名無しさん
08/10/24 23:43:44
>>538
なんだか意識が小学生だね君ってw
行動の基準が「先生に怒られるかどうか」って感じ。

良いか悪いか(先生に怒られるかどうか)じゃなくて、
そうしないとお前が損するんだぜって話だと思うんだが。

540:デフォルトの名無しさん
08/10/24 23:44:16
>>537
普通には無理
それが重要ならWPF池

541:デフォルトの名無しさん
08/10/24 23:54:39
>>537
Managed DirectX

542:デフォルトの名無しさん
08/10/25 00:10:39
>>527
ありがとう。String.Concatでできました。


543:デフォルトの名無しさん
08/10/25 00:20:23
>>540
WPFしてみます。
がっ。デザイナが開かず、
「TrueTypeフォントのみがサポートされています。
これはTrueTypeフォントではありません」
って、これってどれよ?


544:デフォルトの名無しさん
08/10/25 00:31:52
再起動してみる
VSのフォント関連の設定をリセットしてみる
SP1入れてないなら入れてみる
VS再インストール

545:デフォルトの名無しさん
08/10/25 00:31:58
>>543
これ=Managed DirectX

546:デフォルトの名無しさん
08/10/25 01:52:44
大量のテキストデータから指定した複数の単語を含む文章を検索するプログラムを
作ろうと思っています。各社のニュース系のサイトから記事を自動的に収集してくる
プログラムを作り、記事を保存します。社によっても違いますが、だいたいニュース系の
サイトは半年以内にリンク切れしてしまうので、そうなるまえに記事を自動的に収集して
おき、必要に応じて検索して過去の記事を探してくるプログラムを作りたいわけです。

そこで大量のテキストファイルから合致する記事を探し出してくるプログラムを作る必要
があるわけですが、C#でそういった検索プログラムを作る上で参考となる手法はあるで
しょうか?とくに無ければ検索ワードを入れると過去記事を一から順番に巡回して探し
だす、何の変哲もないプログラムにしようかと思っています。

547:デフォルトの名無しさん
08/10/25 02:20:39
めんどくさいからナマズに探させればいいじゃん

548:デフォルトの名無しさん
08/10/25 03:23:13
すごい基本的なことなんですが本で勉強していて

「変数をカプセル化するためにプロパティを使う。
変数をprivateにし、プロパティをpublicにする」

ってなってました。
結局publicでアクセスできるんだから
カプセル化されてないような気が?
どういうことなんですか?

549:デフォルトの名無しさん
08/10/25 03:28:10
プロパティにしておけば、値が設定される時にその値を検査する仕組みを入れたり、
変数の実体を無くして動的に計算して値を返すなんてことも出来るし。
変数のままpublicだったらそんなこと出来ないだろ?

550:デフォルトの名無しさん
08/10/25 03:31:03
それはそうだと思うんですが
カプセル化するためっていうことを考えると
プロパティもprivateにするべきじゃないかと思いました

551:デフォルトの名無しさん
08/10/25 03:33:55
じゃあ、クラスの他のメソッドを通じて変数に値を設定することも、
値を読み出すことも出来ちゃだめってことにならない?

552:デフォルトの名無しさん
08/10/25 03:40:40
>>547
webブラウザを通して検索させるということですか?

553:デフォルトの名無しさん
08/10/25 03:49:55
>>552
インターフェースはCCGIに限らないよ

554:デフォルトの名無しさん
08/10/25 04:02:58
カプセル化をちょっと誤解してました。
すいません。
ところで
クラス内のフィールドにアクセスする時も
全部プロパティ経由の方がいいんですか?

555:デフォルトの名無しさん
08/10/25 08:09:38
本当に誤解が解けたのが疑問だが
全部プロパティ経由でおk

556:デフォルトの名無しさん
08/10/25 09:52:20
List<string>とかはフィールドのまま使うしかないですよね?

557:デフォルトの名無しさん
08/10/25 10:24:25
意味不明です

558:デフォルトの名無しさん
08/10/25 10:40:29
コレクションもプロパティにしていい
ただしList<string>型のパブリックプロパティはガイドライン違反だからIList<string>として返すとか

559:デフォルトの名無しさん
08/10/25 11:31:00
初めて聞いた
そのガイドラインどこにある?

560:デフォルトの名無しさん
08/10/25 11:35:41
URLリンク(msdn.microsoft.com)(VS.80).aspx
これだね
FxCopのガイドラインまで気にしてたらキリがないかもしれないけど
たまに話題になる有名なやつだから

561:デフォルトの名無しさん
08/10/25 11:37:25
どうもどうも

562:デフォルトの名無しさん
08/10/25 11:49:33
>>555
なんか端折った話?

publicな変数をインターフェースを変えることなくプロパティに出来るのが
C#のプロパティのメリットじゃないのか?

563:デフォルトの名無しさん
08/10/25 11:56:44
それは間違い
publicフィールドをプロパティに変えたら使用側がエラーになる場合は多い
面倒なら自動プロパティでいいから全部プロパティにするべき

564:デフォルトの名無しさん
08/10/25 12:04:41
>>544
SP1にバージョンアップし(3時間もかかった…)、
WPFを使ったら、テキストボックスの背景に、
画像を表示できました!
アドバイス多謝。


565:デフォルトの名無しさん
08/10/25 12:34:19
C#ってSTLのvectorに相当するコレクションある?

566:デフォルトの名無しさん
08/10/25 12:35:28
List<T>

567:デフォルトの名無しさん
08/10/25 12:35:54
WPFって実用段階に入ってるんだっけ?

568:デフォルトの名無しさん
08/10/25 12:40:23
とっくの昔に.NET3.0と一緒にリリースされて
.NET3.5にバージョンアップしてVS2008で正式サポートされてる

569:デフォルトの名無しさん
08/10/25 13:01:59
いやそれは知ってるけど数年前の普及価格帯のノートPCとかでも
普通にストレスなく動くのかと。

570:デフォルトの名無しさん
08/10/25 13:05:13
余裕

571:デフォルトの名無しさん
08/10/25 13:15:22
WPFの質問です。
textBoxでボックスの幅で折り返しして、
複数行を表示するにはどうしたらいいですか?

普通のFormの場合には、
textBoxの右上に小さい矢印が出て、
そこをクリックすると、multilineを選択できました。

ひょっとしてtextBoxでなくて、
textBlockを使うのかなと思ったのですが、
こちらでは文字入力できず。


572:デフォルトの名無しさん
08/10/25 13:23:09
>>571
URLリンク(msdn.microsoft.com)

573:デフォルトの名無しさん
08/10/25 13:25:02
>>571
MaxLineが1じゃなけりゃ普通に複数行じゃない?
リターンキーで改行したいなら、AcceptsReturnにチェック

574:デフォルトの名無しさん
08/10/25 13:28:17
>>571
少しは自分で調べたの?
プロパティ見たらTextWrappingとかAcceptsReturnとかすぐに見つかったんだが


575:デフォルトの名無しさん
08/10/25 15:34:27
みなさんありがとう。
調べてMaxLinesの値を10000とかにはしてみたのですが、
なぜか失敗してました。
TextWrappingは見逃してました。
textBlockのほうを見て混乱してたかも。

WPFは初めてなので、ちょっと勝手が違ってとまどってます。
msdn見てたら、むちゃくちゃ強力ですね。


576:デフォルトの名無しさん
08/10/25 16:07:07
WPFは柔軟な代わりに結構複雑で難解だよな

577:デフォルトの名無しさん
08/10/25 16:10:06
慣れの問題だよ

578:デフォルトの名無しさん
08/10/25 16:28:27
WPFは色々いじってみたいけど、認知度がやたらと低いのが難点。
表とかアニメーションとか簡単に表示させられるし、とても魅力的ではあるんだけどね。

579:デフォルトの名無しさん
08/10/25 18:14:52
そもそも公開しなくて済むならそれにこしたことはない
ほんとに公開する必要あるの?

580:デフォルトの名無しさん
08/10/25 18:29:39
>>563
マジっすか・・・
参考までにどういうケースでおかしくなるか2、3教えてくれん?
Reflection絡みぐらいしか思いつかん。

自動プロパティ使えるといいんだけど、うちぁVS2005だからなぁ・・・

581:デフォルトの名無しさん
08/10/25 18:38:40
違いなら

・ref, out の動作
Int32.TryParse("...", ref inst.Field);

・フィールドのフィールド
inst.Field.Field = value;

・データバインディング全般(リフレクションベースなので)
ctrl.DataSource = values;

個人的にはパブリックフィールド使いたいのなんて値を表すような
クラスが大半だろ?ってことはバインディングに使われやすいわけ
だろ?なんで初めからプロパティにしない?と思う。

582:デフォルトの名無しさん
08/10/25 18:42:35
> publicな変数をインターフェースを変えることなくプロパティに出来るのが
> C#のプロパティのメリットじゃないのか?
privateなフィールド+アクセサだとobj.GetFoo()やらobjSetBar(123)とか書くの面倒だから
っていうのが第一にあると思うぞ

583:デフォルトの名無しさん
08/10/25 18:47:01
javaだとそういう見にくいコードになるね

584:デフォルトの名無しさん
08/10/25 18:54:59
フィールド直接見せるのはダメだろJK

でもOOPとしてオブジェクトは操作と属性を持つってなってんのに属性を見せないって変じゃね?

の解としてプロパティ

585:デフォルトの名無しさん
08/10/25 18:57:39
>>582
そうだけどコンポーネントモデルにおけるいわゆる「プロパティ」が
メタデータレベルで一級の扱いを受けるようになったことのほうが
大きい。
一級扱いだから「プロパティ」そのものにアトリビュートが付けられる
ようになったしアクセスするオブジェクトのモデル(リフレクション)も
整理された。

わかりにくいなら例えば Browsable アトリビュートは「どれ」に付け
るべきかって話を考えてみるといい。セッタかゲッタ、クラスだと
意味的に変だろ?なら型のメンバとしてサポートしなきゃと。

・・・という話があるわけなのだが C# に詳しくない人が単なるシンタ
クッスシュガーだとプロパティを判断して迷宮に迷い込むと

586:デフォルトの名無しさん
08/10/25 19:11:36
>>581
サンクス。

ref、outに使えないのは知らなんだ。
滅多に使わないからなぁ。>ref、out

フィールドのフィールドは良く分からなかった。
そういうコードが出てきた時に気にしてみるよ。

>個人的には
個人的な話をすると、バインドするつもりが無かったデータのクラスを
後から何かにバインドすることが殆ど無いので。


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