ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
442:デフォルトの名無しさん
08/10/04 23:38:10
>>439
基本的に、機械生成コードと手書きコードを合わせて1クラスにするための機構。

443:435
08/10/04 23:47:52
>>441
矩形だけなら始点(sx,sy)と終点(ex,ey)を保持するだけで良いが
それ以外を選択するには、Bitmapで形を保持すると良い
PictBearは選択範囲をBitmapで保存できたから、多分そんな形でやってるはず。

>>442
WPF,XAMLがある今、いらない子?

444:デフォルトの名無しさん
08/10/04 23:50:45
>>443
いや、WPF 以外にもいろいろ使われてる。

WPF の XAML も、ビルドの途中で partial class を自動生成してる。

445:デフォルトの名無しさん
08/10/04 23:50:50
>>443
形の保持ならGraphicsPathでよかろうよ

446:デフォルトの名無しさん
08/10/05 00:07:30
ラスタ形式の画像の選択範囲は、
αチャンネルで持つのが普通な気が。

447:デフォルトの名無しさん
08/10/05 01:03:01
splitで出力された1次元配列にいくつの要素があるかわかるメソッドってない?

448:デフォルトの名無しさん
08/10/05 01:04:24
Count()

449:デフォルトの名無しさん
08/10/05 01:05:07
>>447
ubound

450:デフォルトの名無しさん
08/10/05 01:05:29
ごめん、VB と勘違いした

451:447
08/10/05 01:08:36
即レスサンクス!
Count()はVBで>>448=>450でおk?uboundを使ってみます!

452:427
08/10/05 01:11:46
助言してくれた人たち、ありがとう。
教えてもらった方法をなんとか試してみる。

453:447
08/10/05 01:16:32
ん、、?
uboundがVBかorz

454:デフォルトの名無しさん
08/10/05 01:25:10
現実では無理だと悟ったので、人工知能の少女を作って仮想世界で彼女作ろうと思うのですが
C#でできますか?

455:デフォルトの名無しさん
08/10/05 01:28:10
C#はそんな貴方の夢を叶えます

456:デフォルトの名無しさん
08/10/05 01:53:29
>>440
レスありがとうございました
自分は今のところコマンドプロンプトで実行するアプリケーションしか作ってないので、そのうち勉強させてもらいます


すみませんが、またまた質問させてください。
今度は例外処理に関してです。
C#だと、例外は必ずしもtry~catchしなくて良いのでしょうか?

Encoding.GetEncoderメソッドを使うプログラムを考えているのですが、特に例外処理しなくても、コンパイルも実行もできてしまいます
おそらく、このメソッドは存在しない文字コードを指定すると例外を発生させますよね?
そのための例外処理が必要だと思うのですが、どうなってるんでしょ?
Javaで言うところのRuntimeExceptionが出ているのでしょうか?

APIを調べたのですが、URLリンク(msdn.microsoft.com)を読んでも、例外関係の情報が入手できません。

例外の基本的な処理の考え方や、ドキュメントからの例外情報の入手方法を知りたいです。
よろしくお願いいたします

457:デフォルトの名無しさん
08/10/05 01:59:56
>>456
いちいち Java と比べるのはやめれ。

例外処理をしなければ、UnhandledException が出て、アプリが終了するだけ。

458:デフォルトの名無しさん
08/10/05 09:04:26
GetEncoder自体はEncoderオブジェクト返すだけだし例外投げる要素が無いな

459:デフォルトの名無しさん
08/10/05 10:33:11
>>457
すみません、自分はCとJavaとrubyくらいしか、経験が無いもので、、、^ ^;
>例外処理をしなければ、UnhandledException が出て、アプリが終了するだけ。
なるほど
しかし、いきなりアプリが終了するのは厳しいですな

>>458
間違えました
Encoding.GetEncoding(String);でした
URLリンク(msdn.microsoft.com)
見ると、例外の情報も載ってますね


申し訳ありませんが、さらに質問させてください
普通にVC#2008ExpressEditionを使っていると、例外処理を行わなくてもコードが書けてしまいますよね
これを、VC#2008ExpressEditionが自動的に全ての例外を処理しなければ警告を出すような設定にすることはできないのでしょうか?
あと、またまたJavaに例えてしまい申し訳ないのですが、各例外にExceptionとRuntimeExceptionのような違いはないのでしょうか?

よろしくお願いいたします。

460:デフォルトの名無しさん
08/10/05 10:34:34
>>456
変な引数与えたときはたいてい ArgumentException。

Java と比べてってことは、「throws リストはないの?」ってことだろうけども。
あれは、「内部実装を外部に漏らしてしまう」って欠点がある割に、
どうせ「面倒だったらException型でcatchしちゃえ」って人が多くて
対して役に立たないから C# では採用しなかった。

461:デフォルトの名無しさん
08/10/05 10:38:38
>>459
URLリンク(msdn.microsoft.com)(VS.80).aspx

例外処理の強要は、Java みたいに throws リストでやるんじゃなくて、
単体テスト書いて、ちゃんとコーナーケースのテストもして、
例外が出たらテスト通さないようにするのがいいと思う。

462:デフォルトの名無しさん
08/10/05 11:11:25
VS2008C# Expressです。

フォームを作成すると、Form1.Designerに以下のような
コードが追加されますが、このSystem.ComponentModel
名前空間のインターフェース、クラスはどのような意味を
持つのでしょうか?ヘルプやHPで調べてもよくわかりません。

private System.ComponentModel.IContainer components = null;

private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
}

このフォームにボタンを追加すると、InitializeComponentの
this.components = new System.ComponentModel.Container();
が消えてしまいます。

そこからさらにTimerを追加すると、
this.components = new System.ComponentModel.Container();
が復活し、
this.timer1 = new System.Windows.Forms.Timer(this.components);
が新たに追加されます。

アンマネージドリソースの破棄に関係しているのでしょうか?
詳しく解説しているHP等ありましたら、教えてください。
宜しくお願いします。


