ふらっとC#,C♯,C#(初心者用) Part36at TECH
ふらっとC#,C♯,C#(初心者用) Part36 - 暇つぶし2ch369:デフォルトの名無しさん
09/01/30 08:52:34
安価ミス
>>361

370:デフォルトの名無しさん
09/01/30 10:57:19
ArrayListやList<T>において、
list.Add(new T())
といった感じで配列に追加している場合、
削除系メソッド(Clear、Remove、RemoveAllなど)実行したときに配列内のクラスのインスタンスは
開放されないのでしょうか?


371:デフォルトの名無しさん
09/01/30 11:01:05
その要素を他が参照してなかったらGC対象になる

372:デフォルトの名無しさん
09/01/30 11:09:48
>>371
そういうことなのですね。ありがとうございました。

373:デフォルトの名無しさん
09/01/30 15:09:36
"バイト"や"キログラム"のような単位を表す文字列を
設定されたカルチャに応じて取得できるクラスないですか?

374:デフォルトの名無しさん
09/01/30 15:22:26
標準ライブラリには無い
複数形とか考えると多分作るのは不可能に近い

375:デフォルトの名無しさん
09/01/30 18:15:54
不可能ってこたねえだろ

376:デフォルトの名無しさん
09/01/30 18:46:52
>>375
渦中って読めますか?

377:デフォルトの名無しさん
09/01/30 18:51:34
俺もそんなクラスほしい
標準であってもいいよね

関係ないけど「OK」「キャンセル」「適用」 とかも欲しかった

378:デフォルトの名無しさん
09/01/30 19:14:29
ってか、C#おもろいけど、GUI案件がないからモチベあがんないんだよね。言語的にはいいんだけど。

しょうがないから、ASP.NETもじもじやってる。

379:デフォルトの名無しさん
09/01/30 19:47:32
C#とついでにSilverLigitもやったんだけど、案件が全然ねえ(;´д`)俺は馬鹿だったのか?

380:デフォルトの名無しさん
09/01/30 19:54:31
わざわざ.netを指定してくる企業って皆無では・・・

381:デフォルトの名無しさん
09/01/30 20:20:23
おれずっとc#でやってたよ。MSとちょっと関係ある会社だけど

382:デフォルトの名無しさん
09/01/30 20:21:56
VS2008 + .net2.0

dirフォルダ内のサブフォルダの中身も含めたファイルの個数を出したいです。

using System.IO;
string[] files = Directory.GetFiles( dir, "*", SearchOption.AllDirectories);
として、files.Length を数えてるんだけど、ファイル数が5000とかあるフォルダを
検索しなくちゃならないので、さすがに遅いです。

この段階ではファイル名のstringは使わないので、個数だけで良いのですが、
サクっと出せるような方法ありませんか?

383:デフォルトの名無しさん
09/01/30 20:48:30
ないよ
遅いのは結局IOであってファイル名とかはほぼ関係ない

384:デフォルトの名無しさん
09/01/30 20:49:49
>>383
了解しました。
我慢します。

385:デフォルトの名無しさん
09/01/30 21:01:30
Rectangle rect;
rect = null;

としたところ、Rectangle 型なのでnullは入れられないと言われました!
VB.NETだと、どんな型の変数にも Nothing を入れられるのでつい同じかと
思っていました。どうやったら同等の処置が可能でしょうか、よろしくお願いします。



386:デフォルトの名無しさん
09/01/30 21:04:19
VBでも本当にNothingを入れることはできないよ
Rectangle? rect;
rect = null;
※使うときはRectangleにキャストすること

387:デフォルトの名無しさん
09/01/30 21:05:31
>>385
Rectangleは値型だっけか。これでどうだ。
Rectangle? rect = null;


388:デフォルトの名無しさん
09/01/30 21:13:03
>>385
VB の Nothing は null じゃなくて Zero Fill な値(既定値)だからな
C# 的には null と既定値は区別される。C# 的には VB の Nothing
は default(T)。

なので VB の Nothing 代入に近いのは
var rect = default(Rectangle);
だぁね

389:デフォルトの名無しさん
09/01/30 21:15:16
>>386-387
どうもです。やってみましたところ、キャストを入れた上で一応解決かと思った
のですが、一つだけ問題がでました。Contains()メソッドを使っているところで
'System.Nullable<System.Drawing.Rectangle>' に 'Contains' の定義がありません
というエラーとなりました。これは

if ((Rectangle)rect.Contains(e.Location))
{・・・}

のように使ってみたのですが、他の書き方しないとだめでしょうか。


390:デフォルトの名無しさん
09/01/30 21:18:27
>>388
ご教示どうもです、知りませんでした。

>なので VB の Nothing 代入に近いのは
>var rect = default(Rectangle);

こういうのもあるんですか!この場合は
if (rectG != null){・・・} 
のように使えるでしょうか。そうだ、やってみます。

391:デフォルトの名無しさん
09/01/30 21:19:56
((Rectangle)rect).Contains
>>390
できません
rectG!=default(Rectangle)ならできるけど(0, 0, 0, 0)とは区別できないよ

392:デフォルトの名無しさん
09/01/30 21:23:29
defaultはgenericで使うことを前提に作られているんで若干癖がある。
Rect(0,0,0,0)に初期化することが目的なら
var rect = new Rectangle();
未初期化のRectangleが欲しいのなら
Rectangle rect;
でいい。

393:デフォルトの名無しさん
09/01/30 21:24:41
>>390
おおっと。
いや VB 使っているうちは VB の流儀でいっていいと思うんだが
C# に来たんだから C# の流儀にあわせて区別しような。
Rectangle? val = null;
のほうを使えってことだけど。

>>389 のほうは rect.Value.Contains(e.Location) な。
null だったら例外出るが。例外がいやなら

if( rect.HasValue && rect.Value.Contains(e.Location) )

かね。


394:デフォルトの名無しさん
09/01/30 21:24:56
>>391
>((Rectangle)rect).Contains
早速ありがとうございます、これで大丈夫でした、助かりました。
>rectG!=default(Rectangle)ならできる
わかりました。いろいろご教示ありがとうございました!

皆様本当にありがとうございました!またよろしくお願いします!!

395:デフォルトの名無しさん
09/01/30 21:26:18
うぽ!
(rect ?? new Rectangle()).Value.Contains(


396:デフォルトの名無しさん
09/01/30 21:26:39
っていうかVBでも値型をNothingと比較するのはダメだろ
ゼロ初期化されたものと同じとわかっててやるならいいけど,>>394はわかってなさそう

397:デフォルトの名無しさん
09/01/30 21:31:15
>>392
>>393
>>395
C#の凄い表現のバリエーションにびっくりです、またこれから勉強致します。

>>396
わかってなかったです。すみません・・・。

ではまた。

398:デフォルトの名無しさん
09/01/30 21:33:38
Rectangleをnullと初期化したあとにどう使うんだろう・・・

399:デフォルトの名無しさん
09/01/30 21:40:02
フラグ代わりだよ
Rectangle rect;
bool isRectAssigned;
みたいなのってよく出てくるだろ
これを一つにまとめたのがnullable

400:デフォルトの名無しさん
09/01/30 21:43:05
IList<T> list = new List<T>();
とかやってたら、IListの方にはForEach()がなくて涙目なんだけど、そういうもんなの?

401:デフォルトの名無しさん
09/01/30 21:55:52
ForEachぐらい自分で書けばって

402:デフォルトの名無しさん
09/01/30 22:07:07
nullable ってキモいからまだ使ったことがないな
すこし慣れてみるか……

403:デフォルトの名無しさん
09/01/30 22:09:46
拡張メソッドで自作するのは簡単
でもEnumerable.ForEachが無いことを考えると,素直にforeach書けということなんだろうと思う

404:デフォルトの名無しさん
09/01/30 22:26:01
WPFではShowDialogの戻り値がbool?になってたりするね

405:デフォルトの名無しさん
09/01/30 22:48:24
正確に20msで処理をしてFORMのPictureBoxを触りたいときは、
BackgroundWorker+System.Timers+AutoResetEventでいいですか?
他にもっといいやり方があるんなら教えて欲しいのですが…orz

406:デフォルトの名無しさん
09/01/30 22:57:49
>>405
> 正確に20ms
まずこれが難しい。timeBeginPeriod か MMCSS 使えば
ある程度いけるかもしれないけど、あくまである程度。
さらにいいやり方となると Forms 使うのが間違ってる。


407:デフォルトの名無しさん
09/01/30 22:58:20
20msは厳しいんじゃないの
更新間隔は20msよりも長くして,
そのつど経過時間を計測してそれから計算してその結果をもとにしてPictureBoxを更新したほうが

408:デフォルトの名無しさん
09/01/30 23:06:23
コールバック間隔は,Application.Idleイベント使うなり自分でメッセージループ回すなりして
その中でStopwatch使って時間計測すればある程度正確にできるけど
フォームの更新が20msでは絶対無理

409:デフォルトの名無しさん
09/01/30 23:27:55
20msってどこから来たの?
測定機械のタイミングとか?
GUIの更新は後回しにした方がいいんじゃね?

410:デフォルトの名無しさん
09/01/31 00:53:40
20msってWindowsのインターバルタイマーで拾えるの?
割り込み上がっても、処理が間にあわん気がするんだけどね
リアルタイムOSでというのなら分からんでもないけど。
#組み込み用が対象なのかな?
割り込み->データをFIFOQueueに追加->queueのデータをGUI処理
になるんだろうけど(sharedメモリ経由か)
#割り込みコンテキストってWinにはあるのかな?

411:デフォルトの名無しさん
09/01/31 02:40:33
いつも思うんだが、なんか2chって日本語として成立してない質問でも適当にESPを働かせて、
(というより、回答する側も他人の文章を正確に読解する能力がないだけ、という方が
より真相に近いと思うんだが)回答する奴が多すぎないかね。

>>405
「正確に20msで処理をして」とはどういう意味?
正確に20ms間隔でイベント処理をしたい、って意味なの?
いずれにしても、「正確」という表現はもっと定量的な表現にする必要があるだろ?

仮に20ms間隔でGUIを更新したい、って意味だとしたら、
今時のPCなら単純にSystem.Timers.Timer使っても±5ms以内の誤差で可能だと思うけど。

少なくとも、平均速度として50回/秒が実現できればいいということなら
(意味があるかどうかは別として)ほぼ確実に出来ると思う。

もちろん糞重い描画処理をしてたらあっという間に破綻するけど。

いざとなったらスレッドでThread.Sleep(0)と、Stopwatchをポーリングして
20msごとにControl.BeginInvoke()を実行する無限ループで実装したっていいし。

412:デフォルトの名無しさん
09/01/31 04:51:35
えらい自信だからためしに作ってみたけど
System.Timers.Timerなんて無茶苦茶ばらつくじゃないか


413:デフォルトの名無しさん
09/01/31 09:07:32
エスパーで解釈すると、
20msecでコントロールのアップデートはありえないから、
CreateGraphics()で得たGraphicsで直接描こうとしている。
CreateGraphics() + GDI+メソッドは別スレッドからでも使える。
こういう用途にはFormかPanelが適当なのだけどVB6以来の伝統かPictureBoxを使いたがる人が多い。
Timers.Timerはタイマーイベントの処理時間分、間隔がずれてゆくはずだからその分の解消をしたい。
そんなとこだろ。

414:デフォルトの名無しさん
09/01/31 11:17:09
>20msecでコントロールのアップデートはありえないから、
>CreateGraphics()で得たGraphicsで直接描こうとしている。

じゃあオフスクリーンにも20msecで描画する必要ないじゃん

415:デフォルトの名無しさん
09/01/31 11:41:59
へっぽこエスパーばっかりだな
とくに>>411

416:デフォルトの名無しさん
09/01/31 11:52:58
>>414
オフスクリーン
というのはどこから出てきたんだ?

417:デフォルトの名無しさん
09/01/31 11:58:29
まあ>>405が来るのを待とうじゃないか


418:デフォルトの名無しさん
09/01/31 11:58:36
どうやってもGDI+で20msは厳しいでしょ

419:デフォルトの名無しさん
09/01/31 11:59:47
オンでもオフでも問題の本質は一緒でしょ
>20msecでコントロールのアップデートはありえない
のなら20msec間隔で描画する必要がない

420:デフォルトの名無しさん
09/01/31 12:01:13
そのオン、オフというのを説明してもらいたいのだが・・・

421:デフォルトの名無しさん
09/01/31 12:02:12
ダブルバッファリングじゃないの

422:デフォルトの名無しさん
09/01/31 12:06:59
へっぽこエスパーダブルバッファリングも知らないのかよ

423:デフォルトの名無しさん
09/01/31 12:09:33
やっぱりダブルバッファのことね。それを使うとは一言も言ってない。
フォームにパネルとSystem.Timers.Timerはって、20msecに設定でこれ。

Font stockFont = new Font(FontFamily.GenericMonospace, 14);
int locs = 0;

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
  using (Graphics g = panel1.CreateGraphics())
  {
    g.FillRectangle(Brushes.Blue, new Rectangle(8, 8 + 28 * locs, 14 * 20, 28));
    g.DrawString(Environment.TickCount.ToString(), stockFont, Brushes.Yellow, 10, 10 + 28 * locs);
    locs++; if (locs >= 5) locs = 0;
  }
}