463:デフォルトの名無しさん
08/10/05 11:19:38
はじめに入ってるのはそういうテンプレートだから
消えるのは多分使ってないと判断されたから
追加されるのは使うから

IContainerはComponent派生クラスの後片付け(Dispose呼び出し)のルール
自分がDisposeされるときに自分の持ってるComponentもまとめてDisposeするため

464:デフォルトの名無しさん
08/10/05 11:42:59
>>460-461
レスありがとうございます
確かにJava使ってたときもなんでもかんでもExceptionでcatchなさる御仁は多かったですね
うちの会社はルールが厳しくて許されませんでしたけど、下請けに出した古いコードはcatch(Exception e)の嵐…
しかも、何も処理して無いことも多いですし、酷いときはVMが突然終了するコードもありましたね


現実問題、例外処理はどうするもんなんでしょ?
たとえば、ArgumentExceptionとかはそもそもメソッドの使い方を間違えているわけだから、例外が出たらプログラマの責任でテスト失敗てのは納得できます
だから、ArgumentExceptionをcatchして例外処理を記述する必要は無いと思います

しかし、ファイル読み込みに失敗とかのケースはやはりcatchしてなんだかの処理をすべきですよね(少なくともアプリが突然終了はないですよね)
catchして処理すべき例外とプログラマの責任でそもそも例外が出ないようにテストする例外と、なんか、その辺を解説している記事とか本とかないですかね


465:462
08/10/05 11:43:51
>>463
レスありがとうございます。

Component派生クラスのオブジェクトをFormの
System.ComponentModel.IContainer componentsに登録させておき、
フォームをDisposeするときに一緒にDisposeさせる…

上記のような処理のためcomponentsが存在している。
といった理解でよろしいでしょうか?


466:デフォルトの名無しさん
08/10/05 11:47:56
>>465
うん

467:462
08/10/05 11:50:22
>>466
ありがとうございました。


468:デフォルトの名無しさん
08/10/05 11:51:50
Silverlight2RC0来たね

469:デフォルトの名無しさん
08/10/05 12:21:11
半透明なコントロールを親コントロールに貼り付けたとき、
親コントロールが子コントロールの領域を描画しなくなって
表示がおかしくなるのを防ぐために設定するのって何だっけ?

変な日本語ですまn

470:デフォルトの名無しさん
08/10/05 13:06:53
>>465
厳密に言うとそれだけじゃなくて Container Site Componentの
結合のために存在している。
しかし、この辺は ComponentModel の基本的なことだから押さえた
ほうがいいともいえるけどコンポーネントを作るんじゃなく使うだけ
なら気にしなくてもいいからわかんなくてもいいかも。


471:469
08/10/05 13:12:09
追記

Win32で言うところの
WS_CLIPCHILDREN と WS_CLIPSIBLINGS
を外したいってことなんだが。

472:デフォルトの名無しさん
08/10/05 16:26:58
例外処理はこれで十分

static void Main(string[] args)
{
  try{
     //ほげほげ
  }
  catch(Exception){
    MessageBox(e.ToString(), "えら〜");
  }
}

473:デフォルトの名無しさん
08/10/05 16:28:36
hogeってなんなの?

474:デフォルトの名無しさん
08/10/05 16:32:19
hageやhigeの変種

475:デフォルトの名無しさん
08/10/05 16:32:58
>>472

e

476:デフォルトの名無しさん
08/10/05 16:33:04
hogeの定義は無いよ
適当とか未確定とかニュアンスでいいんじゃないでしょうか?

477:デフォルトの名無しさん
08/10/05 16:37:12
では、ハナモゲラ語とはなんですか?

478:デフォルトの名無しさん
08/10/05 16:59:13
Lengthだろ

479:デフォルトの名無しさん
08/10/05 17:05:41
!

480:デフォルトの名無しさん
08/10/05 17:13:57
想定外の例外は最上位でキャッチしてログ書いてメッセージ出して終了。
普通に想定される処理続行可能な例外はその場でキャッチして適度に処理。
続行出来ないようなのはあえてキャッチせず最上位に任せるか、
ラップして再スローしてやっぱり最上位に任せる。

例外処理って、厳密にやろうとすると細かいルールばかりになって、
しかもかなり慎重に考えないと意味なかったりやたらコーディングが複雑になったりして、
結局シンプルに決めた方がましなことが多い。


481:デフォルトの名無しさん
08/10/05 17:37:48
変数と配列・リストで命名規則の違いとかってありますか?

たとえば変数の場合は出だしが小文字でそれ以降は大文字

例) int variableNumber;

みたいな感じにするのが一般的とされていますが、これと似たような暗黙上のルールは
配列・リストにありますか?

482:デフォルトの名無しさん
08/10/05 17:54:20
>>481
暗黙っていうか、それはcamelスタイルって名前がついてる。
MSのクラスライブラリ作成のガイドラインに、なににどのスタイルを使うとか書いてある。

483:デフォルトの名無しさん
08/10/05 17:58:11
配列やリストだって変数に入れるインスタンスじゃん?

484:デフォルトの名無しさん
08/10/05 18:02:20
ローカル変数に大文字二十日湾だろ不通

485:462
08/10/05 18:10:02
>>470
基本的なことなら理解したいのですが、
解説サイトとしてはMSDNの「Visual Studioによるコンポーネント」
のあたりを読むしかないですかね?

コンポーネントのありがたみというかコンポーネントでないと
出来ない事なんかがよくわかりません。

486:デフォルトの名無しさん
08/10/05 18:56:11
どうしてプロパテーはジェネリックに出来ないの?

487:デフォルトの名無しさん
08/10/05 19:13:51
うまく質問している内容が伝わるか不安ですがよろしくお願いします

やりたいのは、データをファイルに保存するクラスを作りたいのですが
テキストファイル形式で保存するんじゃなくて、テキストエディタで開いても
みれないデータ形式ありますよね?.exeとか
そんな感じで保存したいんだけどどういう知識が必要なのかな?

保存したいのは計算結果の数値や文字列データです