424:デフォルトの名無しさん
09/01/31 12:24:11
Direct3Dでも使わないと描画間に合わないだろ

425:デフォルトの名無しさん
09/01/31 12:24:57
へっぽこエスパー
ありえないとか言いながら20msecでコントロール(panel)のアップデートしてんじゃねーよ



426:デフォルトの名無しさん
09/01/31 12:33:10
なんか子供だなぁ。

ありえないのは、Control.Invokeを使うこと。
他のスレッドからだからPanel1.Update()も使えない。
Timers.Timerをフォームに貼り付けてと書いたけど、実際はコードでnewしてる。
フォームに張りつけた場合は、ここだけthisからnullに変更してくれ。
this.timer1.SynchronizingObject = null;

427:デフォルトの名無しさん
09/01/31 12:36:52
WindowsXP、VisualC#2008環境で質問があります。
フォルダの[ツール]-[フォルダオプション]で表示できるフォルダオプションのウィンドウを開くには、なにを呼び出せばいいですか?
可能なら、表示オプションのタブをクリックした状態にしたいです。
どなたかご教示ください。よろしくお願いします。
この中身を編集するということは、レジストリをいじるということかと思いますが、その場合、どのような方法を取ればよいでしょう?
違っていたらご指摘いただけないでしょうか。


428:デフォルトの名無しさん
09/01/31 12:37:52
だから描画間に合わなかったらどうすんの?
>>423くらいの処理なら間に合わないこともないかもしれないけど一時的に遅れることだってあるだろ

429:デフォルトの名無しさん
09/01/31 12:46:55
>>428
それで>>405がAutoResetEventと書いてるのだと思うよ。
つまり間に合わなかった場合は、その分間隔を遅延させるか1回か数回とばすか。
実現する方法はいくつかあるが、AutoResetEventを使うのはとばす方のロジックで使える。
この辺は普通にゲームの描画のアルゴリズムだと思うんだけどな。


430:デフォルトの名無しさん
09/01/31 13:17:19
>>427
Vistaだったら
::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{6DFD7C5C-2451-11D3-A299-00C04F8EF6AF}
なんだけど。これをShellExecute。
XPはシラネ

あとはRegistryクラスで編集、WM_SETTINGCHANGEDをブロードキャストとかかのう

431:デフォルトの名無しさん
09/01/31 14:38:10
で20ms間隔で描画できたかい?そんなコードだと無理に決まってるけどw

432:デフォルトの名無しさん
09/01/31 14:41:32
Expression Treeで動的生成されたメソッドって一回作ったらそのまま解放されないの?
頻繁に式木作って評価するならインタプリタ作った方がいいのかな

433:デフォルトの名無しさん
09/01/31 14:50:43
クラスデザイナの関連付けってなにしてくれるの?
関連付けされたクラスのコンストラクタが、
関連元クラスに追加されるみたいだけど、何につかうんだべ。

434:デフォルトの名無しさん
09/01/31 14:56:27
System.Threading.Timer使ってConsoleアプリケーションで、

コールバックは、
・1000回呼ばれたら終了イベント上げる
・開始前と最後のコールバック時に時刻表示

メインは
・1秒後から20msecでコールバックするようにタイマーセット
・終了イベントが上がってきたらタイマーをdisposeして終了

という事実上タイマーが使われるだけで何もしないサンプルをためしに
作ってみたが、32秒かかるよ。最初の1秒待ち差し引いても、平均31msec
呼ばれるのにかかってる。

435:デフォルトの名無しさん
09/01/31 15:36:14
>>434
20msecといってるのは>>405でTimers.Timerにこだわる必要もないのだが。
ただ1000回で31秒かかるというのはおかしいな。
長いがコードはるね。Celeron1.4G WinXPで00:00:20.0493193だった。

using System;
using System.Threading;
class Startup { 
 void Test() {
   using (var timer1 = new System.Timers.Timer()) {
    timer1.Interval = 20;
    int counter = 0;
    timer1.Elapsed += (o, e) => { 
      if (++counter >= 1000) lock (this) Monitor.Pulse(this);
    };
    var sw = System.Diagnostics.Stopwatch.StartNew();
    timer1.Start(); 
    lock (this) Monitor.Wait(this);
    timer1.Stop();
    sw.Stop(); Console.WriteLine(sw.Elapsed);
   }
 }
 static void Main() { new Startup().Test(); }
}


436:デフォルトの名無しさん
09/01/31 16:30:27
Directoryを外部から隠蔽したいのですが、どんな感じに実装したらいいですか?

private Directory<int,int> _dic;
public Directory<int,int> dic{
get ...
set ...
}
みたいにそのままプロパティにしちゃうと、外からdic[key]=1;って叩けないですよね?

437:デフォルトの名無しさん
09/01/31 16:37:42
>436
public int this[int key] { get { return _dic[key]; } }
みたいに隠蔽して必要な値を取得できるメソッドとかだけ公開すれば操作はしようがないので堅いよ。

438:デフォルトの名無しさん
09/01/31 16:47:53
>>436
外から叩けちゃうと隠蔽にならないんだが、そのコードなら別に外から叩けるな。


439:デフォルトの名無しさん
09/01/31 16:48:30
内部にラップしてるDictionaryをそのままの型で公開しちゃったら隠蔽にならないから

440:デフォルトの名無しさん
09/01/31 16:58:52
>>435
>ただ1000回で31秒かかるというのはおかしいな。
>長いがコードはるね。Celeron1.4G WinXPで00:00:20.0493193だった。

ハードウェア割り込みタイマーの周期次第じゃないの?
この周期はどこかのアプリがtimeBeginPeriodを使うだけで
簡単に変わるから、単純にOSとCPUだけ並べて
おかしい/おかしくないとは言えないよ。

Windowsだとデフォルトの割り込み間隔が16msecってのはよくある値だし
20msecのタイマーを仕掛けたら32msecごとにコールバックされていた
と考えればむしろ辻褄があう。(32msec×1000で約32s)

>>434 の環境でメディアプレイヤーなんかを同時に起動してるだけで
結果は変わるんじゃないかね。

441:デフォルトの名無しさん
09/01/31 17:05:31
単に終了イベントを待つのにビジーループさせてるんとちゃう

442:デフォルトの名無しさん
09/01/31 17:12:00
C#で、書き方を迷っているんだけど、ちょっと相談に乗ってくれないか
例えば、ファイルコピーをするメソッドで、コピー元が無ければ例外を発生する場合

public bool CopyTo(string fromFileName, string toFileName)

1)
if (!this.GetIsFileExistsfromFileName,  
 throw new FileNotFoundException();
System.IO.File.Copy(fromFileName, toFileName, true);
return true;

2)
if (this.GetIsFileExists(fromFileName),  
{
 System.IO.File.Copy(fromFileName, toFileName, true);
 return true;
}
else
 throw new FileNotFoundException();

上下のどちらがいいのかな。

443:デフォルトの名無しさん
09/01/31 17:13:15
それを踏まえて、さらにコピーの上書不許可時にコピー先にファイル名存在でfalseを返すとき
public bool CopyTo(string fromFileName, string toFileName, bool canOverride)

1)
if (!this.GetIsFileExists(fromFileName))
 throw new FileNotFoundException();
if (!canOverride)
{
 if (this.GetIsFileExists(toFileName))
 return false;
}
System.IO.File.Copy(fromFileName,toFileName, false);
return true;

2)//ビルド時にエラーになるかも
if (this.GetIsFileExists(fromFileName))
{
 if (canOverride)
 {
  System.IO.File.Copy(fromFileName,toFileName, false);
  return true;
 }
 else
 {
  if (this.GetIsFileExists(toFileName))
  return false;
 }
}
else
 throw new FileNotFoundException();



444:デフォルトの名無しさん
09/01/31 17:13:52
3)
if (this.GetIsFileExists(fromFileName))
{
 if (!canOverride)
 {
  if (!this.GetIsFileExists(toFileName))
  {
   System.IO.File.Copy(fromFileName,toFileName, false);
   return true;
  }
 }
}
else
 throw new FileNotFoundException();
return false;

こんな書き方があると思うんだけど、見やすいというか、わかりやすい書き方が思いつかない。
なんかいいアイデアないかな・・

445:デフォルトの名無しさん
09/01/31 17:14:35
引数チェックは上にまとめたいから1

446:デフォルトの名無しさん
09/01/31 17:15:19
bool返す必要があるのか疑問ではある

447:デフォルトの名無しさん
09/01/31 17:18:02
説明がないとわからないようなbool値を返すな

448:434
09/01/31 17:21:02
んじゃおれも貼ってみる。ヘルプのサンプル改変だけど、どこかおかしい?
using System;
using System.Threading;
using System.Collections.Generic;
class TimerExample
{
  static void Main()
  {  AutoResetEvent autoEvent   = new AutoResetEvent(false);
    StatusChecker statusChecker = new StatusChecker(1000);
    TimerCallback timerDelegate = new TimerCallback(statusChecker.CheckStatus);
    Timer stateTimer = new Timer(timerDelegate, autoEvent, 1000, 20);
    autoEvent.WaitOne(60000, false);
    stateTimer.Dispose();
  }
}
class StatusChecker
{
  int invokeCount, maxCount;
  public StatusChecker(int count)
  {  invokeCount = 0;
    maxCount = count;
    Console.WriteLine(DateTime.Now);
  }
  public void CheckStatus(Object stateInfo)
  {  AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
    if(++invokeCount == maxCount){
      Console.WriteLine(DateTime.Now);
      autoEvent.Set();
    }
  }
}

449:デフォルトの名無しさん
09/01/31 17:27:03
>>435 のコードを実行してみた

Pentium4@2G WinXP .NET 3.5SP1
結果 00:00:31.2455778

というわけで31秒かかる環境はここにもある。

450:434
09/01/31 17:34:00
>>435のコードは31.193秒だった。同じだね。
Vista Home Premium
Core2 Duo T7300@2.00GHz

451:デフォルトの名無しさん
09/01/31 17:38:53
>>448
こちらは、21-22秒で完了。起動時の1秒待機があるから20.5秒くらい。
>>440の説が正しいなこりゃ。


452:デフォルトの名無しさん
09/01/31 17:45:43
戻り値と例外モデルが混在してるのがイライラする。

453:デフォルトの名無しさん
09/01/31 17:50:32
リアルタイムOSじゃないんだから無理ってのが出ないのはそこまでの正確さは求めていないってこと?