488:デフォルトの名無しさん
08/10/05 19:16:59
>>487
好きにフォーマットを考えて、好きに読み書きすればよろし。

489:デフォルトの名無しさん
08/10/05 19:45:24
>>488
だから、普通に書き込んだらテキストファイルで見れるから
そうならないように書き込みたいからやり方教えろって言ってるんだけど
お前メクラか?

490:デフォルトの名無しさん
08/10/05 19:50:21
お前がテキストで書き込んでるから見えるんだろボケ

491:デフォルトの名無しさん
08/10/05 19:52:47
>>489
>>488は別に煽ってるわけでもないし、ましてメ○ラなわけでもない。
むしろ馬鹿でメ○ラでツ○ボでどうしようもないのは君の方だぞいやマジで。

492:デフォルトの名無しさん
08/10/05 19:54:08
>>489

> だから、普通に書き込んだらテキストファイルで見れるから

ならない。

バイナリを見れる、って意味では見れるけどなw

493:デフォルトの名無しさん
08/10/05 19:59:26
まあお前らKOOLになれよ

BinaryFormatterでシリアライズなんかどうかな

494:デフォルトの名無しさん
08/10/05 19:59:56
昨日splitで出力された配列に何個要素が入ってるのかわかる関数を教えてくれってレスして
count()を教えてもらったんだけどこの関数どうやって使うんですか…?
ググってもそれらしい構文が見つからなくて…

495:デフォルトの名無しさん
08/10/05 20:01:18
素直にLengthプロパティ見れ

496:デフォルトの名無しさん
08/10/05 20:06:59
>>494
だからお前はオブジェクト指向の概念から学べよ猿

あと、countだと、nullだった場合エラー出るからお勧めできない
countなんて薦めた奴はバカだから放置しろ

497:デフォルトの名無しさん
08/10/05 20:51:01
>>494
その人、たぶん Length って言いたかったんだと思うよ。
VBとか他の言語がいろいろ混ざっちゃってたっぽいので。

Split の結果って配列だから、それの長さ調べろってこと。

498:494
08/10/05 20:56:07
>>495-497
そうかLength見ればいいのか…
なんか変な考え方してたみたいですorz
皆さん優しくありがとう

499:デフォルトの名無しさん
08/10/05 21:10:30
初心者です。C#で

ある整数のセットに対して、最小値(か最大値)を配列で返す機能ってあります
でしょうか?ちょっと探してみたくらいじゃみつかりませんでした。

例 
[3,3, 5, 2, 2, 4, 4, 7] => [2,2]
[7,2,3,4,1,,-1,-1,-3,5] => [-3]

500:デフォルトの名無しさん
08/10/05 21:11:32
あ、,,になっている部分は、nullみたいな感じで無視します。


501:デフォルトの名無しさん
08/10/05 21:15:56
そのものはないけど、
new[] { data.Max() }


502:デフォルトの名無しさん
08/10/05 21:20:37
>>501
複数あったらその数だけ作るらしいぜ
var max = data.Max();
var result = Array.FindAll(data, x => x == max);

503:デフォルトの名無しさん
08/10/05 21:35:02
var min = data.Min()
var result = array.Where(n => n == min);
でもおk

504:デフォルトの名無しさん
08/10/05 21:35:34
>>503訂正
var result = data.Where(n => n == min);

505:デフォルトの名無しさん
08/10/05 21:41:21
みなさんありがとうござます。
早速ためしてから感謝しようとおもっておりましたが、
int[] d = {11,11,22,33,10,10};
d.Min()がない。
というような状況です。もしかして2.0には、Min,Maxないんでしょうか
(Math.Min,Maxはありましたが)

506:デフォルトの名無しさん
08/10/05 21:55:20
ああ、そう。
Min, Max は 3.0 から。

507:デフォルトの名無しさん
08/10/05 21:59:09
単に3.0って言うとややこしいぜ
.NET 3.5/C#3.0から

508:デフォルトの名無しさん
08/10/05 22:07:38
public static int[] Maxs(int[] arr)
{
int max, cnt;
if(arr.Length == 0)
{
return new int[0];
}

max = arr[0];
cnt = 1;
for(int i = 1; i < arr.Length; i++)
{
if(arr[i] == max)
cnt++;
if(arr[i] > max)
{
max = arr[i];
cnt = 1;
}
}
int[] result = new int[cnt];
for(int i = 0; i < cnt; i++)
result[i] = max;
return result;
}
こうかな?

509:デフォルトの名無しさん
08/10/05 22:10:48
>>508
もう少し短くまとめろよ・・・情けない

510:デフォルトの名無しさん
08/10/05 22:17:36
2.0 でちゃんとやると508になる気がするが。
C# 3.0 使えという話ではある。

511:デフォルトの名無しさん
08/10/05 22:18:10
>508 大変ありがとうございます。
double, floatなどでもつかえるようにしてみようとおもいましたが
==, >の比較ができなく困ってしまいました。
class MathEx
{
public static T[] Maxs<T>(T[] arr) where T : IComparable
{
T max;
int cnt;
省略
max = arr[0];
cnt = 1;
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] == max)
cnt++;
if (arr[i] > max)
{
max = arr[i];
cnt = 1;
}
}
T[] result = new T[cnt];
省略
}
}
もうちょい悩んでみます。

512:デフォルトの名無しさん
08/10/05 22:24:07
質問者です。以下でなんとかいきそうでした。
if (arr[i].CompareTo(max) == 0)
cnt++;
if (arr[i].CompareTo(max) > 0)

513:デフォルトの名無しさん
08/10/05 22:24:08
>>511
.CompareTo

514:デフォルトの名無しさん
08/10/05 22:27:46
>513
ありがとうございます。このスレでもでてきたEachForや今回のMaxsのような独自の便利
関数は、みなさんどのように管理されてるんでしょうか??なにかアドバイスあればお願い
します。

515:508
08/10/05 22:29:30
>>509
public static int[] Maxs(int[] arr)
{
int max = Int32.MinValue;
int cnt = arr.Length == 0 ? 0 : 1;

foreach(int value in arr)
{
if(value == max)
cnt++;
if(value > max)
{
max = value;
cnt = 1;
}
}

int[] result = new int[cnt];
for(int i = 0; i < cnt; i++)
result[i] = max;
return result;
}
うーん、こうかな…

516:デフォルトの名無しさん
08/10/05 22:37:19
>>515
まあ、まずまずだけど、ひとひねりほしいな
例えば再起処理を使うとかさ
forでやるのはダサイ

>>514
管理ってなんぞ?クラスで定義すればいいんじゃねーの?

517:デフォルトの名無しさん
08/10/05 22:40:25
こんなんで再帰使う方がアレだわ

518:508
08/10/05 22:41:45
よく見たらバグってんなこれ

519:デフォルトの名無しさん
08/10/05 22:55:13
>>514
適当にinternal staticなクラス作って入れとく
よほど汎用的で便利なものでなければプロジェクトごとに書き捨て

520:デフォルトの名無しさん
08/10/05 22:58:44
倹索とかで見つからなかった場合null帰すのとエラーはどっちがいいの

521:デフォルトの名無しさん
08/10/05 23:00:22
場合による
「検索」という意味合いのメソッドなら例外は投げない方がいいかも

522:デフォルトの名無しさん
08/10/05 23:00:59
>>514
CodeProjectに登録

523:デフォルトの名無しさん
08/10/05 23:02:17
>>516
なんという関数型脳w

524:デフォルトの名無しさん
08/10/05 23:06:52
この問題結構奥深いな…
最小値、最大値のセットだけでなく
2番目、3番目、そして一番多くはいってる数とか
だそうとして、
ヒストグラムに一旦入れて、やってみてたけど、朝までかかり
そうなかんじなんで、つかーれたのでエロみてくる。

525:516
08/10/05 23:14:49
おまえらバカだから答え教えてやるよ

まず、配列をList<>に入れる
その後。Sort()
あとは言わないでもわかるな?

526:デフォルトの名無しさん
08/10/05 23:18:27
>>521 そもそもnull使えない型とか…

527:デフォルトの名無しさん
08/10/05 23:25:43
null許容型もだめな型ってあるの?
あるいはDictionary.TryGetValueみたいに可否と結果を別に表す方法もあるし。

528:デフォルトの名無しさん
08/10/05 23:26:18
>>525
List<>に入れるときはforを使わず再帰処理を使うんですね
わかります

529:デフォルトの名無しさん
08/10/05 23:28:44
数字なら最大値でも返えせば

530:516
08/10/05 23:31:09
要素から最大値を抜き出す
その要素に-1を代入
また、要素から最大値を抜き出す
最初に取り出した最大値より小さい場合は
唯一の最初のが最大値

あとはわかるな?

531:デフォルトの名無しさん
08/10/05 23:32:19
タイプつかってヒストグラムできた。が馬鹿でかいものになった。
歪度とかCV、σとか無意味につけてしまった。

532:デフォルトの名無しさん
08/10/05 23:37:56
ダメだ、俺の頭では、-1を代入のところがよくわからん。。。
整数だからマイナス数値ばっかのセットだってあるんだよね

533:デフォルトの名無しさん
08/10/05 23:42:09
これに速度の差とかあるですか?

try
{
  int index = 0;
  for(;;)
  {
    if(name == list[index++].name)
    {
      break;
    }
  }
  return list[index];
}
catch(ArgumentOutOfRangeException)
{
  return null;
}

//int count = list.Count;
//for(int i = 0; count > i; i++)
//{
//  if(name == list[i].name)
//  {
//    return list[i];
//  }
//}
//retnrn null;


534:デフォルトの名無しさん
08/10/05 23:45:08
>>533
foreachのほうが早い

535:デフォルトの名無しさん
08/10/05 23:52:39
516は突っ込んだら負けなんだろうか

要素は全部0以上とか元の配列を破壊してもいいとか勝手な条件付けすぎ

536:デフォルトの名無しさん
08/10/05 23:53:23
>>530
最大値が負の数だったら?

537:デフォルトの名無しさん
08/10/06 00:00:40
エレガントな解はまだかーい?

538:デフォルトの名無しさん
08/10/06 00:08:52
>>535
>>536
屁理屈言うな

あくまで>>505の規格に即しただけ

誰が符号付整数なんて条件出したんだ?

539:デフォルトの名無しさん
08/10/06 00:11:54
元々の質問は>>499でそ

540:デフォルトの名無しさん
08/10/06 00:12:05
いや、499時点で負数出てきてるし…

541:デフォルトの名無しさん
08/10/06 00:18:21
組み紐群ならったときに、エレガントな方法あったきがする。。。
が教科書すら全部研究室おいたまま10年以上たっとるな。

542:デフォルトの名無しさん
08/10/06 00:36:00
ApplicationExceptionじゃなくて
ArgumentOutOfRangeExceptionとか
InvalidOperationExceptionとか
中の人以外が勝手に使ってもいいの?

543:デフォルトの名無しさん
08/10/06 00:46:30
真面目な話、いくらふらっとスレだからって、>>499ってそんな悩む問題なのか?
そっちの方が悩ましい問題だ。
こんなのベタにやればいいだけじゃん。
間違いなく(負の数について簡単に説明してやりさえすれば)小学生でも書けるコードにしか思えないんだが。

544:デフォルトの名無しさん
08/10/06 00:47:13
>>542
ApplicationExceptionは黒歴史になりました

545:デフォルトの名無しさん
08/10/06 00:51:22
>543
小学生でも書けるかもしれないが、万人が使いたくなるような
汎用的なもの、もしくは、ロジックがみためにも美しいもの
をつくるのは、難しいぞ。

そんなに簡単に書けるコードだというのなら、手本をみせてほしい。
ヒストグラムに入れるという方法が私には、なるほど!と思わせてくれた。

546:デフォルトの名無しさん
08/10/06 00:57:52
>>545
何を言っているのか意味がわからん。
汎用的?
汎用的かどうかがコードの書法によって変わるとでも言うのか?w