454:434
09/01/31 18:08:02
しつこいが、System.Windows.Forms.Timerでも試してみた。
private void timer1_Tick(object sender, EventArgs e)
{
label3.Text = (Convert.ToInt32(label3.Text) + 1).ToString();
}
というカウントアップをリアルタイム描画。
1000回回して31.24秒だった。
もういいや。

>>453
それは、(ひょっとすると元質問者以外は)百も承知でしょ。

455:デフォルトの名無しさん
09/01/31 18:47:05
>>445-447
ごめん、例が悪かったね。返り値が必要/不必要という点でなくて、
そういう返り値を出したいとき、どう書くのがいいのかなと思って。

別の例を出したほうが理解してもらいやすいのかな。
public int GetType(string word) 例えばword=="nullpo"の時0で、それ以外1を返すとき、
わかりやすいのはどれだろう。

if (word == "nullpo") ■1
 return 0;
else
 return 1;

if (word == "nullpo") ■2
 return 0;
return 1;

int type = 1;
if (word == "nullpo") ■3
 type = 0;
return type;



456:デフォルトの名無しさん
09/01/31 18:48:24
それを踏まえて、canAcceptNullpoがTrueの時には、1を返したいとすると、
public int GetType(string word, bool canAcceptNullpo)

if (word == "nullpo") ■a
 if (canAcceptNullpo)
  return 1;
 else
  return 0;
else
 return 1;

if (canAcceptNullpo) ■b
 return 1;
else
 if (word == "nullpo")
  return 0;
 else
  return 1;

if (canAcceptNullpo) ■c
 return 1;
if (word == "nullpo")
 return 0;
else
 return 1;

などあると思うけど、もしわかりやすいアイデアあったら頼みます。

457:デフォルトの名無しさん
09/01/31 19:02:09
うぽ
return (word == "nullpo") ?  ((canAcceptNullpo) ? 1: 0) : 1;
というのは冗談として、
事前条件的なものは早めにチェックして単独でreturnしたほうがいいと思いますよ。
引数の検査、つまりnullチェックのや範囲チェック的なものはそれ。


458:デフォルトの名無しさん
09/01/31 19:05:44
正直、「それを踏まえて」の人が何を主張したいのかよーわからん。
どうでもいいだろそんなの。

そもそも最初の質問者の質問意図と全然違うこと言ってるのに「それを踏まえて」
ってどういう神経?

459:デフォルトの名無しさん
09/01/31 19:11:33
戻り値と例外モデル混ぜるなってアドバイスは
素直に受け止めておいたほうがいいとおも
例外の役割のうちに一貫したエラー処理メカニズムの提供があるんだから
>>455-456よりよほど重要だ

460:デフォルトの名無しさん
09/01/31 19:12:19
エラー処理じゃないか。通知だね

461:デフォルトの名無しさん
09/01/31 21:02:03
Visual Studioで質問

デバックなしで実行。
開いたウィンドウをクリックすると
そのウィンドウが最小化されてしまう。
つまり最大化やら最小化ができない。

複雑でも何でもないんだが教えてくれ…

462:デフォルトの名無しさん
09/01/31 21:03:23
で、どこに質問があるの?

463:デフォルトの名無しさん
09/01/31 21:09:12
>>461
フォームのプロパティを確認しろ

464:デフォルトの名無しさん
09/01/31 22:13:49
みんなありがとう。なんか釈然としなくてね。

>>457
単独で、returnできるうちにしてしまうってのが正解なのかな。やっぱり。

>>458
>どうでもいいだろそんなの。
それならいいんだけどね。なら動けばなんだっていいみたいな感じが自分ではするので、
何か可読性がよく、わかりやすい方法が内かなと思って。

「それを踏まえて」の前はif文によって異なるreturn値を返す方法についての方法論を示したということ。
「それを踏まえて」の後は、その異なるreturn値に、さらに例外がでてきた場合の例なんだけど、
書いていて旨い例が見つからず、何かもっと言い例がないかなと思ったの。

>>459
了解、心にとめておきます。
ただ、手近にあってソースで例を書いたので、戻り値と例外が一緒くたの例になってしまった。
例が悪かった。すまない。よければ、>>455>>456の書き方で、
自分はこうしてるみたいな理由があったら教えてほしい。

465:デフォルトの名無しさん
09/01/31 22:25:50
だからそんなことどうでもいいって。
もう、そんな些細なことに固執して宗教論争してても飯が食えるような
牧歌的な時代じゃないんだから。

もっと他に理解したり習得したりすべきことが山ほどあるだろ。

466:デフォルトの名無しさん
09/01/31 23:21:19
>>464
そういう些細なことまで書いてあるCode Completeって本がある
複数リターンについても記述があったはずだからまずは立ち読みで

467:デフォルトの名無しさん
09/01/31 23:49:29
>>465
どうでも良くないだろ。こういうのは大事だぞ。
生産性や可視性の観点から重要。
最近はPCの性能が良くなったからか、
同じスコープでインスタンスを返すループを伴うメソッドやプロパティを、
何の資源も消費せずに、いくらでもインスタンスが出てくる
打ち出の小槌みたいに簡単に使う傾向があるしな。

468:デフォルトの名無しさん
09/02/01 00:12:10
命名規則で質問ですが

動詞に対する結果を示すbool型変数の名前はどうしてますか

IsCreated IsClosed 等、Is○○○だと英文法的におかしいので

469:デフォルトの名無しさん
09/02/01 00:14:59
おかしくないですよ。

470:デフォルトの名無しさん
09/02/01 00:15:53
IsCreated IsClosedなんて.NET Frameworkのクラスライブラリにいくらでもあるし
英文法的にも別におかしくない

471:468
09/02/01 00:25:58
そうですかありがとうございます

472:デフォルトの名無しさん
09/02/01 02:31:40
URLリンク(ja.wikipedia.org)

473:デフォルトの名無しさん
09/02/01 03:09:39
Process.Startで起動した外部プログラムからの
戻り値を受け取ることは出来ますか?

474:デフォルトの名無しさん
09/02/01 03:10:50
ExitCodeプロパティ


475:デフォルトの名無しさん
09/02/01 05:30:49
>>468
引数やインスタンス名まで含めて一つのセンテンスと捉えると、寧ろ自然なことが多い

476:デフォルトの名無しさん
09/02/01 10:03:38
HashSetがなぜか見つからない言われるなーと思ったら
Genericの中でこいつだけdllが違うのか
しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。

477:デフォルトの名無しさん
09/02/01 10:24:45
3.5で追加されたもんだから仕方ない
一応csc.rspには入ってるけどな

478:デフォルトの名無しさん
09/02/01 11:21:44
HashSetってなんに使うんだ?

479:デフォルトの名無しさん
09/02/01 11:30:00
>>476
>しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。

プロジェクトテンプレートの設定次第。
デフォルトで参照設定に追加されている人も結構多いはず。
LINQ用のクラスもSystem.Coreに含まれてるから。

LINQを使うのにいちいち参照設定が必要だったって人はあんまり見ないよね?
そういう人ははHashSetも最初からIntelliSenseに表示されるように見えているはず。

480:デフォルトの名無しさん
09/02/01 11:36:44
>>468
bool型のプロパティの名前をisやhasで始まるのは定番中の定番。
isなしで形容詞or過去分詞のみのパターンも、それはそれで定番。

481:デフォルトの名無しさん
09/02/01 11:55:08
過去分詞のみなのはイベントの名前にしていただきたいところだがな

482:デフォルトの名無しさん
09/02/01 12:37:39
Javascriptから来た子は、OnClickとかがイベント名じゃないことに文句言ってた

483:デフォルトの名無しさん
09/02/01 12:39:36
VBAもOnClickってあったな

484:デフォルトの名無しさん
09/02/01 13:18:35
ちなみに.NETでClickedとかClosedみたいな名前のイベントがあったら
過去分詞じゃなくて動詞の過去形(ガイドライン参照)

485:デフォルトの名無しさん
09/02/01 15:50:10
Putはどっちですか><

486:デフォルトの名無しさん
09/02/01 17:28:11
複数判定する場合はAreなんちゃらにすんの?

487:デフォルトの名無しさん
09/02/01 17:49:53
複数?コードで書いてみて。


488:デフォルトの名無しさん
09/02/01 18:15:04
C#でフォルダを開くProcessについて質問があります。
(1)
this.openProcess = new System.Diagnostics.Process();
this.openProcess.StartInfo.Arguments = @"C:\略\My Documents\";
this.openProcess.StartInfo.FileName = @"C:\Wnidows\explorer.exe";
openProcess.Start();