547:デフォルトの名無しさん
08/10/06 01:02:27
振る舞いが重要であり、内部の構成には興味ありませんね
>>545は概念から学べ

548:デフォルトの名無しさん
08/10/06 01:04:26
証明の結果よりも、証明の仕方に興味があるタイプです。

549:デフォルトの名無しさん
08/10/06 01:06:42
なら数理論理学でも学べよ
C#とは関係ない

550:デフォルトの名無しさん
08/10/06 01:13:31
>>548
それ自体はいいと思うんだが、だからといって三平方の定理レベルの話題で
悩むのはヤバいだろう。

551:デフォルトの名無しさん
08/10/06 01:17:20
三平方の定理=立方体の体積の出し方だと思った俺の居場所は

552:デフォルトの名無しさん
08/10/06 01:22:04
乱数なんてらんだむっぽいのがでりゃいいんだよ。
メルセンヌツイスターなんていらんわ。

553:デフォルトの名無しさん
08/10/06 01:25:34
C#ってなんでメソッドの引数でデフォルト値を廃止してしまったんですか(´・ω・`)?

554:デフォルトの名無しさん
08/10/06 02:16:15
>>553
メソッドオーバーロードで解決できるから
この質問いつも出るからテンプレに入れないか?

555:デフォルトの名無しさん
08/10/06 02:18:06
>>554
C++もメソッドオーバーロードは実装してません?

556:デフォルトの名無しさん
08/10/06 02:21:44
関数オーバーロードでデフォルト引数が表せるのだから
デフォルト引数なんていう分かりにくいものは使わないようにしようという方針

557:デフォルトの名無しさん
08/10/06 03:12:09
C++作ったBjarneも多重定義があればデフォルト引数なんて構文糖、みたいなことを自著に書いていた気がする。

558:デフォルトの名無しさん
08/10/06 03:46:50
デフォルト引数の方が直感的じゃないですか?

多重定義もいいですけどコードが冗長になって保守・管理が面倒くさくなりそうですが・・・

559:デフォルトの名無しさん
08/10/06 08:35:26
デフォルト引数はオーバーロードで出来ても逆は無理だろ。その時点で
どっちがなんて議論じたい意味なし

それとシグニチャと呼び方もよろしくない、デフォルト引数は

560:デフォルトの名無しさん
08/10/06 08:49:34
ドキュメントの保守が面倒だったりはしないのかね
ある機能の説明がオーバーロードされたメソッドごとにあるから
必然的に重複が多くなるし

561:デフォルトの名無しさん
08/10/06 09:13:27
デフォルト引数って、使う人が結局その値を理解する必要があるからね。
単に、無い、という方が安全だよね。

562:デフォルトの名無しさん
08/10/06 10:05:26
デフォルト引数無いのがC#の最大の欠点

563:デフォルトの名無しさん
08/10/06 10:16:24
敢えて無くしたのに
それを欠点と思ってるようじゃC#は向いてないよ

564:デフォルトの名無しさん
08/10/06 10:18:40
public void foo(bool bar = true){
 ・・・
}
で済むところを

public void foo(){
 foo(true);
}

public void foo(bool bar){
 ・・・
}
なんてダラダラ書くのは無駄すぎるな

565:デフォルトの名無しさん
08/10/06 10:29:43
オーバーライドすると途端にカオス

566:デフォルトの名無しさん
08/10/06 10:50:24
デフォルト引数は構造上、後ろから設定しなくてはならないし歯抜けができない。

567:デフォルトの名無しさん
08/10/06 12:42:12
文句があるならC++使えばいいじゃん

568:デフォルトの名無しさん
08/10/06 12:43:36
C++なんかもっと欠点だらけだろ

569:デフォルトの名無しさん
08/10/06 13:06:49
usingとかDisposeを多用しなきゃならん状況になると
C++ならもっと簡単に書けるのに、とか思ってしまう。

570:デフォルトの名無しさん
08/10/06 13:15:31
まそりゃ適材適所
C++の方が簡単に書けるならC++で書けばいい
DllImportだってC++/CLIによるラップだってできるんだから

571:デフォルトの名無しさん
08/10/06 13:20:35
VisualC#2008を使っています。
C#をコンソールからコンパイルする方法を知りたいです。
csc filename.cs
でよいらしいのですが、cscにパスが通っていないようです。
cドライブをcscで検索しても見つからないです。
どなたかご教示いただけないでしょうか。


572:デフォルトの名無しさん
08/10/06 13:25:26
スタートメニューに.NET 2.0 SDKみたいな項目あるだろ
それのSDKコマンドプロンプト使え

573:デフォルトの名無しさん
08/10/06 13:43:18
>572
ないです。
Microsoft Visual C# 2008 Express Edition
はあります。

普通の(WindowsXP標準の)コマンドプロンプトではだめなんですか?


574:デフォルトの名無しさん
08/10/06 13:50:10
C:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe filename.cs
コンパイラのパスは環境によって違うかも分からん
もしくは環境変数PATHにC:\WINDOWS\Microsoft.NET\Framework\v3.5をついかして
csc filename.cs
とかシステム環境変数に入れたくなければ
set PATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5;%PATH%
みたいなバッチファイルを用意してそれを使うとか

575:デフォルトの名無しさん
08/10/06 13:51:35
%windir%\Microsoft.NET\Framework\v?.?
にあるからなあ、検索時Windowsのディレクトリは除外してたかな。

576:デフォルトの名無しさん
08/10/06 13:55:05
標準のコマンドプロンプトからなら、vcvars32.batを実行すりゃいけるよ。
探してパス通ったとこにコピーしておいてみては。

577:デフォルトの名無しさん
08/10/06 13:57:50
>574、575
あ、ありました。Prorgam Fliesばっかり探してました。
Windowsの下だったのですか。
検索はシステムファイルは除いていたかもしれません。
ありがとうございました。


578:デフォルトの名無しさん
08/10/06 16:31:50
なぁ、クラスを作ってそこのメソッドで何らかの「閉じた」処理をさせるとき、
このメソッドは引数を取るようにすべきだと思う?
それとも必要ならクラス内のフィールドやプロパティを読めばいいわけだから
そもそもメソッドに引数なんて指定する必要も無いと思う?

579:デフォルトの名無しさん
08/10/06 18:12:14
どっちかじゃなくて、適切に使い分けろ

580:デフォルトの名無しさん
08/10/06 18:19:10
>>578
フィールドにあるものを利用するならわざわざ引数でやらなくてもいい
ほかのクラスやプロジェクトで利用するようなメソッドなら引数などを考えないといけないけどね

581:デフォルトの名無しさん
08/10/06 18:29:09
くだらない質問ですみません
VC#2008無料版をインストールしたのですが.netFramework SDKのインストールも必要ですか?
それともVC#導入時に組み込まれていますか?

582:デフォルトの名無しさん
08/10/06 18:35:03
大体は入ってる
できればMSDN Library for Visual Studio 2008 SP1を
必要になったらMicrosoft Windows SDK for Windows Vistaを

583:デフォルトの名無しさん
08/10/06 18:41:17
>>582
ありがとう

584:デフォルトの名無しさん
08/10/06 18:44:06
>>580
メソッド間の引数のやりとりだけで実現可能な場合は
わざわざフィールドにする必要ないだろうか?

いまいち変数をフィールドで表現すべきか、メソッド間の引数のやりとりですます
べきかの使い分けが分からないんだが。

フィールドってある意味一昔前のグローバル変数みたいなものだから
安易に多用するのは慎むべきだよな?

585:デフォルトの名無しさん
08/10/06 18:51:59
>>584
privateにしておけば問題ないはずだけど
多分、そのソースに必要な改良はクラスに分割することじゃないかな?

大部分のメソッドはそのフィールド変数を利用しないとするならば
そのフィールド変数は混乱の元だし、そのフィールドを必要とする
メソッドと一緒にクラス化するべき

引数を取るかどうかの判断は、そのメソッドをpublicにするかもしれない場合

586:デフォルトの名無しさん
08/10/06 18:58:12
>>585
裏を返せばそのクラスのフィールドを使わないメソッドは積極的に
違うクラスに分離していけ、ということ?

587:デフォルトの名無しさん
08/10/06 19:16:36
あん裏はやめて

588:デフォルトの名無しさん
08/10/06 19:18:29
っていうか、そもそも「普通は」メソッドの引数を省略する目的で
フィールドを使いたい、などとは思わないはず。

もしそんな欲求に駆られるとしたら何か考え方が間違ってると思うよ。

589:デフォルトの名無しさん
08/10/06 20:11:24
フィールドあれ、と神は最初にいった

590:デフォルトの名無しさん
08/10/06 20:16:53
>>586
public void Swap(int a,int b)
{
 //abの値をスワップ
}

↑ならメソッドの機能を忘れてても直感的どういう動作をするのかわかる

public void Swap()
{
 //フィールド変数のa,bの値をスワップ
}

↑これだとaとbはどういう型なのか、プログラム内でどういう意味を持つ変数なのか
毎回思い出したりしなければならない

591:デフォルトの名無しさん
08/10/06 20:20:50
メソッドもクラスもできるだけ小規模で完結した機能を持ったほうが
のちのち見返した場合わかりやすい

592:デフォルトの名無しさん
08/10/06 20:22:45
Swap(ref int a, ref int b)なら分かるけど

593:デフォルトの名無しさん
08/10/06 20:24:00
>>592
どんな釣りだよ

594:デフォルトの名無しさん
08/10/06 20:39:56
i++;と++i;どっちが速い?

595:デフォルトの名無しさん
08/10/06 20:42:27
いっしょじゃね

596:デフォルトの名無しさん
08/10/06 21:01:18
式の値を使わないならIL上で全く一緒

597:デフォルトの名無しさん
08/10/06 21:23:11
アクセスに統合Windows認証が必要なWebサイトがあり、それのテストを行うために
HTTPリクエストを飛ばしてレスポンスを拾うテストツールを作っています。
デバッグ用なので、生のリクエスト文字列を送り、生のレスポンスを拾いたいため、
TcpClientを使って、HTTPヘッダもユーザが入力できるようにしました。

そこで困っているのですが、TcpClientでの統合Windows認証のやり方がわかりません。
TcpClientで統合Windows認証は可能でしょうか?可能であればどのようにすれば良いのでしょうか。
不可能であればHttpWebRequest等の代替手段を検討しなければ行けないのですが、
統合Windows認証が可能で、ヘッダも含めた生のHTTPリクエストを設定し、生のHTTPレスポンスを
取得できるクラスのようなものはありますでしょうか。

よろしくお願いします。

598:デフォルトの名無しさん
08/10/06 21:24:25
Class追加するときって1クラスにつき1つファイル(拡張子は .cs)を用意して
そこに記述したほうがいい?それともMain()関数があるところの下につらつら
クラスを追加していってもいいんだろうか?

599:デフォルトの名無しさん
08/10/06 21:29:40
内部クラスでないかぎりは1クラス1ファイル

600:デフォルトの名無しさん
08/10/06 21:30:09
どこのJavaだよ

601:デフォルトの名無しさん
08/10/06 21:31:17
クラスが増えてくると、何がなんだかわからなくなるな
UMLとか覚えたほうがいいのかねぇ

602:デフォルトの名無しさん
08/10/06 21:38:35
privateな内部クラスを使えば結構減らせる気がする
一つのクラス内でしか使わなくて外に見せる必要もない型って案外多いよ

603:デフォルトの名無しさん
08/10/06 21:49:26
>>594 前置

604:デフォルトの名無しさん
08/10/06 21:56:32
>>603
>>596

605:デフォルトの名無しさん
08/10/06 22:00:11
垂直方向のプログレスバーきぼんぬ

606:デフォルトの名無しさん
08/10/06 22:02:58
気色悪い奴