(2)
System.Diagnostics.Process openProcess = System.Diagnostics.Process.Start(@"C:\略\My Documents\");

(3)
System.Diagnostics.Process.Start(@"C:\略\My Documents\");

(2)と(3)では、My Documentsを開くことができます。
(1)の場合は、引数をうまくとれず、C:\が開いてしまいます。
この理由と、引数としてフォルダを指定する方法を教えてください。


489:デフォルトの名無しさん
09/02/01 18:15:51
○ is △? → ○.Is△で○が複数になることって無いんだよね
○がコレクションの場合は一つのコレクションとみなす

490:デフォルトの名無しさん
09/02/01 18:19:21
>>488
半角空白を含む引数は" "で括る
基本だよ

491:デフォルトの名無しさん
09/02/01 18:28:18
>>490
えっ?
this.openProcess.StartInfo.Arguments = @"C:\略\My Documents\";
と""でくくってあると思うんですけど…。
違ってたらごめんなさい。
というか、C:\Windowsとかの半角空白を含まないフォルダも開けないのです。


492:デフォルトの名無しさん
09/02/01 18:34:02
>>491
そのダブルクォーテーションはC#の文字列を作る意味しかない。
その中身の文字列にダブルクォーテーションを入れないといけない。
"\"C:\\略\\My Documents\\\""のように。

493:デフォルトの名無しさん
09/02/01 18:53:58
>>492
なるほど!
そうでしたか。できました。ありがとうございました。


494:デフォルトの名無しさん
09/02/01 20:46:31
>>484
BegunかBeganか迷った末にStartedでお茶を濁すのですね。わかります。

495:デフォルトの名無しさん
09/02/01 22:18:17
>>494
あるある

496:デフォルトの名無しさん
09/02/02 00:07:25
文字列の定義にstaticクラスを使ってるんですが

public static const Define{
public const string Type0 = "hoge0";
public const string Type1 = "hoge1";
....
}

これだと文字列と比較するときにで

string temp = "bar";
if( bar == Define.Type0){
...
}
else if( bar == Define.Type1){
...
}

といちいち書かなくちゃならんのです。
かといって
public static const Define{
public const int numofNames = 10;
public const string[numofNames] Names = { "hoge0", "hoge1", ...., "hoge9"};
}

みたいな定義はstaticクラスないでは出来ないみたいだし・・・
何か良い方法ないですかね

497:デフォルトの名無しさん
09/02/02 00:10:46
「かといって」以前と以後で話がまるでつながってないんだが?

498:デフォルトの名無しさん
09/02/02 00:11:37
constを諦めて、static readonlyにしたらだめなの?

499:デフォルトの名無しさん
09/02/02 00:11:58
配列にしたいけどなんかできないみたいだから
Type0, Type1, ... みたいにしてるけど、
何かいい方法ない? って聞いてる、
と、よく分かるけど

500:デフォルトの名無しさん
09/02/02 00:17:42
>>499
497 じゃないけどお前の説明でやっと意味がわかった。
それなら、

public static readonly ReadOnlyCollection<string> Type =
 new ReadOnlyCollection<string>(new [] {
  "hoge01",
  "hoge02",
 });

こういうことかな?ReadOnlyCollection<string> は本当は継承したクラスにしたほうがいいんだけども

501:デフォルトの名無しさん
09/02/02 00:23:04
public static const Define{
public static readonly string[] Names = { "hoge0", "hoge1", ...., "hoge9"};
}
じゃだめなのか?
これだと、文字列との比較は
if(bar == Define.Names[ "hoge0" ])
のように書くことになる。

502:デフォルトの名無しさん
09/02/02 00:29:23
>500-501
おー、どっちもできました。
constだとnewできなくて、readonlyだとnewできるんですね。



503:デフォルトの名無しさん
09/02/02 01:18:52
Visual C# 2008をインストールして使い始めたんですが、
テキストエディタでコーディング中に表示されるポップアップヘルプの中身が英語なんです。
前使ってたヴァージョンでは日本語だった気がしますが、どうやったら日本語化できますか。
ちなみにメニュー等は全て日本語です。

504:デフォルトの名無しさん
09/02/02 01:24:35
>>503
URLリンク(blogs.msdn.com)
これか?

505:デフォルトの名無しさん
09/02/02 01:56:30
Visual C# 2008環境のデバッグについて質問があります。
開発環境をインストールしていないターゲットマシン(XP)で、
エラーメッセージをファイルに落とすには、
どのようにコンパイルしたらよいのでしょう?

506:デフォルトの名無しさん
09/02/02 04:05:05
Visual Studio C# 2008で質問があります。
コンパイルをしてexeファイルが出来上がるのですが、
これの会社名や著作権の情報を変更するにはどうすれば良いのでしょうか?

507:デフォルトの名無しさん
09/02/02 04:12:29
propertiesのAssemblyInfo.csを修正

508:デフォルトの名無しさん
09/02/02 05:34:26
ありがとうございました。

509:デフォルトの名無しさん
09/02/02 05:39:50
どういたしまして。

510:デフォルトの名無しさん
09/02/02 06:53:14
DirectryクラスのGetFilesより早く一覧を取得する方法ないすか

再帰で一覧取得しようとしてるんだけど
たかだか3000ファイル程度でもAPIのFind***Fileに比べて遅くてたまらねえっす

511:デフォルトの名無しさん
09/02/02 07:06:31
ならAPI使えばー

512:デフォルトの名無しさん
09/02/02 07:27:01
身も蓋も無いこと言わないで下さい><

…最終的に解決しなきゃそうします多分

513:デフォルトの名無しさん
09/02/02 09:59:53
データベースからとってきたdatetime型の日付形式の時間部分だけを抜き取って、
XX:XXではなくXX時XX分と表示させたいのですが、簡単な方法ありますでしょうか?

514:デフォルトの名無しさん
09/02/02 10:15:19

MessageBox.Show(DateTime.Now.ToString("HH時mm分"));

ってやってみ

515:デフォルトの名無しさん
09/02/02 10:27:10
XmlsAa.AaRow B =(XmlsAa.AaRow)C.Rows[0];
って何をやっているんですかね?Rowってのはテーブル1行分使う意味らしいのですが
()とかRows、[0]がわかりません。配列?

516:デフォルトの名無しさん
09/02/02 10:33:41
(XmlsAa.AaRow)はキャスト
[0]はインデクサ

元が何型かは知らんけど
Rowsコレクションの最初の要素をXmlsAa.AaRow型にキャストしてるだけ

分からんならキャストとインデクサでググれ

517:513
09/02/02 10:34:17
普通に抜き出して置換することにしました。
無駄な書き込み申し訳なかったです。

518:デフォルトの名無しさん
09/02/02 10:35:49
ええ!? 514ガン無視!?

519:デフォルトの名無しさん
09/02/02 10:36:27
エエエエエエ(AA略)

520:514
09/02/02 10:37:15

       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \
  |     (__人__)    |  
  \     ` ⌒´     /

521:デフォルトの名無しさん
09/02/02 10:44:28
>>510
>DirectryクラスのGetFilesより早く一覧を取得する方法
>再帰で

DirectoryInfoクラスのGetFiles使ってるよね?
再帰で取得することよくあるけど、そんなに差はなかったような気がするが

522:513
09/02/02 10:45:00
MessageBoxに表示したいわけではありませんので。

523:デフォルトの名無しさん
09/02/02 10:48:40
エエエエエエエエエエエエエ(AA略)


524:デフォルトの名無しさん
09/02/02 10:50:20
何この流れ・・・

525:デフォルトの名無しさん
09/02/02 11:07:55
>>516 ぐぐったけどよくわかりませんでした。ぐぐり続けてみます。C#というかプログラムは単語が理解できなくてつまずくなぁ

526:デフォルトの名無しさん
09/02/02 11:43:29
環境
WinXP SP3
C# 2.0

今度デルファイで作られたソフトkらソケット通信(TCP)を利用してデータの受信を行うことになりました。
相手は1情報を512バイト固定で送信してくるそうです。

例えば相手が以下のようなデータを送信してきて受信完了した場合
どのように受信したデータを展開すればよいのでしょうか?

形式はなんでもかまわないので受信データをひとまず展開できれば構わないのですが・・・
一応受け取ったデータを同じような構造をもったクラスに展開して内部で処理用と考えています。

i1 integer;
i2


25回(100バイト分)

d1 double
d2


8回(72バイト分)

yobi : array[0..339] of shortint
(340バイト分)

計512バイト

こんな感じなのですが、なにかこういう展開のヒントや情報でも構わないのでお教え願えませんか?

527:デフォルトの名無しさん
09/02/02 12:07:35
構造体にしといてbyte[]からMemoryStream作ってBinaryFormatterでDeserializeとか?

528:デフォルトの名無しさん
09/02/02 12:22:27
C#でゲーム作って配布すると、
ソースコードを見られてしまうの?

529:デフォルトの名無しさん
09/02/02 12:27:34
それがなにか?

530:デフォルトの名無しさん
09/02/02 12:30:01
みんなで公開羞恥プレイですよ

さああなたも御開帳

531:デフォルトの名無しさん
09/02/02 12:55:11
>>527
そんな感じで出来るんならやってみようと思います。
ありがとうございました。 

532:デフォルトの名無しさん
09/02/02 12:58:59
>>526
形式は何でも構わないってことはDelphiで作られたソフトってのも変更可能なわけ?
その割に512バイト固定とか言ってるけど

.NET的にはバイナリの塊を処理するのは
BinaryReaderで読み取っていったり一つずつBitConverterで変換していくのが基本

533:デフォルトの名無しさん
09/02/02 13:21:48
nslookup.exeで調べた相手のSMTPサーバーに直接メールを送る事って出来なくなったのね・・・

534:デフォルトの名無しさん
09/02/02 13:27:35
何年前の話だよ

535:デフォルトの名無しさん
09/02/02 14:34:06
>>534
今日の話ですけど?w

536:デフォルトの名無しさん
09/02/02 14:43:26
さすが初心者スレだ

537:デフォルトの名無しさん
09/02/02 14:45:40
まあ取り敢えず独り言はチラシの裏に書いてろ
質問したいなら質問の体裁を取れ
みたいな

538:デフォルトの名無しさん
09/02/02 14:47:43
>>532
変更は可能と言えば可能なんですが・・・
出来るだけデルファイ側は変更しないようにとのことなので…orz

例えばa1,a2辺りを処理するのは
おとなしく受け取ったバイト配列を BitConverter.ToInt32
で一個づつ自分用にばらしていくのが妥当という感じでしょうか?


539:デフォルトの名無しさん
09/02/02 15:14:40
そうだよ
直接構造体に当てはめるなんてメモリイメージに縛られすぎ
というのがC#の方針
.NET間ならBinaryFormatterのシリアライズとかで十分だからな

540:デフォルトの名無しさん
09/02/02 15:31:15
エンディアンやバウンダリの問題もあって
テキストベースのプロトコルにすることが多くなった。
固定レコードは流行らなくなったな。

541:デフォルトの名無しさん
09/02/02 15:33:40
Visual Studioやってたら、'private'は無効です。のエラーが
毛テスタ

542:デフォルトの名無しさん
09/02/02 15:35:44
'private'を削りなさい

543:デフォルトの名無しさん
09/02/02 15:37:30
前の行の最後にセミコロンが無い

544:デフォルトの名無しさん
09/02/02 15:39:40
メソッドの中で private 宣言した

545:デフォルトの名無しさん
09/02/02 15:43:21
24時間働いているなら労働基準監督署へ

546:デフォルトの名無しさん
09/02/02 15:49:38
private 削ると、使ってる変数が全部定義がありませんってエラーきますた。
セミコロンはありまふ
メソッドの中で宣言・・・これかもです。ありがとう。
Protected voidなんちゃらの処理の中の変数宣言で、privateはダメなのですかね

547:デフォルトの名無しさん
09/02/02 15:53:37
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄



548:デフォルトの名無しさん
09/02/02 16:10:49
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

       ∧∧
        ヽ(・ω・)/   ズコー
      \(.\ ノ
     、ハ,,、  ̄
     ̄


549:デフォルトの名無しさん
09/02/02 16:59:36
ふらっとC#
503です。
ターゲットマシン(XP)でのFormアプリケーションのデバッグ方法、助言お願いします。
いまのところMessageBoxでいくつか変数を表示しようとしているます。
問題はMessageBoxさえ表示されないことで、ということはその前でエラーが起きていることはわかるのです。
かといって頭からぜんぶMessageBoxというのもなかなか途方にくれる話ですし。
デバッグのときに表示されるような情報を、一括してテキストファイルに落とせれば楽だと思うのです。
そういう方法ってあるんですか?


550:デフォルトの名無しさん
09/02/02 17:04:05
URLリンク(msdn.microsoft.com)(VS.80).aspx

551:デフォルトの名無しさん
09/02/02 18:07:36
>>539
なるほど
その方向で進めていくことにしました。

確かにマネージド同士なら楽なんですが・・・
そうでないものは初めてでちょっと色々 orz

552:デフォルトの名無しさん
09/02/02 18:26:36
1行目に#define DEBUGと追加して、Debugフォルダにexeファイルができました。
ありがとうございました。
がっ。
エラー情報やいずこ!?


553:デフォルトの名無しさん
09/02/02 18:51:48
>>552
構成ファイルのapp.configにこれをぶち込んどけ
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="Text" type="System.Diagnostics.TextWriterTraceListener"
                initializeData="c:\log\TraceSample.txt" />
        <!-- <add name="Text" type="System.Diagnostics.ConsoleTraceListener" /> -->
        <!-- <remove name="Default" /> -->
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

554:デフォルトの名無しさん
09/02/02 19:19:38
>>522
ワロタ

555:デフォルトの名無しさん
09/02/02 20:10:05
>>535
今日知ったんなら今日の話だよなw
>>534の負けww

556:デフォルトの名無しさん
09/02/02 20:12:09
>>552
それじゃDEBUGの意味がないだろ
TraceクラスとTRACE使え

557:デフォルトの名無しさん
09/02/02 21:59:35
C#ってクラス名に漢字使えたよね?

558:デフォルトの名無しさん
09/02/02 22:01:47
うん

559:デフォルトの名無しさん
09/02/02 23:11:00
>>557
やめろ!やめるんだ!
そ、そんなソースは認めないぞ

#define ノシ throw
calss 三旦 : System.Exception {..}

if ( this.Value < this.Min ) ノシ 三旦;

560:デフォルトの名無しさん
09/02/02 23:14:17
#define がないし。

561:デフォルトの名無しさん
09/02/02 23:14:37
>>559
C# で define は値を定義できないぞ

562:デフォルトの名無しさん
09/02/02 23:19:06
abstract class A
{
 public abstract int Hoge { get; }
}

というクラスがあり、これを継承したBでgetの実装をします。
そしてクラスB内から値をセットするのにprivate setを追加したいのですが
CS0546になりできません。
こいうことはできないのでしょうか?

class B : A
{
 public override int Hoge
 {
  get { ~ }
  private set { ~ } // CS0546
 }
}

563:デフォルトの名無しさん
09/02/02 23:19:48
カルス・・・



564:デフォルトの名無しさん
09/02/02 23:29:26
インターフェイスならできるけどクラスではできません

565:デフォルトの名無しさん
09/02/03 01:23:41
WindowsXP C# 2008で質問です。
ビューアーを作り、それをデフォルト起動アプリケーションにしました。

string[] args = Environment.GetCommandLineArgs();
if (args.Length != 1) {Title = System.IO.Path.GetFileName(args[1]);}

で、ファイル名をタイトルにしてウィンドウに表示しようとしています。
exeファイルにデータファイルのアイコンをドラッグするとファイル名を取得できますが、データファイルを単独でダブルクリック起動する場合には取得できません。
デフォルト起動の場合、データファイルのファイル名は、exeファイルにどのように渡されていて、exeからはどのように取得できるのですか?
ご教示願います。


566:デフォルトの名無しさん
09/02/03 01:44:01
>>553
ありがとうございます。
app.configがなかったので、新規項目の追加で構成ファイルを追加してApp.configを作り、そこに追加しました!
で、早速exeを作成し、相変わらずエラーが出ていますが、ログは記述されず…。
ログファイルも作成されていません。
>>556
ありがとうございます。
Traceクラスについて勉強してみます。
いま
URLリンク(www.atmarkit.co.jp)
を読んでます。


567:Charles Petzold
09/02/03 02:36:35
YO, YO, YO. Good midnight, Japanese C# programmer.
My name is Charles Petzold.I write one book. That name is Windows programming by C#.
This book cover most part of Programming Windows by C#.So if you read this book, you can write many system.

By the way, I have three words for Japanese Programmer.
[Don't use Linux.]

Do you understand?

Good bye.

568:デフォルトの名無しさん
09/02/03 02:51:16
Feel free to write in English.

569:デフォルトの名無しさん
09/02/03 02:57:20
petzoldにはお世話になったなあ
でも今見ると古いかもなあ

570:デフォルトの名無しさん
09/02/03 06:07:37
>>565
レジストリにどういう風に登録されてるかによる。

普通、「アプリのパス "%1"」 なんで、そのまま取れるけどね。

571:デフォルトの名無しさん
09/02/03 07:55:20
オンラインヘルプを自PCに持ってくるにはどうすればいいのでしょうか?
いちいちネットに繋ぎに行くんでウザいのですが…

572:デフォルトの名無しさん
09/02/03 08:03:55
ローカルで見られるヘルプがあるよ。日本語版と英語版
探せば見つかるだろうけど親切な人が教えてくれるかも

573:デフォルトの名無しさん
09/02/03 09:34:12
VisualStudioをインストールすればインストール可能
Expressだとサブセット版だけども。
あとはWindowsSDKインスコ。


574:デフォルトの名無しさん
09/02/03 10:09:43
>>571
ヘルプを既にインストールしているならヘルプ(Micorosoft Document Explorer)の
「ツール」->「オプション」->「ヘルプ」->「オンライン」で「オンラインではなくローカルのみで実行」にチェック。

インストールしてなくて、必要最小限で良いなら >>573

全部入れたいならコレ。2GBちょっとあるけどね。
MSDN Library for Visual Studio 2008 SP1 (2008年12月更新版)
URLリンク(www.microsoft.com)
ISO イメージなのでインストールするには、仮想ドライブが使えるソフト(CloneDrive や DAEMON とか)も必要。

575:デフォルトの名無しさん
09/02/03 11:16:28
URLリンク(msdn.microsoft.com)(VS.80).aspx
PropertyInfo.GetAccessors()を呼び出すと、
getアクセサ、setアクセサ、およびその他のアクセサが返ってくるとありますが
その他のアクセサってなんですかね

576:デフォルトの名無しさん
09/02/03 11:20:19
初めてプログラム言語に触れたのですが
intとかparseとかその他もろもろ、何て読むのですか?
読み方サイトみたいのってありますか?
読めなくても構わないんですがなんとなく喉の骨が取れない感じです。

577:デフォルトの名無しさん
09/02/03 11:24:54
>>576
URLリンク(dictionary.goo.ne.jp)
URLリンク(dictionary.goo.ne.jp)

本質的には通じりゃいい

578:576
09/02/03 11:31:04
>>577
みんなそんなもんなんですね
適当に脳内処理しときます。


今仕事が開店休業状態で暇つぶしにC#ってものを勉強始めたけど
突き詰めたらどんな高度なwindowsアプリでも作れるようになれるのですか?
たとえばosとかofficeとかw
このままだと会社が倒産しそうだから、C#勉強してそっちに働き口みつかるかなぁ・・・

579:デフォルトの名無しさん
09/02/03 11:33:04
OSの上で動作するフレームワーク(.NETとかMonoとか)のさらに上で動作してるから
フレームワークより下にはいけない

580:576
09/02/03 11:37:12
>>579
たしかにos-.net上で動くって事ですもんね

具体的に言うと、リッピングソフトとかofficeアプリまでなら作れますか?

581:デフォルトの名無しさん
09/02/03 11:42:16
それはそれは途方も無く努力すれば

582:デフォルトの名無しさん
09/02/03 11:57:21
C#も極めれば空も飛べるよ!

              ハ_ハ
            ('(゚∀゚∩ 飛べるよ!
             ヽ  〈
              ヽヽ_)



583:デフォルトの名無しさん
09/02/03 13:18:52
そうだね・・・ねてなくて浮いてる気分だ

584:デフォルトの名無しさん
09/02/03 13:23:03
寝ろよ
寝不足は生産性も減退させる

585:デフォルトの名無しさん
09/02/03 13:25:25
うまく動いてたイベント処理をもうちょっと効率良くしようと思って手を加えて
一週間くらいほったらかしといたら、うまく動いてたときのコード忘れてしまた orz
全く思い出せない


586:デフォルトの名無しさん
09/02/03 13:27:28
そうかそうか

587:デフォルトの名無しさん
09/02/03 13:38:59
svn

588:デフォルトの名無しさん
09/02/03 16:50:25
大規模な改良前にはコード保存しとけば??
おかげさまで「~~実装前.txt」が10個以上あるが。

589:デフォルトの名無しさん
09/02/03 17:01:44
>>575
おそらく、VB6/COMで、setアクセサ相当が値のLetと参照のSetに分かれていた名残。
Letが.NETのsetアクセサで、Setがその他に対応すると思う。

590:デフォルトの名無しさん
09/02/03 17:16:13
>>585>>588
バージョン管理システム使って履歴残せ。


591:デフォルトの名無しさん
09/02/03 17:16:35
>>575
言語によっては他の種類のアクセサを定義することもできるということじゃないの
プロパティって複数のアクセサメソッドの情報をまとめたメタデータにすぎないから

592:デフォルトの名無しさん
09/02/03 17:26:52
Form1上にSplitContainerを配置して

・Panel1にテキストボックスとボタン
・Panel2にデータグリッドビュー

を置いてあるんすけど、テキストボックスとボタンってどのコレクションになるんすかね?

this.Controls だとコレクションは SplitContainer しか入ってないし
this.SplitContainer.Panel1.Controls だとコレクションは Panel1 しか入ってない
this.SplitContainer.Panel2.Controls ってやるとちゃんと DataGridView1 が入ってるのに

わけわかめ

593:592
09/02/03 17:31:47
SplitterPanelにPanelを入れ子にしてた orz

594:デフォルトの名無しさん
09/02/03 17:32:54
>>592
Panel1.Contols に Panel1 が入ってるわけねーだろ。

595:デフォルトの名無しさん
09/02/03 17:38:18
>>593
あわてんぼさんめ

596:デフォルトの名無しさん
09/02/03 19:20:41
さぼてんあわめん

597:デフォルトの名無しさん
09/02/03 19:30:32
わあさんぼんめて

598:風来坊
09/02/03 20:48:10
質問です。
C#にて 音声録音の機能を実装したいと思っています。
.NET 1.1,2.0,3.5は問いません。

デフォに設定されている出力(再生)デバイスの音声信号を
wav(wavにこだわる必要は無い)ファイルとして保存したいのですが、
どうすれば実現できますか?
どなたかご教授ください。お願いします。

599:デフォルトの名無しさん
09/02/03 21:22:40
ぐぐる

600:デフォルトの名無しさん
09/02/03 21:35:08
遮断機をくぐる

601:デフォルトの名無しさん
09/02/03 21:36:45
首をくくる

602:デフォルトの名無しさん
09/02/03 21:42:39
せっかくC#でAPI直接もなんだし、MCIかMDXあたりでどうかな。

603:デフォルトの名無しさん
09/02/03 21:46:32
riffを自分で書くなんてどうかしら

604:デフォルトの名無しさん
09/02/03 21:50:21
DirectShow.NET

605:デフォルトの名無しさん
09/02/03 21:55:42
DirecxShowは推奨されないらしいですよ

606:デフォルトの名無しさん
09/02/03 22:03:05
このスレって質問者じゃなくて答える側が初心者っていうオチ?

607:デフォルトの名無しさん
09/02/03 22:06:26
○×したいんだけど、どうすれば実現できますか?

(´・ω・`)しらんがな

こうやったんだけど上手くいきません。どうしたらいいですか?

(´・ω・`)オジサンが教えたるがな

608:デフォルトの名無しさん
09/02/03 22:21:14
Vista + Visual Studio 2008 Express Edition + C# を使っています。
Debugモードでは問題なく動くのにReleaseモードではフリーズする場合、
どういった原因が考えられますでしょうか?
大量の計算を連続してさせているプログラムで、フリーズする箇所は毎回違うようです。
調べようにも取っ掛かりすらなくて困っています。
よろしくお願いします。

609:デフォルトの名無しさん
09/02/03 22:21:52
CPU休めてますか


610:デフォルトの名無しさん
09/02/03 22:26:04
>>609
100万行くらいのtxtファイルを読んできて、数分間延々と処理させてます。
CPUに負荷がかかりすぎるのが問題なんですかね?

611:デフォルトの名無しさん
09/02/03 22:28:31
ぱそこんもたまにはやすみたがっているんだよ。


612:608
09/02/03 22:36:59
タスクマネージャで眺めてたら、
処理開始から1~2分はCPU使用率50%前後で、メモリ使用量が徐々に増加。
メモリが180MBくらいに達したところでCPU使用率が0%になってフリーズしました。
メモリ食いすぎってことでしょうか?
debugモードでは動くのに。。。

613:デフォルトの名無しさん
09/02/03 22:38:25
デッドロックしてない?

614:デフォルトの名無しさん
09/02/03 22:38:37
そのデバッグモードってデバッグビルド?
リリースビルドでデバッグでも同じ?

615:デフォルトの名無しさん
09/02/03 22:44:20
>>603
Thunder Forceの戦闘AI?

616:571
09/02/03 22:45:47
>>572-574
ありがとうございます。
VMwareでLive版のLinux立ち上げてISOイメージをマウントしてから、
ローカルディスクに全コピーしてみます。

617:608
09/02/03 23:00:46
>>613
マルチスレッド処理なので可能性はあるかもしれません。
ただ、デバッグで起こらないのでどうやって調べればいいのか。。。

>>614
>リリースビルドでデバッグ なんてことができるんですね。
試してみましたが、問題なく動きました。
\Releaseフォルダ内のexeを直接起動したときだけフリーズします。

618:デフォルトの名無しさん
09/02/03 23:03:37
一般的には排他処理のところっしょ

619:デフォルトの名無しさん
09/02/04 00:49:06
排他制御に不備があって、微妙なタイミングの差で動いたり動かなかったりするのかね。
いずれにせよ質の悪いバグだ。詳しく設計がわからないとアドバイスのしようがない。

620:デフォルトの名無しさん
09/02/04 01:32:14
>>570
レジストリですか。
すこし見てみたものの、まったく手がかりがありませんでした。
情報サンクスです。


621:デフォルトの名無しさん
09/02/04 02:01:40
別にレジストリ見なくてもわかる

エクスプローラのメニューからツール→フォルダ オプションを選択
ファイルの種類タブで、データファイルの拡張子がどう登録されているか確認

622:デフォルトの名無しさん
09/02/04 04:07:18
コンボボックスで質問があります。
コンボボックスに二つの項目があり、項目1を選ぶと変数+変数、
項目2を選ぶと変数-変数といったような処理をしたいのですが
if文でどのようにコンボボックスを設定すればそのような処理ができるのでしょうか?

623:デフォルトの名無しさん
09/02/04 07:57:00
はい

624:デフォルトの名無しさん
09/02/04 08:20:10
>>622
ComboBox.SelectedIndexChangedでSelectedIndex見て判断しろ

625:デフォルトの名無しさん
09/02/04 10:06:23
ComboBoxニdelegate突ッ込ンデ自前デ描画シナサイ

626:デフォルトの名無しさん
09/02/04 10:39:03
>>621
どうやって関連づけやったのよ?
関連づけやってるところのソース見せて

627:デフォルトの名無しさん
09/02/04 10:47:57
>>626
↓でも読んでろ

URLリンク(dobon.net)

どうせ実行ファイルのパスに空白が混じってるとかそういうオチだろうけど

628:デフォルトの名無しさん
09/02/04 11:37:58
C#2005で開発したアプリをVistaで動かしてみたところ、
パネルに配置したボタン色がパネルの色に同化してしまいました。
xpでは正常に表示されます
対処方法などあれば教えてください。

629:デフォルトの名無しさん
09/02/04 12:09:00
>>627
おマイには聞いてないってw
レジストリを触ったこと無い人がどうやって関連づけしたのかな~っと

それに実行パスに空白があるからどうなるの?

630:デフォルトの名無しさん
09/02/04 12:14:36
普通にファイルを開くプログラムの選択で関連付けしたんで無いの。

631:デフォルトの名無しさん
09/02/04 14:02:29
>>629
なんで粘着してんの?親切に教えてるだけじゃない
そもそもの質問者も、プログラムで関連付けをしたいなんて書いてないし
回答者も、レジストリを触ったこと無いとも書いてない
実行パスの空白はCUIのOS触ったことあるなら解るだろ

632:デフォルトの名無しさん
09/02/04 16:05:30
felicaのシステムを作っているのですが、
felicap = felica_polling(pasorip, (ushort)systemcode, 0, 0);
この処理でfelicapに値が入るのですが、この処理の意味が根本的にわかりません。
ここではどういった処理が行われているのでしょうか?

633:デフォルトの名無しさん
09/02/04 16:09:18
FeliCa でソフトを作りまくるスレ 2ブロック目
スレリンク(tech板)

634:デフォルトの名無しさん
09/02/04 16:18:21
felicaのシステムを作っているのですが、
felicap = felica_polling(pasorip, (ushort)systemcode, 0, 0);
この処理でfelicapに値が入るのですが、この処理の意味が根本的にわかりません。
ここではどういった処理が行われているのでしょうか?

連続で同じカードの読み取りができなくて困っています。

635:デフォルトの名無しさん
09/02/04 16:19:31
>>633
すみません。
該当スレに書き込むつもりが同じところに書き込んでしまいました。


636:デフォルトの名無しさん
09/02/04 17:28:30
生まれて半年の者です。他のクラスの変数に関して質問です。

クラスAとBがあります。
クラスAにStack型stackがあります。
クラスBにString型stringがあります。

クラスBでクラスAをインスタンス化して、stackにstringをpushします。
そして変更されたstackをクラスAに戻して作業を進めたいのですが、
クラスAではstackは元のままになっています。

どのような問題があるのでしょうか?

637:デフォルトの名無しさん
09/02/04 17:30:18
クラスAに戻すとか言われてもよく分からんのでコード貼ってくれ

638:デフォルトの名無しさん
09/02/04 17:32:05
AがStackをそのまま外に晒すのはよくない(別のクラスにした意味がない)
pushするメソッドをAに定義するべき

639:デフォルトの名無しさん
09/02/04 17:34:00
Stackを晒してるなら、Pushしたのが反映されてるはずだがな。
たぶんnewして渡してるとかじゃないかw

640:デフォルトの名無しさん
09/02/04 17:40:32
>>637
戻すじゃなくて戻したいの意味でした。すみません。

ClassA
{
 public void ClassA()
 { }
 public Stack stack = new Stack();
 }

ClassB
{
 public String string = ~;
 ClassA a = new ClassA()
 a.stack.push(string);
}

これだけだとクラスAでは変更できてないです。
pushしたあとにどのような作業が必要でしょうか?

641:デフォルトの名無しさん
09/02/04 17:41:50
意味不明すぎる

642:デフォルトの名無しさん
09/02/04 17:43:05
たぶんクラスとインスタンスの関係が分かってないんじゃない?
生まれて半年だし

643:デフォルトの名無しさん
09/02/04 17:43:28
staticだな~説明は誰かに任す

644:デフォルトの名無しさん
09/02/04 17:44:38
そこでstaticにしろと言うのは教育的じゃないと思う


645:デフォルトの名無しさん
09/02/04 17:45:02
もうちょっと勉強進めればわかるよ
staticにすればいいのかもしれないけど実際は絶対やっちゃダメなパターン

646:デフォルトの名無しさん
09/02/04 17:47:02
つってもなあ

「○○したいんだ」

って言ってる奴に勉強しろっても回答になってない気がするぜー

647:デフォルトの名無しさん
09/02/04 17:47:08
ClassB
{
 public String string = ~;
 ClassA a = new ClassA()
 //↓これメソッド内だよね?
 a.stack.push(string);
}

↑でインスタンス化された a の stack にはちゃんとPushされている。
ただそのせっかく作ったClassAのインスタンスaは参照されないまま消えてしまっただけ

648:デフォルトの名無しさん
09/02/04 18:10:59
C#で質問があります。
timeが11:00と入力されなかった場合(たとえば1100と入力された場合)、コロンを追加しようとしています。
string time;
if (!(time.Contains(":"))) {
time = time[0] + time[1] + ":" + time[2] + time[3];
}
で、この値を見ると、11:00ではなくて98:00になっちゃうのですが、なんでこんな数字になっちゃうんでしょう。
原因と改良方法をご示唆いただけないでしょうか。


649:636の者です。
09/02/04 18:15:02
windowsフォームのボタンを押したときの動作をプログラムで書きたいときは、
ボタンをダブルクリックすれば、プログラムを書く場所を自動で作ってくれますが、
クラスBにあるボタンを押したときの動作を、クラスAに書くことは可能でしょうか?

650:デフォルトの名無しさん
09/02/04 18:17:59
>>648
char同士の文字コードの加算になってるから
time = '1' + '1';
でやってみるとわかるよ
time = time[0].ToString() + time[1].ToString() + ":" + time[2].ToString() + time[3].ToString();
にすればいい

>>649
+=を使ったイベントハンドラの登録方法が理解できていればできる

651:デフォルトの名無しさん
09/02/04 18:23:58
> time[0].ToString() + time[1].ToString() + ":" + time[2].ToString() + time[3].ToString();
くどすぎる。
StringBuilder つかおうぜ。

652:デフォルトの名無しさん
09/02/04 18:27:28
じゃあString.Format("{0}{1}:{2}{3}", time[0], time[1], time[2], time[3])で

653:デフォルトの名無しさん
09/02/04 18:27:30
>>647
あ~昔同じ失敗したな~

654:デフォルトの名無しさん
09/02/04 18:27:37
>>650
早速ありがとうございました。
ToString()でできました。


655:デフォルトの名無しさん
09/02/04 18:28:11
>>651
そこで、StringBuilderは使わないだろ。
time = time.Substring(0, 2) + ":" + time.SubString(2, 2);

656:636の者です。
09/02/04 18:31:41
>>650
なんとなくいけそうです。

>>653
お~友よ~

657:デフォルトの名無しさん
09/02/04 18:44:37
>>621
ツール-フォルダオプションは、真っ先に見ました~。
>>626、636
というか、ここで手動で関連づけを登録しました。

そうしたら、登録したとたん、「詳細設定」のボタンが消え、「元に戻す」というボタンに変化しちゃったのです。

詳細設定のボタンがあれば、アプリケーションの挙動を見れるかと思ったのですけど。
たとえば、txtの詳細設定のopenアクションを見ると、アクションを実行するアプリケーションの項目に、「C:\Windows\system32\NOTEPAD.EXE %1」とあり、これを修正すればよいことがわかります。
ところがなにしろボタンがないから、手も足もでない…。

空白かな~。う~~む。
アプリケーションじたいはデータファイルのダブルクリックで起動しているのですが…。
ま、C#とはあまり関係なさそうなので、この件はこれで。
お騒がせしました。ありがとうございました。


658:デフォルトの名無しさん
09/02/04 18:57:25
お願いします(゚ω゚)
System.Text.RegularExpressions.Regexを使って
 [ok] 100
 [ok] 0.001
 [ng] 00 → 0
 [ok] 0.1000
前ゼロ入力をReplaceで""に置き換えたいのですが、正規表現が上手く書けませぬ
教えてエロい人

659:デフォルトの名無しさん
09/02/04 19:00:35
>>658
正規表現 Part5
スレリンク(tech板)

660:デフォルトの名無しさん
09/02/04 19:02:22
あー㌧>>659 ここで聞きたかったぜっ♪

661:デフォルトの名無しさん
09/02/04 21:49:44
>>645
他クラスからアクセスする変数には手当たり次第static使ってるんだが…

何を勉強すればいいんですか?

662:デフォルトの名無しさん
09/02/04 21:52:53
構造化プログラミング

663:デフォルトの名無しさん
09/02/04 21:55:56
オブジェクト指向プログラミング

664:デフォルトの名無しさん
09/02/04 21:57:38
staticフィールドはダメだがstaticメソッドはいいぞ
privateなstaticメソッドが最高だ

665:デフォルトの名無しさん
09/02/04 21:58:06
構造化プログラミングを理解してない奴が、オブジェクト指向を学んでも無駄。

構造化プログラミングを学んだら、中規模以上のプログラムをたくさん書く。
それからでもオブジェクト指向は遅くないよ。

666:デフォルトの名無しさん
09/02/04 21:59:25
static メンバ変数なんて
ただ1個しか存在しないもんな。
2つ作りてええええええええ!!!! と思っても
1つしか存在できない。
不便過ぎ。

667:デフォルトの名無しさん
09/02/04 22:02:02
C言語等の非OOA出身者はstaticをメモ帳や定数保管庫程度に考えてない

668:デフォルトの名無しさん
09/02/04 22:02:42
しか が抜けた

669:デフォルトの名無しさん
09/02/04 22:02:49
オブジェクト指向も関数型プログラミングも
深いとこに行くと実用的じゃない宗教じみたものがうじゃうじゃ出てくるから
そこに行ってしまわないように気をつけないと

670:デフォルトの名無しさん
09/02/04 22:12:08
むしろいきなりOOPでいいと思うよ。
>>665みたいな意見はありがちだけど、構造化プログラミングなんて
中身のないスカスカな話で馬鹿でなければ「畳の上の水泳」で十分だと思う。

っていうか、俺も含めてたかがOOP理解したぐらいで鬼の首とったように語るのは
とても恥ずかしいよなw

671:デフォルトの名無しさん
09/02/04 22:16:29
物事をオブジェクトに切り分けるというのは大成功した考え方だと思うけど
継承は失敗だしインターフェースの実装もそんなに上手くない感じだと思う
そういった抽象化はクロージャにした方がシンプルで分かりやすい

672:デフォルトの名無しさん
09/02/04 22:19:30
>>636
> 生まれて半年の者です。

おいおい、生後半年でプログラミングかよ。
たいしたもんだな!

673:デフォルトの名無しさん
09/02/04 22:21:38
どんな天才だよw

674:デフォルトの名無しさん
09/02/04 22:24:22
>>671
使いこなせない人にとって上手くないだけなんだろ

675:デフォルトの名無しさん
09/02/04 22:26:16
母国語より先にプログラム言語を覚えたんだな
いったいどんな子に育つやら

676:デフォルトの名無しさん
09/02/04 22:28:11
今さらオブジェクト指向だデザパタだインターフェースだってやるのは
正直違うかなと思うよ
今のC#にはもっとよい道具があるから
ただオブジェクト指向の基本的なところは抑えておかないとまずいけど

677:デフォルトの名無しさん
09/02/04 22:29:44
だまれ若造

678:デフォルトの名無しさん
09/02/04 22:31:19
お年寄りは静かにしてください

679:デフォルトの名無しさん
09/02/04 22:32:17
>>676
それはC#が、最近になってより初心者向けの機能を実装をしてるってこと?

680:デフォルトの名無しさん
09/02/04 22:33:25
>>676
>今のC#にはもっとよい道具があるから
ないってw
知ったようなこというなよ。

クラスベースのOOPが万能じゃないのは確かだけど、現時点でそのオルタナティブが
C#に限らず発案されているとは思えん。

681:デフォルトの名無しさん
09/02/04 22:33:31
>>679
クロージャはインターフェースよりも初心者にとって使いやすいと思うよ
直観的だし

682:デフォルトの名無しさん
09/02/04 22:35:26
なんでクロージャーとインターフェイスを対置するんだ?

クロージャーとインターフェイスって「代替財」か?
わけがわからんよ。

683:デフォルトの名無しさん
09/02/04 22:37:16
覚え方なんて人それぞれだし。

自分が通ってきた道についてしか語れないだろ。

684:デフォルトの名無しさん
09/02/04 22:38:00
>>680
クロージャは実際には一つのメソッドを持ったインターフェースを
実装したオブジェクトを簡易に作り出す機能だけど
それさえあればオブジェクト指向の抽象化は全部出来る
オブジェクト指向の継承にまつわるややこしいところはすっ飛ばして
そっちに行くのが今は正解なんじゃないかねえ

685:デフォルトの名無しさん
09/02/04 22:39:36
また変な主義者が来ましたねw

686:デフォルトの名無しさん
09/02/04 22:44:52
>>684
それって、昔の1ファンクション1機能の構造化プログラミングと同じじゃないの?
静的なメソッドとは何がちがうのけ?

687:デフォルトの名無しさん
09/02/04 22:53:45
相談があります。
C#でプログラムを作り始めて半年くらいになります。
ようやく身の回りのソフトは、だいぶ自作できるようになってきました。
ところで、それをリリースしようと思うと、プログラムのなかに直接書いてあるパスワードなどを設定ファイルに移動したり、自分用のディレクトリ構造にあわせて作った部分を汎用にする必要が出てきます。
それはまあやる気になればできそうなのですが、設定不要のかんたんなソフトを知人10人ほどにテストしてもらったところ、だれひとりとして.NETを入れていないため、動作しなかった、ということがわかりました。
ひょっとして、.NETやC#って、すごくマイナーなんでしょうか。
このままC#をつづけた方がよいのか(けっこう使いやすくて気に入ってます)、それとも別の言語に移ったほうがよいのか。
移るとしたら、もっとメジャーな言語ってなんですか?
Webベースのプログラムとか、Ajaxとかですか?
.NETを組み込んだ状態でコンパイルするとかできないんですかね~?


688:デフォルトの名無しさん
09/02/04 22:55:38
WebでできるようなことならSiilverlightというのがある
イメージ的には「C#で書けるFlash」
ランタイムは超小さいので配布が手軽

689:デフォルトの名無しさん
09/02/04 22:57:55
だからクロージャとインターフェイスは代替関係にないってw
ただ一部の機能が競合関係にあるだけ。

たぶん従来ICompareをわざわざ用意していたようなのがデリゲートでスッキリ
書けるようになった、みたいな例を見て短絡したんだろうけど。

690:デフォルトの名無しさん
09/02/04 23:03:14
>>687
.netFrameworkをインストールしないって人は多いよね
vista以降は.netはインストされてるから、ある程度は問題なくなると思うけど

なんのインストもなくて利用可能なのは、VisualStudioのC++のネイティブコードか、
Delphiぐらいじゃないのかな。

691:デフォルトの名無しさん
09/02/04 23:13:21
しつもんです。

クラス内のメンバの初期化はどこでしてますか?
宣言時に初期化してしまうか、コンストラクタ内で初期化するか迷ってます。

///以下抜粋
internal sealed class 通信
{
private UdpClient UDP;
private Thread スレッド;
private List<byte[]> 受信リスト= new List<byte[]>();///宣言時か
private List<IPEndPoint> クライアントリスト= new List<IPEndPoint>();

public 通信(int ポート)
{
UDP= new UdpClient(ポート);///コンストラクタ内か
スレッド = new System.Threading.Thread(new System.Threading.ThreadStart(受信));
///抜粋以上


692:デフォルトの名無しさん
09/02/04 23:18:16
>>691
基本は宣言時じゃないかな。
コンストラクタでもいいけど、コンストラクタをオーバーロードしているときには、
複数のコンストラクタで初期化しなくちゃいけなくなるから。

別のメソッドを用意して、そこで初期化してもいいけど、意味ない気がするし。
条件によるけど。

693:デフォルトの名無しさん
09/02/04 23:18:50
C#, C♯, C#相談室 Part50
スレリンク(tech板)

埋まったけど立てられなかった。
誰か頼む。

694:デフォルトの名無しさん
09/02/04 23:22:33
ホスト規制のためNGですた。

695:デフォルトの名無しさん
09/02/04 23:22:51
>>693
あっちは相談室と名乗りながら、
質問の揚げ足を取って悦に浸っている常連ばかりだから嫌い

696:デフォルトの名無しさん
09/02/04 23:23:14
>>686
Cとの比較で言うと、クロージャは「状態のある関数ポインタ」といえると思う
Xの値が欲しい時に

void Hoge(Func<int> getX){ int x = getX(); }

C#ならこう書ける。getXにはintを返す関数がなんでも入れられるしその場で作れる
Cで書くと

struct Func_int{
int (*func)(void*);
void* args;
};
void Hoge(Func_int fi)
{
int x = fi.func(fi.args);
}
こんなんだけど引数の型も作らなきゃいけないし関数はvoid*をとらなきゃいけないしで大変だ
オブジェクト指向で書くと

class Func<int> : IFunc<int>
{
int x, y;
public Func(int x, int y){ this.x = x; this.y = y; }
public int Method(){ return x + y; }
}
クロージャだと

Hoge(() => x + y);

こうだ。
これが進化だよ。

697:デフォルトの名無しさん
09/02/04 23:25:53
>>695
でも作っとかないと、そういう人らがここに常駐されたら困る

698:デフォルトの名無しさん
09/02/04 23:31:25
>>691
その前になんちゅうソースだコレ。

699:デフォルトの名無しさん
09/02/04 23:31:36
>>697
心配無用
既に常駐してる

700:デフォルトの名無しさん
09/02/04 23:36:15
まあとりあえず立てた。
C#, C♯, C#相談室 Part51
スレリンク(tech板)l50

701:デフォルトの名無しさん
09/02/04 23:36:42
>>696
その例だと従来の方法でもStaticなメソッドを使えば
int x = Class.Method(a, b);
で代用がきくから同じことだと思うんだけど。何が違うの?

702:デフォルトの名無しさん
09/02/04 23:37:33
読解性

703:デフォルトの名無しさん
09/02/04 23:40:36
>>690
VC++ も今は CRT が DLL 推奨だから配るならインストーラ作るべき
なんやけどな。msm があるしサイズも小さいので格段に楽だから
.NET と比べるレベルじゃないけど。


704:デフォルトの名無しさん
09/02/04 23:42:54
自分の場合は固定長バッファ持たせる時とか、ソース直書きのデータを持たせる時以外は宣言の所に初期化コードを書かないようにしてる。
基本的にはできるだけコンストラクタに書いたほうが、読みやすいコードになるよ。
#regionと組み合わせるとなお良い。

指すものがコンパイル時点で決まっていて、利用者側のコードに左右されない要素(リテラル的なもの)は宣言と初期化を一緒にしてもいいと思う
上の固定長バッファはあてはまらないけど…

705:デフォルトの名無しさん
09/02/04 23:44:00
>>687
「.net Frameworksインストールしてね」で終わりじゃないか?
むしろ、Windows Updateで配布されてるんじゃないのか?.netぐらい

706:デフォルトの名無しさん
09/02/04 23:45:31
>>700


707:デフォルトの名無しさん
09/02/04 23:47:58
>>687
「めんどくせえなぁ・・・なんでこんな糞プログラムを・・・。そうだ!インストールしてない事にすればいいんだ!」

708:デフォルトの名無しさん
09/02/04 23:49:28
>>701
void Hoge()
{
int x = Class.Method(a,b);
}
これだとxはMethod(a,b)から返ってくる値しかとれないでしょ。

void Hoge(Func<int> getX)
こうしておけば

Hoge(() => x + y);
Hoge(() => x * y);

外部から自由な演算を入れられる。
ハッシュテーブルのキーが欲しいということになっても

Dictionary<TKey, TValue> CreateDictionary<TKey, TValue>(TValue[] array, Func<TValue, TKey> getKey)
{
Dictionary<TKey, TValue> dic = new Dictionary<TKey, TValue>();

foreach(var item in array)
{
dic.Add(getKey(item), item);
}

return dic;
}

var dic = CreateDictionary(array, item => item.Name);
その型のKeyにしたいものを自由に選べる

709:デフォルトの名無しさん
09/02/04 23:52:03
.NET Frameworkは再頒布可能だからその自作ソフトとやらに含めて配布すればいいんだよ。

URLリンク(msdn.microsoft.com)

ちなみにWindows Server 2003、Windows Vista、Windows 7にはリリース時点で最新の.NET Frameworkが入っている。(より新しいバージョンが出て、それが必要な場合は更に入れる必要がある)

710:デフォルトの名無しさん
09/02/04 23:53:57
はやくXPが駆逐されればいいんだがなあ

711:デフォルトの名無しさん
09/02/04 23:57:24
デザインパターンは関数型っぽいことを無理やり手続き型OOPLでやるための工夫が主だから
かなり簡単に実装できるよな

712:デフォルトの名無しさん
09/02/04 23:58:26
>>708
それみると、君の主張するところの直感的でもないし、
初心者にもわかりにくいと思うよ

713:デフォルトの名無しさん
09/02/05 00:02:11
>>712
じゃあオブジェクト指向や構造化でもっと直感的に、
初心者に分かりやすく書ける?

714:デフォルトの名無しさん
09/02/05 00:04:46
スレ違い
よそで存分に議論してくれ

715:デフォルトの名無しさん
09/02/05 00:05:14
初心者ではないが、何が書いてあるかさっぱりだw

716:デフォルトの名無しさん
09/02/05 00:07:06
人の揚げ足取りと議論厨は相談スレにお引き取りください

717:デフォルトの名無しさん
09/02/05 00:07:42
すみませんコレは仕様なんでしょうか
1:public class Foo{
2: private readonly int[] test = new int[]{1,2,3,4,5};
3: public Foo(){
4:  int[] test2 = test1;
5:  test2[0]=2;
6:  Console.WriteLine(@"test[0]=" + test[0].ToString());
7: }
8:}
上記 2行目readonlyにしてるtestが、5行目で書き換えられてしまいます。

718:デフォルトの名無しさん
09/02/05 00:09:03
>>708 じゃねーけど知りたいんならレキシカルクロージャとかで
ぐぐった方がいいと思うよ。

>>708
2ch で説明するのはさすがに難しいと思う

719:デフォルトの名無しさん
09/02/05 00:09:15
4:  int[] test2 = test;
のまちがいです

720:デフォルトの名無しさん
09/02/05 00:09:37
配列の要素がreadonlyになるわけではありません

721:デフォルトの名無しさん
09/02/05 00:14:31
>>718
2chで説明するのが難しいことが、初心者向けなの?

722:デフォルトの名無しさん
09/02/05 00:15:02
>>718
ググっても関数型言語ユーザーの宗教じみた言論に圧倒されるばかりだと思う

723:デフォルトの名無しさん
09/02/05 00:18:22
>>701
匿名関数は生成したスコープの変数をそのまま取り込める(環境を渡してるって言うんだっけ?)
副産物的な物だけど、遅延評価的な振る舞いも持ち合わせてる

724:デフォルトの名無しさん
09/02/05 00:19:56
この辺の議論からもう13年か。
URLリンク(java-house.jp)
URLリンク(www.google.co.jp)

>>718
むしろ近年のクロージャブームはLLの方が先に火をつけた気もするけどね。
JavaScriptの無名関数とかやっぱり初心者泣かせなのかねぇ?

725:723
09/02/05 00:21:07
ごめんさっきの >>718 あてじゃなくて >>722

726:デフォルトの名無しさん
09/02/05 00:31:46
何々、これでいいじゃん?

public static class Class
{
 static int i;
 public static int Method() { return i++; }
}

727:デフォルトの名無しさん
09/02/05 00:37:50
>>726
でもさ、C#でクラスそのものを引数に渡すって面倒事が多いでしょ。
だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。

728:デフォルトの名無しさん
09/02/05 00:41:24
クラスそのものって引数に渡せるの?

729:デフォルトの名無しさん
09/02/05 00:41:29
>>727
staticだからclassそのものを渡す必要なんてないよ
どこでも自由に

this.label1.Text = Class.Method().ToString();

でいいんじゃない?

730:デフォルトの名無しさん
09/02/05 00:43:56
>>728
private void button1_Click(object sender, EventArgs e)
のobjectはクラスじゃん?

731:デフォルトの名無しさん
09/02/05 00:48:04
objectはインスタンスだろ

732:デフォルトの名無しさん
09/02/05 00:48:56
ocjectはクラス名だ

733:デフォルトの名無しさん
09/02/05 00:49:27
object

734:デフォルトの名無しさん
09/02/05 00:50:41
この場合は話の流れからインスタンスってことじゃねーの?


735:デフォルトの名無しさん
09/02/05 00:51:26
public class Class
{
 int i;
 public int Method() { return i++; }
}

これの方がいいだろ
たくさん作れるし

736:デフォルトの名無しさん
09/02/05 00:54:51
>>734
この流れって話の本筋なわけ?

737:デフォルトの名無しさん
09/02/05 00:56:27
>>729
それだと元のコードの引数を変えれば動作を変えられるという点が失われているじゃないか。

738:デフォルトの名無しさん
09/02/05 01:34:39
>>737
その引数を、Staticなメソッドで渡してあげればいいじゃない
public static class test
{
 static int i;
 public static int Method1() { return i++; }
 public static void Method2(int k) { i = i + k; }
}

739:デフォルトの名無しさん
09/02/05 01:36:47
>>738
いや、>>708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。

740:デフォルトの名無しさん
09/02/05 01:45:46
>>739
つまり

>だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。

というのは

>708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。

と同義ということ?


741:デフォルトの名無しさん
09/02/05 01:58:26
C#でCreateToolhelp32Snapshot関数を使いたいのですが、どう書けばいいのか分かりません。
.NET Frameworkに似たようなクラスライブラリはありませんか?

742:デフォルトの名無しさん
09/02/05 02:41:42
>>741
URLリンク(89.234.50.65)

743:デフォルトの名無しさん
09/02/05 02:43:11
URLリンク(pinvoke.net)

744:デフォルトの名無しさん
09/02/05 03:24:45
>>740
いや、同義というより1つの具体例と言うべきかな。
>>696みたいに別の場合だってある。

745:デフォルトの名無しさん
09/02/05 04:17:38
>>732
objectはキーワードだ

746:デフォルトの名無しさん
09/02/05 06:18:49
C#でアルファベットをfor文のループにかけてAからZまでを表示したいのですが、うまくいきません。
どのようにすればfor文でアルファベットを数値のようにAからZを表示する事が出来るのでしょうか?

747:デフォルトの名無しさん
09/02/05 06:20:05
>>746
一番分かりやすいのは配列にすればいいと思うよ

748:デフォルトの名無しさん
09/02/05 06:22:37
for(int i=0;i<26;i++)
Console.WriteLine((char)('A'+i));

749:デフォルトの名無しさん
09/02/05 06:47:26
for(char c = 'A'; c <= 'Z'; c++) Console.WriteLine(c);

750:デフォルトの名無しさん
09/02/05 09:26:15
>>740

>>739
> つまり

> >だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。

> というのは

> >708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。

> と同義ということ?


751:デフォルトの名無しさん
09/02/05 09:31:27
>>740
インスタンスを作ることでコンテキストの別な関数オブジェクトができる(イベント処理の時にstaticだとマズいだろう)
値を変えるのと振る舞いを変えるのとでは大違いだし…

デリゲート(委譲)はその名の通り、実行するタイミングを相手に委ねてる
渡すことを意図しているのは値(狭義の)ではなく動作

752:デフォルトの名無しさん
09/02/05 14:00:29
Form1からForm2をShowDialogした場合、
Formが描画される際に画面の上から順に
貼り付けてあるコントロールが表示される感じで、
Closeする場合も同様にもっさり感があるのだが、回避する方法はある?
ちなみにForm2がLoadされるとDataGridViewにMDBから
データを読込んで表示させているのだけど。

753:デフォルトの名無しさん
09/02/05 14:15:24
それはビルドした実行ファイル?デバッグ?

754:デフォルトの名無しさん
09/02/05 14:17:26
>>753
デバックでも実行ファイルでも描画速度にあまり変化がない感じ・・・

755:デフォルトの名無しさん
09/02/05 14:20:02
実行環境は?

756:デフォルトの名無しさん
09/02/05 14:20:35
>>752
描画を手動でやる

↓ソース開始↓

[コントロール名].SuspendLayout()   //コントロールの描画停止

//(この間に処理を書く)

[コントロール名].ResumeLayout()  //コントロールの描画再開

↑ソース終了↑

コントロール名をthisにすればForm全体の描画を停止できる

757:デフォルトの名無しさん
09/02/05 14:20:44
それはGUIの設計に問題があるね
フローレイアウトパネルにコントロール配置してFillしたりAnchorしたり
推奨されてないことやってないだろうね?

758:デフォルトの名無しさん
09/02/05 14:21:41
素人発言だけどSuspendLayoutとResumeLayoutとか?

759:752
09/02/05 14:36:21
実行環境はXPでCelelon2G・メモ1G
VS2008でつ。

GUIの設計はVB(.Netじゃないヤツ)みたいに
Formにコントロールを貼り付けるだけではダメなのかしら?
Formにあるのは、DataGridViewとButtonとTextBoxとLabelだけ。

DataGridViewコントロールを外して純粋にFormだけでShowすると
幾分早く描画されるって事はDataGridViewの処理が適切でないのかな?

今から756氏と758氏を参考に試してみます。
みんな優しいな。ありがたい!

760:デフォルトの名無しさん
09/02/05 14:47:04
DataGridViewに対してデータセットをバインドさせると早くなるよ~
それでも遅いのならSQL文を見直すしかない

761:752
09/02/05 15:01:31
SuspendLayoutはあまり変化がなかった・・・ _| ̄|○

今は、OleDbConnection使ってMDBへ接続しているんだけど、
もっと早い方法はあるんですか?
SQL文に関しては単なるSELECT文なのでどうにもならないと思われ。。

762:デフォルトの名無しさん
09/02/05 15:02:32
データのバインドを直接じゃなくBindingSourceに任せてみたらどうだろう
こういう症状はあまり経験も聞いたこともないけど

763:デフォルトの名無しさん
09/02/05 15:08:40
あれ?もしかしてDataSetなし?

764:752
09/02/05 15:09:40
>>762
早速試してみる!
VB6から移行してきた口なんだが、勝手が違い過ぎて戸惑いすぐる。

765:デフォルトの名無しさん
09/02/05 15:14:45
DataSetはあります。
コードはこんな感じ(抜粋)
strSelectSQL(変数)へSELECT文を入れてます。

dba = new OleDbDataAdapter(strSelectSQL, dbc);
OleDbCommandBuilder builder = new OleDbCommandBuilder(dba);
dba.Fill(dtset);
dataGridView1.DataSource = dtset.Tables[0];

766:752
09/02/05 15:15:47
>>765 
名前入れ忘れたが、752です。

767:デフォルトの名無しさん
09/02/05 15:18:28
CommandBuilderからdatasetまで全部動的か

768:752
09/02/05 15:36:30
bindingSourceを追加してみたけど、速度は劇的に早くならなかった。
実行速度はこの位って事で満足したことにまつ。
なんか引っかかるけど・・・

ところでbindingSource下記で使い方間違ってない??
dba = new OleDbDataAdapter(strSelectSQL, dbc);
OleDbCommandBuilder builder = new OleDbCommandBuilder(dba);
dba.Fill(dtset, "TEST");
bindingSource1.DataSource = dtset;
bindingSource1.DataMember = "TEST";
dataGridView1.DataSource = bindingSource1;

教えて君で非常に申し訳なかったです。

769:760
09/02/05 15:36:38
動かしてないんでご両所くださいw
すべて妄想ですw

↓ソース開始↓

OleDbConnection odc = new System.Data.OleDb.OleDbConnection();
OleDbDataAdapter odda;

DataSet ds = new DataSet("GetData"); //データセットの名称を指定

//接続情報を指定
odc.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + @"\DUMMYDATA.mdb";

//実行SQL文と接続先情報を設定してアダプタを作成
odda = new OleDbDataAdapter("SELECT * FROM DUMMYDATA", odc);
//データを取得しテーブルを作成
//テーブル名称を設定(任意)
odda.Fill(ds, "tm_DUMMYDATA");

//データソースに設定
dataGridView1.DataSource = ds.Tables["m_DUMMYDATA"];  //インデックス値でもいい

↑ソース終了↑

いろいろ勘違いしてたらごめんね
反省はしないけど


770:752
09/02/05 15:44:25
>>769
ソースまで書いてもらって、しかもコメント付で!!
ほんとに親切にありがとう。
素直にうれしす。

771:636の者です。
09/02/05 16:40:08
コンストラクタについての質問です。
クラスが3つあります。クラスBは3つコンストラクタがあります。
ClassA
{
ClassB b = new ClassB(~);
}
ClassB
{
public ClassB(N n){}
public ClassB(N n, M n){}
public ClassB(N n, M m, O o){}
}
ClassC
{
ClassB b = new ClassB(  );
b.~
}
クラスAからクラスBを呼び出すときは、if文で分けてコンストラクタを1つだけ呼び出すことが
できたのですが、クラスCからクラスBを呼び出すときはどのように呼び出したら良いでしょうか?

772:デフォルトの名無しさん
09/02/05 16:42:45
こっちが聞きたい
ClassAとClassCは何が違うんだ

773:636の者です。
09/02/05 16:47:41
>>772
クラスAのwindowフォームからクラスBのwindowフォームを呼び出すんですが、
そのクラスBのフォームの選択欄を別のクラスCで使いたいのです。

774:デフォルトの名無しさん
09/02/05 16:49:37
それがどうした
>>772の答えになってないだろ

775:デフォルトの名無しさん
09/02/05 16:51:35
だったら
class A()
{
public B b;
C c;
public A(){b=~;c=C(this)}
}

public class C()
{ public C(A a){} }
とかじゃだめ?


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