607:デフォルトの名無しさん
08/10/06 22:04:27
>>599
どうも(*^ー゚)b

>>600
Javaって一つのファイル内にクラスをつらつら書き連ねていくの?

608:デフォルトの名無しさん
08/10/06 22:17:23
>>602
それらをツリービューで表示されるから、どのクラスがどのクラスと関連があるのかとか
わからなくなるんだよね

関連図をUML風に表示する機能があればいいんだけど
プロエディションならあるんだっけ?

609:デフォルトの名無しさん
08/10/06 22:21:45
>>597
HttpWebRequest なら CredentialCache か何か使って NTLM 認証が可能。
TcpClient を使うなら、パケットキャプチャしてやりとりを確認すれ。

でもさー。Proxy 通れないケースが多いから、インターネット経由だと
かなり厳しいと思うよ。

610:デフォルトの名無しさん
08/10/06 22:28:51
javaはpublicクラスは1ファイル1クラスで名前を合わせる必要があるが、
デフォルトスコープ(internal相当)のクラスはその限りではない。
関連のあるデフォルトスコープクラスはまとめてよい。
ただ、public enumをいちいち別ファイルにさせられるのはちとつらいね。

C#の場合はpublicなenumやらdelegateやらいろいろあるから分けてられないよ。

611:デフォルトの名無しさん
08/10/06 22:36:33
>>609
HttpWebRequestのCredentialCacheで認証して、
GetRequestStreamでStream取得してそこに書き込めばできそうですね。
ありがとうございます。

ちなみに、

>でもさー。Proxy 通れないケースが多いから、インターネット経由だと
>かなり厳しいと思うよ。

これってTcpClientに対してのコメントですか?

612:デフォルトの名無しさん
08/10/06 22:36:33
そういえばネストした型をpublicやprotectedにしたらガイドライン違反になるんだっけ

613:デフォルトの名無しさん
08/10/06 22:37:45
C#をはじめるならこの本がお勧め、って感じの入門書ってありますか?

614:デフォルトの名無しさん
08/10/06 22:39:28
C#以外の経験の有無くらいは書け

615:デフォルトの名無しさん
08/10/06 22:41:19
申し訳ない
Cが文法なら大まかに覚えてる〜程度の素人です
他は無知です

616:デフォルトの名無しさん
08/10/06 22:47:11
>>594
preインクリメントとpostインクリメントのコストの違い
URLリンク(d.hatena.ne.jp)

617:デフォルトの名無しさん
08/10/06 22:50:28
>>616
スレタイぐらい見ろ

618:デフォルトの名無しさん
08/10/06 22:52:10
>>609
すいません、HttpWebRequestのGetRequestStreamの使い方を調べてみたんですが、
ヘッダも含めて、直接HTTPリクエストを書き込める訳では無いみたいですね。
デバッグ用なので、中のデータがどうなっているのかを見るのが最優先なのですが、
そういうリクエストの指定ってできないものでしょうか。


619:デフォルトの名無しさん
08/10/06 22:56:02
>>614
マイコミが初心者テキストとしてもリファレンスとしても使いやすい
マイコミが理解できるレベルならMSDNで十分だろう

620:デフォルトの名無しさん
08/10/06 22:57:12
iを使わない場合最適化されるから一緒、つまり++iが速い。

621:デフォルトの名無しさん
08/10/06 23:00:01
一緒なのに早い?

622:デフォルトの名無しさん
08/10/06 23:00:16
ImageListの全画像をまとめて1つのファイルに
書き出す(読み出す)方法はありますか?

623:デフォルトの名無しさん
08/10/06 23:03:03
>>621
「前置の時と」同じコードに最適化される

624:デフォルトの名無しさん
08/10/06 23:08:25
>>611
違う。NTLM 認証の制限。ケルベロスならいけるのかもしれんけど、
試してないからわからん。

>>618
つかさ、デバッグ用なら、なんでパケットキャプチャしないの?

625:デフォルトの名無しさん
08/10/06 23:09:10
>>622
どうまとめんのさ
複数フレームの画像ならTIFFとかGIF
単に詰め込むだけで良いなら適当なヘッダつけて突っ込んでけ

626:デフォルトの名無しさん
08/10/06 23:13:38
ZipPackageとか

627:デフォルトの名無しさん
08/10/06 23:16:08
大きめのbmpオブジェクトを作って
任意の画像をそこに貼り付けて
適当に保存すればいいんじゃないの?

628:デフォルトの名無しさん
08/10/06 23:17:41
>>590
話はややずれるけど

private int a, b;

public void Swap(int a,int b)
{
this.a = a
this.b = b
}

という書き方って推奨されている?本来は

private int a, b;

public void Swap(int _a,int _b)
{
a = _a
b = _b
}

という書き方の方が正しいのかもしれないけど・・・

629:デフォルトの名無しさん
08/10/06 23:20:59
上が推奨
下はガイドライン違反
下のように書くとすれば、フィールドのa,bの方に_を付ける
「クラス外から見える名前が最優先」

630:デフォルトの名無しさん
08/10/06 23:23:11
このスレに出てくるSwapは俺が思ってるのと全然違うんだが

631:デフォルトの名無しさん
08/10/06 23:27:42
>>624
クライアント側で想定したリクエストを送れているかということと、
あるリクエストを送ったときのサーバ側の動作をみたいので。
前者だけならパケットキャプチャで拾えば良いと思いますけど、
後者のために任意のリクエストを送れるツールが欲しいのです。


632:デフォルトの名無しさん
08/10/06 23:29:24
public static void Swap(ref int a, ref int b)
{
int tmp = a;
a = b;
b = tmp;
}


633:デフォルトの名無しさん
08/10/06 23:29:50
>>631
IIS リソキに含まれてるツールでも使えばいいじゃん。

634:デフォルトの名無しさん
08/10/06 23:34:24
KeyedCollectionのGetKeyForItemは何を書けばいいの?

635:デフォルトの名無しさん
08/10/06 23:37:31
return item.Name;みたいに
要素自身が含むキーとして使える値を返す

636:デフォルトの名無しさん
08/10/06 23:38:45
>>631
興味本位で調べただけだから外してるかも知れん。
NegotiateStreamってクラスがあるらしい。(.Net2.0から)

637:デフォルトの名無しさん
08/10/06 23:41:42
>>675 どーも

638:デフォルトの名無しさん
08/10/07 00:06:23
Object a=new Object();
Object b=a;
Object c=b;
の場合、cにはaの値のアドレスのコピーを持っているbの値が代入されるということですか?
つまり、cの値を得ようとすると、コンピュータは一旦bを経由してからaにたどり着くの?
もしそうなら、コピーするほど、処理が重くなる?

639:デフォルトの名無しさん
08/10/07 00:13:03
経由しないよ

640:デフォルトの名無しさん
08/10/07 00:13:06
ならない
全部同じ

641:デフォルトの名無しさん
08/10/07 00:22:10
こっちが分かり易い。

Object ^a = gcnew Object();
Object ^b = a;
Object ^c = b;

642:デフォルトの名無しさん
08/10/07 00:24:45
>>638
ありきたりに、変数のアドレスってのを
コインロッカーのキー番号に例えると、

Object a = new Object();
の時点で、ロッカーを1箇所確保、そのキー番号を a に代入。
仮に、たとえば、そのキー番号が 5 (適当)だったとすると、

Object b = a; // キー番号 5 を b にコピー
Object c = b; // 同じく、5 を c にコピー
という状態になる。

a.Property も b.Property も c.Property も、
どれも 5 というキー番号を経由して、同じロッカーを参照。

643:デフォルトの名無しさん
08/10/07 00:51:04
>>629
> 上が推奨
> 下はガイドライン違反

マジっすか( ´・ω・)!
上が推奨だったとは・・・

毎回下の方式でやってて、 _a とか tmp_a とか名前考えるのが面倒だったんだよ。
上でいいならこれからジャンジャン this. を使わせてもらうよ

644:デフォルトの名無しさん
08/10/07 00:54:25
むしろ俺はメンバーには this. 必ず付ける派なんだが。

645:デフォルトの名無しさん
08/10/07 00:58:01
>>644
フィールドに毎回 this. つけるのって面倒だし見づらくない?

646:デフォルトの名無しさん
08/10/07 01:03:43
>>645
フィールドであることを区別する意味ではありだと思う。
それを _ つけて区別するくらいなら、this の方がタッチタイプしやすい。
アンダーバーとかの記号は打ちにくいのよね。

647:デフォルトの名無しさん
08/10/07 01:08:30
this付けるのはフィールドのみ?
メソッドやプロパティにはどうする?

648:デフォルトの名無しさん
08/10/07 01:16:21
フィールドにアクセスするときにわざわざthis.を頭に付けることなんて推奨されてたか?

649:デフォルトの名無しさん
08/10/07 01:18:33
俺はつける。

650:デフォルトの名無しさん
08/10/07 01:20:15
お前の話なんてどうでもいいんだ黙ってろ

651:デフォルトの名無しさん
08/10/07 01:21:14
>>638
もしその考え方が正しいとするならば、

Object a=new int[] {1,2,3};
Object b=a;
Object a=new int[] {4,5,6};

このときにbの値を得ようとしてint[] {4,5,6}を取得することになるよ?
んな馬鹿な話あるわけない。
つーか上記のテストコード書いて試したらすぐ確認とれるだろ。

なんでも質問するようではプログラミングなぞ向いていない。
これくらいの疑問なら自分の頭使って自力で解決できないとちと厳しいぞ。

652:デフォルトの名無しさん
08/10/07 01:24:48
>>639-642
ありがとうございます。
ずっと疑問だったんで気になってました
高級言語になるほど、内部がどうなってるか見通し利かないでうよねぇ

653:デフォルトの名無しさん
08/10/07 01:26:42
全部付ける派の人は
継承されたメンバにアクセスするときもthis付けるのかな
それともbase?

654:デフォルトの名無しさん
08/10/07 01:32:14
>>651
それの場合新しいインスタンスを代入しているんだから
bの値を得ようとするわけないのはバカでもわかります

というか、テストコードってどう書くんですか?
cに入っているアドレスが、aの値のアドレスかどうかなんて
あのプログラム動かしただけではわからないはずですけどね

参照の「コピー」というぐらいだから、コピー用に新しくメモリが割り当てられているのでは
と思ったのが勘違いです。だから、cにはaの参照がコピーされたメモリへの参照のコピーと思ったしだいです

655:デフォルトの名無しさん
08/10/07 01:36:54
これは参照です的な目印がないからな〜

656:デフォルトの名無しさん
08/10/07 01:47:44
struct Vector
{
public double X, Y, Z;
public double Length
{
get
{
return Math.Sqrt(X * X + Y * Y + Z * Z);
}
set
{
//現在の長さを取得
double lng = this.Length;

//成分を変更する
X *= value / lng;
Y *= value / lng;
Z *= value / lng;
}
}
}

サンプル用の自作ベクトル構造体
全部付ける派の人ってのはこれにも全部つけるの?
return Math.Sqrt(this.X * this.X + this.Y * this.Y + this.Z * this.Z);
とか激しくキモいんだが。

俺はプロパティとフィールドの違いを見るためにプロパティは付ける。
あとはローカル変数とフィールドの区別が必要なときにも当然付ける。
あとは付けない。

657:デフォルトの名無しさん
08/10/07 03:01:19
メソッドに参照渡しするときに、宣言だけしたパラメータを渡そうとすると

int[] a;

HogeMethod( a );

「未割り当てのローカル変数 'a が使用されました。」

てなエラーが返されてしまう。

int[] a = null;

HogeMethod( a );

とすれば問題なくコンパイルは通るんだが、これって汚くない?
わざわざnullを割り当ててから参照渡しするのはどうも無駄なステップを
踏まされているように思えて仕方がないんだが。上のようなスマートな
方法も通用して然るべきだと思わん?



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

5381日前に更新/215 KB
担当:undef