ふらっとC#,C♯,C#(初心者用) Part39at TECH
ふらっとC#,C♯,C#(初心者用) Part39 - 暇つぶし2ch415:デフォルトの名無しさん
09/03/25 23:05:24
異なるスレッドで作成されたControlをAddすることは可能でしょうか。
別スレッドのContextに設定されたフォームが閉じられた時、そこに使用されていたControlを再利用したいのですが。

416:デフォルトの名無しさん
09/03/26 10:23:18
意味の分からない質問かもしれませんが、
System.Console.ReadLine()
を使うと、実行が止まりますよね。
これは何の効果で止まってるんですか?
ReadLineの中で何らかのループが回ってるんでしょうか
それともsleepみたいなコトになってるんでしょうか

独学でずっとやってきて体系的に学んでいないので思い出したように気になりました
良く意味が分からないかもしれませんがよろしければエスパーしてください。

417:デフォルトの名無しさん
09/03/26 10:43:58
ループ

418:デフォルトの名無しさん
09/03/26 11:42:53


419:デフォルトの名無しさん
09/03/26 11:43:58
switch文について

VBの場合
case 1,2,5-8
のように一文で複数の判断をさせることができますが
C,C#では一つの判断しかできませんよね?

これはif文の羅列で処理するしかないのでしょうか?
C#で代わりに同じことをやらせる効率のよい方法ないでしょうか?


420:デフォルトの名無しさん
09/03/26 12:03:22
VBのSelect Caseはelse ifのようなもんだからねぇ
工夫次第かな
int a[8] = {1,1,0,0,1,1,1,1};
if (a[i]) hoge();
とすれば1,2,5-8にヒットする

421:デフォルトの名無しさん
09/03/26 12:05:30
やっぱりそうですか
ありがとうございます

422:デフォルトの名無しさん
09/03/26 12:09:07
>>416
OSは標準入力からデータの読み出しが完了するまで
ReadLineを呼んだプロセスの実行を停止してる。
完了したら実行を再開させる。

納得いかなければ マルチタスク ブロッキングI/O プロセス+状態遷移
なんかでぐぐっておくれ。

423:デフォルトの名無しさん
09/03/26 15:39:07
>>419
case 1: case 2: case 5: case -8:

424:デフォルトの名無しさん
09/03/26 15:48:27
>>423
その書き方でいいんですか
5-8のところが不思議な感じですね

これはjavaとかでは無理でC#特有の書き方なんですかね?

とりあえずやってみます ありがとうございました

425:デフォルトの名無しさん
09/03/26 15:49:04
>>422
ありがとうございます。
ググってみます。

426:424
09/03/26 15:53:31
javaでもコンパイルできました
C系統ではOKみたいですね
どうもです

427:デフォルトの名無しさん
09/03/26 15:55:23
おいおい

428:423
09/03/26 15:56:22
ごめん。アホなこと書いてた

429:デフォルトの名無しさん
09/03/26 15:58:22
ん?-8がやっぱおかしいの?
全部だめなの?

430:デフォルトの名無しさん
09/03/26 16:00:08
コンパイルが通ればすべてよし、みたいに考えるのがまずいんだよw
試してみること、ドキュメント探してみること、いろいろやろうぜ。

431:デフォルトの名無しさん
09/03/26 16:02:32
ちょっとワラタw

432:デフォルトの名無しさん
09/03/26 16:15:10
case 1: case 2:
と複数並べるのは確認できました
5-8の範囲はさすがに無理みたいですね

433:デフォルトの名無しさん
09/03/26 20:06:31
throw new NotImplementedException();
これの仕組みがわからないんですが
メソッドの中にドーンと書いてあるんですが
何に対してのエラーを識別するんですか?
指定範囲内のコードで例外があったらとかならわかるんですが
これより前後に書いたコードに対して適用されるとかなんですか?

434:デフォルトの名無しさん
09/03/26 20:21:32
throw new NotImplementedException
これはなんて書いてあるかわかる?
わかればOK!

435:デフォルトの名無しさん
09/03/26 20:24:17
投げる 新しい ちがう 実装される 例外

436:デフォルトの名無しさん
09/03/26 20:25:49
0で除算するメソッドで引数にゼロが代入されていたときなんかに自分で書くんだよ

if (引数 == 0)
 throw new ゼロだぞ( ゚Д゚)ゴルァ!!

437:デフォルトの名無しさん
09/03/26 20:33:17
わざわざ用意するほどのものなんですか?
好きなところに飛ばした方が話が速いと思うんですが、これって公開ライブラリとかじゃない限り
使う意味ないですよね?

438:デフォルトの名無しさん
09/03/26 20:37:37
いや、使う意味が無いと思ってる人は使わないよ。問題ない。
同じプロジェクトにいないならな

439:デフォルトの名無しさん
09/03/26 20:39:34
つーかそんなん、リファクタリング機能でメソッド作ったときに
自動的にできるくらいだろ?

440:デフォルトの名無しさん
09/03/26 20:44:26
>>433はな
throw自体が無意味って話に変わったんじゃないの

441:デフォルトの名無しさん
09/03/26 20:52:17
意味がわかりませんこれプロジェクトのひな形なんですが、何がしたいんですか?
例外時にNotImplementedException()に飛ばしたいのはわかるんですが、
何に対しての例外かが読み取れなく無いですか?
コードを追加するときはこの行を消すとかはあり得ないですよね

public class ContentProcessor1 : ContentProcessor<TInput, TOutput>
{
 public override TOutput Process( TInput input, ContentProcessorContext context )
 {
  // TODO: process the input object, and return the modified data.
  throw new NotImplementedException();
 }
}

442:デフォルトの名無しさん
09/03/26 20:52:58
throwってなにかね?

443:デフォルトの名無しさん
09/03/26 20:54:34
NotImplementedException(); つまり、
要求されたメソッドまたは操作が実装されていないエラーであることがわかるじゃん

URLリンク(msdn.microsoft.com)(VS.80).aspx


444:デフォルトの名無しさん
09/03/26 20:55:40
でも再利用できる機能をまとめて一つのメソッドに並べる場合は便利じゃね?
public boolLogin(string id, string password)
{
try
 return _login.(id, password);
catch (BadPasswordException e)
 //ログインできません例外
catch (BadIDException e)
 //そんなID存在しません例外
catch (ExpireException e)
 //パスワードの期限切れです例外
}
とか

445:デフォルトの名無しさん
09/03/26 20:56:36
>>441
消すんだよ。

446:デフォルトの名無しさん
09/03/26 20:58:42
この場合はthrowの前に独自コードを記述してthrowの前に分岐でreturnに飛ばして
returnに辿りつかなかったら最後のthrowを実行するように書けばいいんですかね

447:デフォルトの名無しさん
09/03/26 21:00:26
>>445
やっぱり消すのが自然ですよね
MSのひな形なんですが、このパターン初めてなので消してはいけない理由があるのかと思ったんですが
普通消しますよねTHX!

448:デフォルトの名無しさん
09/03/26 21:01:54
>>447
実装されてないことを示す例外だから、実装が終わったら消せばいい。
ということ。

449:デフォルトの名無しさん
09/03/26 21:02:45
setjmp,longjmpと同様に、大域脱出に使われるので、乱用はよくない。
プロジェクトによっては、自前で例外throwするのは禁止してることもあるよ。
だから、必須の機能とは言えない。

450:デフォルトの名無しさん
09/03/26 21:03:45
あ、禁止ってわかりにくいな。
そのプロジェクトのコーディング規約(≒ローカルルール)で禁止ね。

451:デフォルトの名無しさん
09/03/26 21:04:23
>>449
誰も必須だとか言ってないだろハゲ

452:デフォルトの名無しさん
09/03/26 21:04:50
>>433
要求されたメソッドまたは操作が実装されない場合にスローされる例外。

453:デフォルトの名無しさん
09/03/26 22:06:51
NotImplementedException を初めて見た時は感心した。
スタブを示す、標準的な例外が用意されているのは便利。
// TODO: とかより、ずっといい。

454:デフォルトの名無しさん
09/03/26 22:19:35
中身が空なだけで実際にメソッド自体はあるのに、NotImplementedってのも変な話だな。
ぜひ「空関数例外」みたいな名前に変えて欲しい。
俺の中ではNotImplementedはSystem.Reflectionでひっかかったときに投げるイメージ。

455:デフォルトの名無しさん
09/03/26 22:23:02
勝手に作れよハゲ

456:デフォルトの名無しさん
09/03/26 22:48:15
NotImplementedException 使うかどうかとかは開発スタイルによるかも
しれないなぁと思った。俺は結構使うほう。

457:デフォルトの名無しさん
09/03/26 23:07:21
抽象クラスのvirtualメソッドに使ったりするかな
これを継承したクラスで要るメソッドだけオーバライドして実装
NotImplementedExceptionじゃなくてNotSupportedExceptionでやる場合もあるけど

458:デフォルトの名無しさん
09/03/27 00:41:56
>>455
失礼な
まだほんのりと残っていますぞ

459:デフォルトの名無しさん
09/03/27 00:51:28
>>454
中身が空っぽのメソッド作るのは、
「宣言だけして実装してないよ」って感じだと思うんだけど。
C++ みたいに宣言と実装が分かれてないから空っぽの動体付けてるだけで。

>>457
NotSupported は、
「interface 的には実装しないといけないんだけど、
このクラスでは実装しません」みたいな時に使いたい。


460:デフォルトの名無しさん
09/03/28 01:50:52
NotImplementedExceptionはよく使うなー
午前7時に盲状態でコード書かなきゃいけないときとか頼りになる

461:デフォルトの名無しさん
09/03/28 09:02:10
レビューで指摘されたんですが
usingディレクティブの記述順序がパフォーマンスに影響する事ってあるんですか?

単に視覚的な問題くらいの認識しかなかったので
ググってみましたが、そういったソースはみあたりませんでした。

教えて!エロい人!

462:デフォルトの名無しさん
09/03/28 09:17:08
using の順序が問題になるのって、
拡張メソッドのインポート時くらいしか知らない。

463:デフォルトの名無しさん
09/03/28 16:21:29
コントロールにイベントを実装しようとおもって、delegateを記述してるんだけど、
メソッドの戻り値がvoidのとき、Func<void, string> _EventHandlerみたいに記述できないの?
delegateを記述するの面倒だよ(´・ω・`)ショボーン



464:デフォルトの名無しさん
09/03/28 16:22:53
>>463
Action<>

465:デフォルトの名無しさん
09/03/28 16:41:31
おおありがとう(`・ω・´)シャキーン

466:デフォルトの名無しさん
09/03/28 18:46:07
EventHandler<T>にしようよ。

467:デフォルトの名無しさん
09/03/28 19:58:59
クラスのメンバで
public string Name;
とすることと
private string _name;
public string Name
{
 get { return _name; }
 set { _name = valiue; }
}
はどう違いますか?


468:デフォルトの名無しさん
09/03/28 20:18:48
なんの釣りだよ。

469:デフォルトの名無しさん
09/03/28 20:19:50
いや本当に違いがよくわからないので教えて下さい

470:デフォルトの名無しさん
09/03/28 20:21:43
ぐぐったんですか?

471:デフォルトの名無しさん
09/03/28 20:23:51
プロパティ public privateで試してみましたが書かれているサイトはよくわかりませんでした
何か専門用語があるのかもしれませんがそれがわからないのでぐぐれません


472:デフォルトの名無しさん
09/03/28 20:34:58
>>467のコードの通りなら、特に使う上での違いはないのでは?
フィールドをPublicにするのは習慣としておすすめできない、というくらいで。

473:デフォルトの名無しさん
09/03/28 20:39:03
フィールドをpublicにするくらいなら、自動プロパティにしろ
public string Name
{
 get;
 set;
}


474:デフォルトの名無しさん
09/03/28 20:42:11
>>473
なんでpublicじゃだめなのかを聞いてるのに自動プロパティにしろなんてのは筋違いだろ

475:デフォルトの名無しさん
09/03/28 20:43:15
private string _name;

public string Name{

476:デフォルトの名無しさん
09/03/28 20:48:12
>>474
誰がそんなこと聞いてる?

477:デフォルトの名無しさん
09/03/28 20:48:26
誰も訊いてない。

478:デフォルトの名無しさん
09/03/28 20:54:34
class cls
{
float[,] test;
}

これって動的配列なんでしょうか?
float a = 0;
for(i=0;i<100;i++){
for(j=0;j<100;j++){
test[i, j] = a;
a++;
}
}
こうやって他のクラスから自由に配列の大きさを決めて格納するのに使えるんですか?

479:デフォルトの名無しさん
09/03/28 21:00:12
配列は確保するまで使えません
未割り当てエラー出すだけ

つーかそのくらい実行してみりゃ分かるだろうが

480:デフォルトの名無しさん
09/03/28 21:27:17
フィールドをプロパティに変えたときに互換性が取れなくなるから
最初からプロパティにしとけって話だろうけど
再コンパイルすればいいだけだからほとんど意味は無いよね

481:デフォルトの名無しさん
09/03/28 21:30:52
>>476
>>467の趣旨はそういうことだろ?

482:デフォルトの名無しさん
09/03/28 23:24:58
>>481
そんなの本人じゃないと分からない。単に違いを聞いてるだけに読める。
>>467の字面通りなら、ほとんど違いはないけど、作法としてパブリックフィールドは
推奨されていない、としか答えようがない。

483:デフォルトの名無しさん
09/03/28 23:36:10
>>482
少なくとも自動プロパティを使えはおかしいだろ
何をいってんだ?

484:デフォルトの名無しさん
09/03/28 23:46:58
>>467
プロパティってのは実はメソッド。
private string _name;
public string Name
{
 get { return _name; }
 set { _name = value; }
}
てのは
private string _name;
public string get_Name()
{
return _name;
}
public void set_Name(string value)
{
_name = value;
}
と書いてるのと同じ。


485:デフォルトの名無しさん
09/03/28 23:48:07
で、どう違うんだ?


486:デフォルトの名無しさん
09/03/29 00:02:01
プロパティならそのまま格納取り出しするだけじゃなくて
条件チェックやらなんやら色々できるだろ

487:デフォルトの名無しさん
09/03/29 00:03:37
そういう理屈なら格納取り出しするだけの自動プロパティって何のためにあるんだよ

488:デフォルトの名無しさん
09/03/29 00:11:28
今は格納取り出しするだけかもしれないけど後でなんか書きたくなるかもしれんだろ

489:デフォルトの名無しさん
09/03/29 00:17:26
まずpublicなフィールドとして記述し、アクセサが必要とされた時点でプロパティに書き換えればいいじゃない

490:デフォルトの名無しさん
09/03/29 00:25:44
フィールドとプロパティではメタデータ上でも区別される

491:デフォルトの名無しさん
09/03/29 00:30:58
ソースレベルで互換性があればいいだろ
そこだけアップデートされるようなライブラリを作ってるなら別だけど

492:デフォルトの名無しさん
09/03/29 00:36:24
使いたくなきゃ使わなきゃいいじゃない

493:デフォルトの名無しさん
09/03/29 00:42:17
じゃメンバ関数をpublicにするということと等価ってこと?

494:デフォルトの名無しさん
09/03/29 00:44:13
もうそれでいいよ

495:デフォルトの名無しさん
09/03/29 00:55:53
屁理屈すぎてもう面倒臭い

496:デフォルトの名無しさん
09/03/29 01:01:32
自分の理屈に合わない理屈は屁理屈ということにしたいんですね わかります

497:デフォルトの名無しさん
09/03/29 01:07:10
>>496
それを屁理屈って言うんだよ。

498:デフォルトの名無しさん
09/03/29 01:09:11
>>497
まるですじの通らない理屈とは思えないが?

>へ‐りくつ【×屁理屈】
>まるですじの通らない理屈。道理に合わない理屈。「―を並べる」「―をこねる」

499:デフォルトの名無しさん
09/03/29 01:09:11
フィールド直接触るとかやめてくれ・・。
未来の自分でさえ信用できないのに、他人の利用者を信じれるわけがないだろJK

500:デフォルトの名無しさん
09/03/29 02:10:30
いやいや好きにやりゃいいじゃん
そいつにとってフィールドもプロパティも一緒つーなら
それ以外の使い方しないんだろうから
どうせ個人でやるだけだろうしw

501:デフォルトの名無しさん
09/03/29 02:18:35
じゃ違うの?

502:デフォルトの名無しさん
09/03/29 02:22:27
Control.DataBindingsと組み合わせるならpublicフィールドの選択肢は無いけどね。

503:デフォルトの名無しさん
09/03/29 02:29:35
なんで?

504:デフォルトの名無しさん
09/03/29 02:39:07
>>503
FormにTextBox2つ貼り付けて
class MyData
{
public string PublicField;
public string PublicProperty { get; set; }
}
作って
textBox1.DataBindings.Add("Text", data, "PublicField");
textBox2.DataBindings.Add("Text", data, "PublicProperty");
として動かしてみたらわかる。
PublicFieldはDataBindの対象にならない。

505:デフォルトの名無しさん
09/03/29 03:01:01
>>501,503
その頭の悪そうなレスはやめてくれ

506:デフォルトの名無しさん
09/03/29 03:42:08
>>505
同意

とりあえずここ読め
URLリンク(ufcpp.net)

オブジェクト指向には実装の隠蔽というものがあってだね(ぶつぶつ

507:デフォルトの名無しさん
09/03/29 13:13:36
パブリックプロパティを自動実装すると
パブリックフィールドを直接公開するよりも一般に良いということを示さない限り
一般にプロパティにするべきだという理屈は屁理屈でしかないだろ

508:デフォルトの名無しさん
09/03/29 13:20:52
なんでそこまで拘るんだw
自分しか使わない&拡張する予定がなければフィールド使えばいいじゃない。

509:デフォルトの名無しさん
09/03/29 13:27:47
>>508
拡張する予定があっても他人が使っていても
フィールドで問題ないだろ
どういう時に問題が起きるわけ?

510:デフォルトの名無しさん
09/03/29 13:31:33
フィールドで問題ない問題ない

511:デフォルトの名無しさん
09/03/29 13:38:43
はいはい、その通りですね。
君はパブリックフィールド使えばいい。私は今まで通りプロパティ使うけどな。

512:デフォルトの名無しさん
09/03/29 13:44:41
はいはい、その通りですね。
君はプロパティ使えばいい。おいらは今までどおり使い分けるけどな。

513:デフォルトの名無しさん
09/03/29 13:46:51
春だな
さすがに今日は言っても文句ねえだろ

514:デフォルトの名無しさん
09/03/29 13:51:35
桜も咲いてるしな・・・

515:デフォルトの名無しさん
09/03/29 14:19:23
・get setを制限する必要がない
・setされた値を事前に評価する必要がない
・バッキングストアを仮想化する必要がない
・プロパティ自体をvirtualにしたりsealedにしたりする必要がない
など、すなわち単なる「変数」であれば、プロパティのほうがコストが
高いのは明らかだから、あえてプロパティを使わずフィールドを公開して
構わないと思うよ。

また、将来上記のうち上3点(最後の1点はまるっきりの変更なんで別だが)の
方針が変更される可能性があったとしても、その時点でフィールドを
プロパティに変更すればソースレベルでの互換性は保てるので、問題ない。
(ただし、公開クラスライブラリで、バイナリ互換性が必要な場合を除く)

516:デフォルトの名無しさん
09/03/29 14:21:23
setを制限したければreadonlyにすりゃいいじゃん

517:デフォルトの名無しさん
09/03/29 14:39:21
明示的に初期値が設定できない自動実装なんて

518:デフォルトの名無しさん
09/03/29 15:06:45
プロパティもインライン化されればコストは変わらないんじゃないの

519:デフォルトの名無しさん
09/03/29 17:12:56
自作クラスを2つのプロジェクトで使いたい場合、使いたいクラスはどっちのプロジェクトに含ませればいいんですか?
今どっちのプロジェクトにも同じクラスを書いていて修正するときなんか無駄があるような気がしてきました
この場合どっちのプロジェクトにも含ませない方法とかがあってそうした方がいいんでしょうか?変更は頻繁にするんですが

520:デフォルトの名無しさん
09/03/29 17:15:44
>>519
片方のプロジェクトからもう1つを参照してもいいし、
別にライブラリプロジェクト作って、それを2つのプロジェクトから参照してもいいし、
ソースを「リンクとして追加」もできるし。

521:デフォルトの名無しさん
09/03/29 17:52:48
できました。ありがとうございました
読み込まれるプロジェクトの順番が大事なのかとか変な方向に考えてましたどうもです

522:デフォルトの名無しさん
09/03/29 20:07:04
イベントハンドラのサンプルなんかだと、フィールドでそのまま公開されてるようにみえるけど、
これもプロパティで表示したほうがいいの?

URLリンク(msdn.microsoft.com)

523:デフォルトの名無しさん
09/03/29 20:16:17
>>522
event キーワードがついてると、普通のフィールドじゃなくなる。
プロパティのデリゲート版みたいな状態のなので、
そのまま公開されてるわけじゃない。

524:デフォルトの名無しさん
09/03/29 20:22:34
そうなんだ意味が違うんだね サンクス

525:デフォルトの名無しさん
09/03/29 22:08:28
ReadBytesで2次元配列に格納する方法がわかりません
これは1次元としてしか扱えないんですか?

526:デフォルトの名無しさん
09/03/29 23:56:19
>>525
嫁が欲しいなら2次元で我慢しとけ

527:デフォルトの名無しさん
09/03/29 23:59:32
質問です。
C#の本買って勉強してるんですがNorthwindが何なのかわかりません。
Northwindってなんですか?
ぐぐっても
URLリンク(www.dreamsoft.jp)
こんなのとか
URLリンク(msdn.microsoft.com)
こんなのしか見つかりませんでした。

528:デフォルトの名無しさん
09/03/30 00:00:56
MSのデータベース関連のサンプルにちょくちょく出てくる
サンプルデータの名前。
航空会社かなんかのデータっていう想定のサンプル。

529:デフォルトの名無しさん
09/03/30 00:01:05
>>527
後者のリンクにある、サンプルデータベースじゃないの?

530:デフォルトの名無しさん
09/03/30 00:01:12
VS2008EEでプログラムを勉強してる素人です。
拡張コントロールをいくつか作ることで、継承のありがたみは
少しずつ理解できてきたところなんですけど、
インターフェースや抽象クラスの存在意義がなかなか理解できません。
インターフェースの実装を明示することで
その機能が実装されてることが一目でわかるというようなこと以外にメリットが思いつかないんですが
大規模なものを書かないとそこら辺の概念は理解できないものなのでしょうか。

531:デフォルトの名無しさん
09/03/30 00:14:27
>>530
↓の14章を読んでみればどうかな?
それでも理解できなければ、今は使う必要性がないんだよ。

URLリンク(www.atmarkit.co.jp)

532:デフォルトの名無しさん
09/03/30 00:15:15
うぐ、あげちまった

533:デフォルトの名無しさん
09/03/30 00:16:12
ありがとうございます。読んでみます。

534:530
09/03/30 00:17:11
↑530=533です。ID出ないの忘れてました。

535:デフォルトの名無しさん
09/03/30 00:22:40
>>530
インターフェースと抽象クラスの説明は確かに難しいのかも
例えば家電でいうと・・・

・抽象化
家電は電気製品なのでどんな製品にも必ず電源のオンオフスイッチがある→抽象クラスで記述

・インターフェース
家電は電気製品なのでどんな製品にも必ず通電する必要がある→
だけど電源を供給する方法は、コンセント、電池、バッテリー、ソーラーパネルと多種多様なので、
電源を供給するための端子は付けておくけど、実際の供給方法は製品に任せる

こんな感じ?


536:デフォルトの名無しさん
09/03/30 00:36:10
>>525
どんなデーター形式でも扱えるよ。

537:530
09/03/30 00:42:32
>>535
なるほど。既に定義されてるインターフェースを使ってみたら
だいぶそういう概念が理解できてきました。
もっとも自分で定義して実装する必要性を感じるには
もっと大規模なコードを書く必要があるみたいです。
少しずつ使えるようになりたいと思います。ありがとうございました。

538:デフォルトの名無しさん
09/03/30 01:07:27
>>537
stringをフィールドに持つクラスと、intをフィールドに持つクラスで、
それぞれ共通に名前を持つフィールドを持ち、
さらに、それぞれstringに保存された文字列の文字数とintに保存された数字の桁数を取得するメソッドを
interfaceを用いて取得する方法を記述してみれ

abstract public class BaseClass
 public string Name { get; set; }

public class StringClass : BaseClass
 public string StringData{ get; set; }

public class IntClass : BaseClass
 public int IntData { get; set; }

ここまではわかるっしょ 

539:デフォルトの名無しさん
09/03/30 01:18:46
>>538
先生!なぜabstractのBaseクラスを定義しているのかわかりません!
その場合インターフェイスじゃなくて
abstract int GetLength();をBaseクラスに書くのが適切だと思います!

540:デフォルトの名無しさん
09/03/30 01:30:02
boolのような論理値やimageを格納するclassもあるので、
すべて一様にGetLength()が適用できないんです><

でも、それぞれ名前はもってるんです><


541:デフォルトの名無しさん
09/03/30 01:40:42
Interfaceってのは、RubyやPythonなんかの動的型付言語なら不要だけど、
C#みたいにコンパイル時に確定してないと我慢できない潔癖な処理系に
対して、私はこのメソッド持ってますよと、とりあえず宣言するための
姑息な手段。
うっかり安心して呼び出すと実体は、
throw new NotImplementedException();と書いてあるだけなので、結局
1行目と同じ結果になる。


って、あんまり夜中にアンサイクロペディアとか読みふけってちゃ駄目だな。


542:デフォルトの名無しさん
09/03/30 01:53:11
>私はこのメソッド持ってますよと、とりあえず宣言するための姑息な手段。
リフレクションで代用できないの?

それはともかく、まぁ、姑息かどうかはわからんけども、
interfaceを継承してるクラスは、そのinterfaceで宣言した型にキャストして実行できるから、
メソッドを持っていますよと、とりあえず宣言するためだけの手段ではないんでないの?
キャストできますよという意味と同義で書いてるのならその通りかもしらんが。

543:539
09/03/30 02:22:10
>>540
interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
abstract int GetLength()をovarrideするのと何が違うの?

俺の言いたかったのはinterfaceの例題を出すなら抽象クラスを使ったら駄目じゃないのかいと言いたい。

>>538のサンプルの場合
public Interface ISample
{
int GetLength()
}

を定義したとしてそのInterfaiceを実装するのはBaseClass?それとも
IntClassや StringClass?
BaseClassがInterfaceを実装したとして
publice abstract int GetLength();


544:539
09/03/30 02:26:17
を定義して IntClassや StringClassがそれをoverrideするなら
GetLengthを呼び出す側はわざわざInterfaceで呼ぶ必要もなくなるわけで。

IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元

545:デフォルトの名無しさん
09/03/30 02:33:03
>>543
>IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
すべてはobject型を継承するのは混乱の元?

>interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
違うでしょ
bool型などの論理型にはGetLength()は必要ないわけで。
その理屈をとことん突き詰めれば、すべては同じobject型を継承しているので、
objectクラスにGetLength()を作って、それをoverrideするなり、privateにして隠蔽すればいいことになる。

>そのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass?
インターフェースを実装するのはintclassやstringclassだね
intclassやstringclassをキャストしてISample型のarrayに保存したり、
is ISample で型を確かめてGetLengthを実行したりとか。

546:デフォルトの名無しさん
09/03/30 02:38:16
>>543
じゃ、お題をこんなふうにすればいいかい?

stringとintとboolをフィールドに持つクラスで、
それぞれ共通に名前を持つフィールドを持ちながら、
さらに、intとstringを持つクラスだけに、stringに保存された文字列の文字数と、
intに保存された数字の桁数を取得するメソッドをinterfaceを用いて取得する方法を記述してみれ
ただしBoolClassは論理値なので桁数とかないので桁数を取得するメソッドは追加する必要はない

abstract public class BaseClass
 public string Name { get; set; }

public class StringClass : BaseClass
 public string StringData{ get; set; }

public class IntClass : BaseClass
 public int IntData { get; set; }

public class BoolClass : BaseClass
 public bool BoolData { get; set; }

こんなんでいい?

547:539
09/03/30 02:56:29
>>545


>>IntClass StringClassがInterfaceを実装するなら 初心者にはBaseClassは混乱の元
>すべてはobject型を継承するのは混乱の元?

継承が悪い(混乱の元)とは言っていなくて、
抽象クラスとInterfaceの使い方を知らない人に
Interfaceの例題を出そうとしてabstractクラスを使っちゃ混乱するでしょと言いたいの。

>>interfaceだって戻り値がintのGetLength()作ったら同じことではないの?
>違うでしょ
>bool型などの論理型にはGetLength()は必要ないわけで。

例題に
class boolClass:BaseClass なぞ書いていないでしょw

>その理屈をとことん突き詰めれば、すべては同じobject型を継承しているので、
>objectクラスにGetLength()を作って、それをoverrideするなり、privateにして隠蔽すればいいことになる。

どう突き詰めれば>>538のBaseClassにGetLength()を定義することがこんな解釈になるのか謎w

>>そのInterfaiceを実装するのはBaseClass?それとも IntClassや StringClass?
>インターフェースを実装するのはintclassやstringclassだね

IntClassやStringClassがInterfaceを実装するなら話は分かるんだけど、
例題に IntClassやStringClassがInterfaceを実装するとどこにも書いてないわけで。
BaseClassがInterfaceをabstractで実装してサブクラスがoverrideすることもできるわけで
話が混乱するでしょ。


結論:初心者に例題出すなら もっといい例題を出そうね。

548:530
09/03/30 03:00:38
水を差すつもりはないですけど
ぶっちゃけお二人(だと思うけど)の議論を見てるだけでも勉強になります
経験を積んだ人間に話しを聞ける環境にいないので
自分の理解の甘さが改めて実感できて、素人にはありがたいッス。

549:デフォルトの名無しさん
09/03/30 03:09:22
>>547
面倒くせぇなあお前

もし返答があったら、単にinterfaceで記述しただけじゃ抽象クラスに記述するのと同じだから、
>>540で記述したように抽象クラスで実装できない例の存在を示して、
interfaceの型で宣言した変数にキャストして実行できる利点を記述しようとおもったら、すべて台無しじゃねーか

>>548
というわけで関係ない人がすべて解答してくれたわけで答えが出てしまったわけだが、
まあ、なんだがんばれ

550:539
09/03/30 03:09:41
>>546
そんなんでいいと思います。

ただ BaseClassをabstractにする必要はないかも?

newさせたくないっていう理由でabstractクラスにするとしても
例題としてはabstractいらないかも。

2次関数を知らない人に教えるときにいきなり 
(sinx)^2 + (sinx) + 5 = 0
みたいな合成関数で例題出されたら混乱すると思う。
丁寧に教えるならシンプルにしてあげないと。

551:530
09/03/30 03:16:51
>>549
いや、本当に勉強になります。
問いを与えてもらえて良かったです。
538辺りからをもうちょい読み返してみます。

552:539
09/03/30 03:25:40
>>549

>面倒くせぇなあお前
ありがとう

>もし返答があったら、単にinterfaceで記述しただけじゃ抽象クラスに記述するのと同じだから、
>>>540で記述したように抽象クラスで実装できない例の存在を示して、
>interfaceの型で宣言した変数にキャストして実行できる利点を記述しようとおもったら、すべて台無しじゃねーか

小出しにするほうが面倒くさいと思う。

553:デフォルトの名無しさん
09/03/30 03:43:37
>小出しにするほうが面倒くさいと思う。
んなこと理解しててわざとやってるっていってんの。
後で反証を説明したほうが効果的に理解してもらえるかなと思ったから。

>>面倒くせぇなあお前
>ありがとう
そのわざとやってるところにチャチャいれられてすべて台無しになってるから面倒くせぇっていってんの
面倒くさいの質が違う

わざと言ってるんだろうけどw

554:デフォルトの名無しさん
09/03/30 07:37:45
using(①) {②}
で、①では自作ログ出力クラスのインスタンスを生成しています。
この際、インスタンス初期化時にログファイルを開けない場合は
StreamWriterのコンストラクタが出力する例外をそのままthrowするのですが、
それをcatchするには、
try {using(①) {②}}
みたいに全体を囲わないといけないのでしょうか。
この場合、②までtryに含まれてしまうのが嫌なのですけど・・・。

555:デフォルトの名無しさん
09/03/30 08:46:39
Log log = null;
try {
    log = new Log();
}
catch (...) {
    throw;
}
using (log) {
}
なんてのもできんではないが全体try-catchでいいと思うよ

556:デフォルトの名無しさん
09/03/30 09:08:44
try
{
MyLogger logger = null
logger = new MyLogger();

// ...


}
catch (MyLoggerException myloggerex)
{
if (myloggerex.InnerException is IOException)
{
// ...
}
}
finally
{
if (null != logger)
{
logger.Dispose();
}
}

自作ログ出力クラスが独自の例外を送出するようにすればよくない?

557:デフォルトの名無しさん
09/03/30 20:15:45
AクラスをBクラスのメソッドの引数として渡した場合はアドレス参照で渡されるのはわかりましたが
そのメソッド内で、渡されたAクラスをBクラスのフィールド宣言に代入した場合もアドレスが保持されるだけなんでしょうか


558:デフォルトの名無しさん
09/03/30 20:19:28
アドレス参照って誤解を言い方を止めろ
参照渡しと値渡しだ

参照型は指定しない限り常に参照のコピーを取るだけ
値型は常に値そのもののコピー

559:デフォルトの名無しさん
09/03/30 21:23:16
>>558
参照渡しと値渡しと
参照型と値型は別物ぞよ

560:デフォルトの名無しさん
09/03/30 21:33:54
>>559
そうですね^^;

561:554
09/03/30 22:48:41
>>555-556
ありがとうございます。
独自の例外を作って、tryは今まで通りusing全体を囲うのが一番シンプルになりそうですね。
独自の例外なら問題なくcatchで切り分けられるし。

562:デフォルトの名無しさん
09/03/31 05:00:24
すみません、質問いいですか?

例えばラベルをある数だけ生成したい場合コントロールの名前はどうつけたら
いいのでしょうか?

デザイナで置くとlabel1とか自動で付きますよね
forループで廻すとなるとどうするのでしょうか・・・


563:デフォルトの名無しさん
09/03/31 07:28:59
意味不なんだがエスパーすると。
forループの中でコントロールを自分で作る。

564:デフォルトの名無しさん
09/03/31 07:55:10
こういうことをやりたいのか?
for (int i = 0; i < 100; i++)
new Label() { Name = "label" + i.ToString() }


565:デフォルトの名無しさん
09/03/31 08:04:16
まさにそれです
自己解決しました


566:デフォルトの名無しさん
09/03/31 14:40:25
まさにそれですって
…自己解決ちゃうやん

567:デフォルトの名無しさん
09/03/31 15:22:21
ワロタ

568:デフォルトの名無しさん
09/03/31 18:50:25
URLリンク(msdn.microsoft.com)
ここの「コードを使用してイメージをレンダリングする方法」(一番下のソース)を実践したいのですが、
WPFアプリケーションプロジェクトに貼り付けただけではウィンドウに表示されません。
(貼り付ける場所がおかしいのだと思いますが…。)
どういう風に書けばいいのか教えてください。
VSC#2008Expressを使ってます。

569:デフォルトの名無しさん
09/03/31 23:52:30
.NET 2002(C#) で FTPクライアント処理を実装したいのですが、
おすすめのライブラリはありますか?


570:デフォルトの名無しさん
09/04/01 00:01:53
質問です。
埋め込んだリソースファイル(WAVE)を指定した場所に直接コピーしたいのですが
どのように記述したらできるのでしょうか?

571:デフォルトの名無しさん
09/04/01 00:08:08
ストリームを直接ファイルストリームに出力すればいいんでね?

572:デフォルトの名無しさん
09/04/01 01:22:06
>>569
市販の?

573:デフォルトの名無しさん
09/04/01 01:24:51
>>569
basp21はどうよ?

574:デフォルトの名無しさん
09/04/01 01:40:38
すいません。質問です。

フォームにデザイナで追加したコントロールには、何か、インデックスのようなものが割り振られてたりはしないのでしょうか?
自分はボタンをデザイナで一個一個大量に配置してしまったのですが、
それをプログラムコードから利用するときにめんどくさくて大変です。
最初から配列でとっておけばよかったと今では後悔していますが、
今からでも添え字があれば、それを元にエレガント且つ簡潔にコードからの利用が可能になるはずです。
誰かうまいやり方など知ってる方がいらっしゃいましたらお教えくださいませ。


575:デフォルトの名無しさん
09/04/01 01:53:07
作り直せば?

576:デフォルトの名無しさん
09/04/01 01:54:17
自分で配列に入れるコードを書けばいいじゃん。


577:デフォルトの名無しさん
09/04/01 01:56:21
>>574
>フォームにデザイナで追加したコントロールには、何か、インデックスの
>ようなものが割り振られてたりはしないのでしょうか?
ない
プログラム内で配列でコントロールを生成して使ったことがある。

578:デフォルトの名無しさん
09/04/01 02:04:02
Control.Controls

579:デフォルトの名無しさん
09/04/01 02:09:20
なんと、そんなのが有ったのか・・・>>577のないは訂正だ。

580:デフォルトの名無しさん
09/04/01 02:47:59
類似質問ですが
グループボックス内にテキストボックスやプログレスバーなどが沢山あり
それを実行時にグループボックスごと追加する場合
ユーザー定義コントロールを作ってnewするのがいい方法なのでしょうか?

又、その場合ユーザー定義コントロールの作り方が良くわかるサイトなどご存知ないでしょうか?

宜しくお願い致します。

581:デフォルトの名無しさん
09/04/01 03:10:49
574っす。
>>575-579
ありがとやんした!!


582:デフォルトの名無しさん
09/04/01 03:43:54
>>569
URLリンク(uwa.potetihouse.com)
とか

583:568
09/04/01 03:53:22
別のスレで聞いてきます。どうも~

584:デフォルトの名無しさん
09/04/01 06:23:48
質問です。
今使用しているアンマネージDLLに int WINAPI hoge(float *p, int size); のような関数があります。
float *pは呼出元で確保した配列のポインタなのですが、16バイトアライメントされている必要があります。
C#でアライメントを考慮した配列を確保する方法などあるのでしょうか?

585:デフォルトの名無しさん
09/04/01 07:28:15
[StructLayout(LayoutKind.Sequential, Pack=16)]
struct Test
{
  データ
}



586:デフォルトの名無しさん
09/04/01 09:21:18
yield の使い道って何かあるのでしょうか?
なんとなく気になって@ITとか見てみたんですがなんかわかりづらい・・・・
わかりやすい解釈のページとか教えていただけると助かります。

587:デフォルトの名無しさん
09/04/01 09:30:26
列挙処理書くならかなり便利なんだけど。


588:デフォルトの名無しさん
09/04/01 09:36:26
>>587
そのような記述を多く見るのですが・・・orz
いかんせん読解力が無いようで・・

589:デフォルトの名無しさん
09/04/01 09:40:11
>>588
今は大抵 LINQ の標準ライブラリであらかた機能がそろうけども、
特定の条件だけ満たす要素を取り出したり、
特定のプロパティの値を取り出すような関数書いてみ。

それも、いったん new List() するんじゃなくて、遅延評価で。


590:デフォルトの名無しさん
09/04/01 10:00:47
>>588
すべてを終えるには時間のかかる処理をしながら、条件を満たした項目から表示していくプログラムを作れば理解できるよ
記憶領域を使わないですむし、演算の終わった項目から並列処理にかけたりできるしね

591:デフォルトの名無しさん
09/04/01 10:02:48
yieldは別に速くはならないだろ

592:デフォルトの名無しさん
09/04/01 10:06:41
>>589-590
ありがとうございます。
そういう条件でちょっとサンプルでもつくってやってみます。

593:デフォルトの名無しさん
09/04/01 12:20:42
>>586
こんなのはどう?
URLリンク(msdn.microsoft.com)



594:デフォルトの名無しさん
09/04/01 12:45:17
最近更新してないと思ったらやはり板移転検出してた・・・

595:デフォルトの名無しさん
09/04/01 13:12:07
>>593
情報ありがとうございます。
こういう使い方が出来ると言うことなんですね。

確かに >>599が言うように
>特定の条件を満たす要素を・・・
というのはその通りかと
処理がそれを呼び出す側ですっきりしそうです。

使い道が少しですがわかった気がします。
タイミングさえあれば今度どこかで実装してみようと思います。

596:デフォルトの名無しさん
09/04/01 13:26:44
質問ですが、
aspxでファイルにResponse.Redirect(ファイルURL)でダウンロードさせてるんですが、
複数ユーザの同時アクセス数を制限するにはどうしたらいいのですか?
例えば上限を10にしておいて同時アクセス数が11になったらエラーページに飛ばすみたいな。

static Queue _queue = new Queue();
static object _lock = new object();
page_Load()
{
lock(_lock)
{
if(_queue.Count > 10)
Response.Redirect(ErrorPage);

_queue.Enque(new object());
}
try
{
Response.Redirect(DownloadURL);
}
finally
{
lock(_lock)
{
_queue.Deque();
}
}
}

こんなんしか思いつかないんですが・・・
定石みたいなのあるのでしょうか。

597:596
09/04/01 13:32:33
>>596に追加で
ダウンロード時間を30秒と決め付けて
finally句でDeque前に
Thread.Sleep(30 * 1000);

598:596
09/04/01 14:44:42
Sleepじゃ駄目だ~(T_T)
あと DequeueのlockとEnqueueのlockでデットロック起こしてる~(T_T)
ってワケで作り直し。

private volatile static Queue _queue = new Queue();
protected void Page_Load(object sender, EventArgs e)
{
if (_queue.Count >= 10)
{
Response.Write("混雑してます 同時アクセス数" + _queue.Count);
Response.End();
}

_queue.Enqueue(new System.Threading.Timer(new TimerCallback(tmr_Tick), null, 10 * 1000, System.Threading.Timeout.Infinite));

try
{
Response.Write("同時アクセス数" + _queue.Count);
Response.End();
}
finally
{
System.Diagnostics.Debug.WriteLine("finally");
}
}

private static void tmr_Tick(object state)
{
_queue.Dequeue();
System.Diagnostics.Debug.WriteLine("Deque Count" + _queue.Count);
}

599:デフォルトの名無しさん
09/04/01 14:50:04
それでできる? 俺なら、外部(データベースとか)に、接続数を保持しとくな。

600:デフォルトの名無しさん
09/04/01 15:21:19
共有リソースへのアクセス数を制限するならセマフォ使えばいいしょ

601:596
09/04/01 17:28:08
>>600 セマフォ使ってみました。
5スレッドまで。1秒待っても駄目だったら混雑中。
private volatile static Semaphore _pool = new Semaphore(0, 5);
static Default() {_pool.Release(5); }
protected void Page_Load(object sender, EventArgs e)
{
if (!_pool.WaitOne(1000))
{
Response.Write("混雑しています。");
Response.End();
}
try
{
Response.Redirect(URL);
}
finally
{
Thread t = new Thread(() => {
Thread.Sleep(10 * 1000);
int cnt = _pool.Release();
System.Diagnostics.Debug.WriteLine("cnt " + cnt);});
t.Start();
System.Diagnostics.Debug.WriteLine("finally");
}
}
}

602:デフォルトの名無しさん
09/04/01 20:35:20
初心者なので、用語の使い方を間違っていたらすみません。
良く経験の長い方のレスなどを見ていると

フレームワークを拡張するというような記述がありますが
具体的にはどのようなことをいうのでしょうか。
フレームワーク内で既に定義されているクラスを
継承して拡張した自分なりのクラスを持っているという理解で正しいでしょうか。

また、拡張したフレームワークを使用してアプリを作った場合
そのアプリは、拡張されていないフレームワーク上ではキチンと動作しないものなのでしょうか。
よろしくお願いします。

603:デフォルトの名無しさん
09/04/01 20:52:15
フレームワークの拡張という言葉はあまり使わない気がする

フレームワークってのは、機能を簡単に使えるようにした壮大なライブラリ(クラス)群で、
料理で言うところの味噌や醤油のような調味料の集まりみたいなもの。

この調味料を継承して拡張して機能を自作で追加すると、
パスタにかけるだけで美味しいパスタができるというトマトソースを作ることができる。

フレームワーク(調味料)さえあれば、トマトソースのできる調味料が揃っているので
作ることはできるけど、レシピは教えてあげないと作れない。

そのレシピはdll(ダイナミックリンクライブラリ)といってレシピの集まり。
これを配布してあげることで、同じフレームワークを持っているPC上であれば、
どれもおいしいトマトソースのパスタを作ることができるという感じ。

604:デフォルトの名無しさん
09/04/01 20:56:44
一般的な意味での「フレームワーク」と、.NET Framework は違う層だから、
そこは気をつけてね。

605:602
09/04/01 21:12:05
言葉から、フレームワークそのものを追加・変更するような想像をしていたんですが
独自に拡張したクラスライブラリを作成するということだったんですね
納得いきました。ありがとうございました。

606:デフォルトの名無しさん
09/04/01 21:55:48
横槍だけど
フレームワークはライブラリより広義の「手法」的な意味だとおもうんだぜ?
機能群はライブラリで,(利用法とか運用法も含めた)方法論的な意味でフレームワークって良く使う

607:デフォルトの名無しさん
09/04/01 22:31:43
>>601
横ですが、Semaphoreはそうやって使うんですね
参考になりました

608:デフォルトの名無しさん
09/04/02 17:10:51
階層が深くて扱いづらいintの変数に別名を付けるにはどうすればいいんですか?
int a = bbbb.ccccc.ddddd;
とすると値のコピーになりますよね
これを参照にしたいんです

609:デフォルトの名無しさん
09/04/02 17:26:33
usingだめ?

610:デフォルトの名無しさん
09/04/02 17:29:35
それクラスの外に書くやつですよね
クラスで管理したいです

611:デフォルトの名無しさん
09/04/02 17:31:13
調べようぜ少しくらい
URLリンク(msdn.microsoft.com)(VS.80).aspx

612:デフォルトの名無しさん
09/04/02 17:33:15
ワラタ

613:デフォルトの名無しさん
09/04/02 17:33:15
そういうものが必要になることじたい何かおかしいのだが、
プロパティにしたらどう?

int A { get { return bbbb.ccccc.ddddd; } set { bbbb.ccccc.ddddd = value; }}

614:デフォルトの名無しさん
09/04/02 17:37:26
unsafeだめ?

615:デフォルトの名無しさん
09/04/02 17:39:03
>>611
そっちか。それだめです期限付きでその中ではコピーされますよね
参照がいいです。

616:デフォルトの名無しさん
09/04/02 17:45:36
・・・・・・(;´∀`)

617:デフォルトの名無しさん
09/04/02 17:47:43
だからunsafeつかって好きにかけや

618:デフォルトの名無しさん
09/04/02 18:55:39
FontDescriptionという構造体を呼び出すときに

fd = new Microsoft.DirectX.Direct3D.FontDescription();

としているんですが
次のエラーが出てしまいます

次のメソッドまたはプロパティ間で呼び出しが不適切です:
'Microsoft.DirectX.Direct3D.FontDescription.FontDescription()' と
'Microsoft.DirectX.Direct3D.FontDescription.FontDescription()'

ビルドしてみるとエラーがあるにもかかわらず問題なく動いているようです
これはどうすればいいんでしょうか

619:デフォルトの名無しさん
09/04/02 19:04:06
質問です。

class HogeCollection : IEnumerable<Hoge>

のように、IEnumerable<T>を実装したコレクションのインスタンスがあるのですが、
そこから動的にHogeの型を取得するにはどうすればよいのでしょう?


620:デフォルトの名無しさん
09/04/02 19:08:24
リフレクション

621:デフォルトの名無しさん
09/04/02 19:12:26
GetType().GetInterfaces().First(i => i.Name == "IEnumerable`1").GetGenericArguments()[0]

かな
もっといい方法もありそうだけど

622:デフォルトの名無しさん
09/04/02 19:17:47
>>613
それも値がコピーされて格納されるじゃん
一瞬でも複製を作りたくないんだけど
ほんとに引数にref指定してその中だけで使えるように渡すしか値型を参照で保持する方法はないの?

623:デフォルトの名無しさん
09/04/02 19:20:37
>>621
Nameを使うと誤判定の可能性があるので、
オープンジェネリック型を使った方がいいな

GetType()
.GetInterfaces()
.First(i => i.GetGenericTypeDefinition() == typeof(IEnumerable<>))
.GetGenericArguments()[0]

624:デフォルトの名無しさん
09/04/02 19:24:10
structのこといってんの?
一瞬でもコピーされるのの何が問題なのかわからんから答えようがないよな

625:デフォルトの名無しさん
09/04/02 19:24:38
>>620-621,623
なるほど!ありがとうございました。

626:デフォルトの名無しさん
09/04/02 19:26:40
unsafeでポインタでFA

627:デフォルトの名無しさん
09/04/02 19:27:44
unsafe対応してないの!

628:デフォルトの名無しさん
09/04/02 19:28:37
すまんunsafeしかないってことか
構造を変えるわ、あきらめたthx


629:デフォルトの名無しさん
09/04/02 19:31:21
>>622
初心者スレに行って質問の仕方から勉強しなおしだな

630:デフォルトの名無しさん
09/04/02 19:40:56
>>622
それくらいの余計なコピーの作成くらい、実行時には最適化で消えると思うよ。

631:デフォルトの名無しさん
09/04/02 19:43:19
もしかして、複数スレッドから読み書きされるからコピーされると困る って話なのか?

632:デフォルトの名無しさん
09/04/02 19:51:16
たぶん異なるスレッドから見てるんでしょ

関係ないけど
参照でコピーしても、そのポインタを保持してるんだからメモリの節約にはならないんだっけ?

633:デフォルトの名無しさん
09/04/02 19:53:22
ただ呼び出しがめんどいってだけじゃね?最初の質問からすると。
最後にまた代入すりゃいいじゃんって思うけどねw

んで質問ですけど、unsafe使って問題になることって何ですか?
unsafe内のコードに問題が無いという前提で。

634:デフォルトの名無しさん
09/04/02 19:56:39
関数の引数でref使う方法もなくはないけど、
aliasをサポートする別の言語を使うしかないな。C++/CLIで何とかならなかったっけ?

C#でもこういう裏技はあるけど正直おすすめしない。
int hoge = 0; 
TypedReference tref = __makeref(hoge); 
__refvalue(tref, int) = 5; 
Console.WriteLine(hoge); 


635:デフォルトの名無しさん
09/04/02 19:57:31
>>633
>unsafe内のコードに問題が無いという前提で。
その前提が"成り立つ事を保障できない"事こそが最大の問題だと思うのだけど

636:デフォルトの名無しさん
09/04/02 20:01:34
インテリセンスではエラー波線でないんですが、
オブジェクト参照がオブジェクト インスタンスに設定されていません。
というエラーが出るのですが、なんでですか?

637:デフォルトの名無しさん
09/04/02 20:02:41
オブジェクトがnullなのにメソッドを呼び出したかなんかしたんだよ

638:デフォルトの名無しさん
09/04/02 20:04:35
宣言時に値は入れてるんですが、起動時の順番が問題で宣言がまだ見つからないってことですか?

639:デフォルトの名無しさん
09/04/02 20:06:40
入れてると思ってるだけで入ってないんだよ
ぬるぽってやつだよ

640:デフォルトの名無しさん
09/04/02 20:07:40
  ∧_∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__∧∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>639

641:デフォルトの名無しさん
09/04/02 20:09:10
pub class a
pub int data = 500;

pub class b
pub int data;
pub b(a aa)
{
data = aa.data;
}

でdata = aa.data;でエラーでるんです

642:デフォルトの名無しさん
09/04/02 20:10:40
aaがnullなんだよ

643:デフォルトの名無しさん
09/04/02 20:11:31
>>635
そりゃそうなんだけど、それ以外にもなんかあるのかなーと思ったけど
それ以外ないわな。unsafeは使用禁止とか普通にあるだろし

今回の参照の件とかはそれほど問題にする意味もないのかなと考えてたけど
まぁunsafeなんだし、使わなけりゃ一番問題ないな

644:デフォルトの名無しさん
09/04/02 20:14:19
>>642
ありえないです。class bをaaを渡してnewした時初めてthis.dataに入れようとしますよね
ここでエラーになるってことはaaは入ってるんです

645:デフォルトの名無しさん
09/04/02 20:17:31
ブレークポイント設定してaa.data;のところにカーソルあててみなよ
aaがnullになってるから

646:デフォルトの名無しさん
09/04/02 20:20:49
nullになってました
自信あったのにショックです
ありがとうです

647:デフォルトの名無しさん
09/04/02 20:28:51
エラーが出てるけど、自信があるのでデバッグしません!

648:デフォルトの名無しさん
09/04/02 20:29:49
>>634
ref 使う方法。変態のきわみだ。

delegate void Alias(ref int i);
static void Main() {
  int bbbb_ccccc_ddddd = 0;
  ((Alias) delegate(ref int i) {
    i = 98765;
  })(ref bbbb_ccccc_ddddd);
  Console.WriteLine(bbbb_ccccc_ddddd);
}


649:デフォルトの名無しさん
09/04/02 20:30:21
事前にエラーがわかる静的言語は便利なことがよくわかるよな
特に初心者の人にとっては

650:デフォルトの名無しさん
09/04/02 21:09:57
構造体の初期化はどうかけばいいのでしょうか
Vector3 a = {0.0f, 0.0f, 0.0f};


651:デフォルトの名無しさん
09/04/02 21:12:41
コンストラクタが使えるだろ

652:デフォルトの名無しさん
09/04/02 21:12:52
Vector3 a = new Vector3(0.0f, 0.0f, 0.0f);

653:デフォルトの名無しさん
09/04/02 21:13:05
構造体内にコンストラクタを書いてそこで初期化

654:デフォルトの名無しさん
09/04/02 21:18:52
thx!

655:デフォルトの名無しさん
09/04/02 21:20:18
>>633
部分信頼とかセキュリティ上の理由でunsafeコードを実行させてくれない仕組みに引っ掛かるとか。

656:デフォルトの名無しさん
09/04/02 21:24:22
struct Data {
 int a, b, c, d, e......;
}

class Cupsel {
  Data data;
}


657:デフォルトの名無しさん
09/04/02 21:49:48
>>655
はーなるほど。そういう仕組みがあったのねぇ
セキュリティポリシーによるようだね。通常はローカルだと問題ないのかな
今までなんも考えなかったわ。ありがとう

658:デフォルトの名無しさん
09/04/02 23:01:07
System.Drawing.Graphics g = Graphics.FromImage(backBuffer);
g.Clear(Color.Black);
g.DrawImage((Image)image, new Point());
Graphics.FromHwnd(panel1.Handle).DrawImage((Image)backBuffer, new Point());

WinFormsで、高速に、ちらつかせずに画像表示をさせたいんですが
どうやるのがいいんでしょうか?
描画するまで画面を更新されないようにするやり方がわかりません・・

それと、加算合成とかをするにはDrawImageでは無理そうですがどうすれば。

659:デフォルトの名無しさん
09/04/03 00:02:18
ちらつき防止はコントロールのDoubleBufferedでいけるんじゃないの?
あと、Graphics.FromHwnd(panel1.Handle)よりもpanel1.CreateGraphics()のほうが普通だと思う。

660:デフォルトの名無しさん
09/04/03 00:02:33
>>634
話は戻るが、そこでusingだ。

661:デフォルトの名無しさん
09/04/03 00:05:46
>>618分かる人いませんか?

662:デフォルトの名無しさん
09/04/03 00:26:07
何だろう。よく分からんけど、バージョン違いのアセンブリを参照してるとか?
参照設定はどうなってる?

663:デフォルトの名無しさん
09/04/03 01:02:12
>>660
usingディレクティブの別名は名前空間と型名だけだったと思うが、
質問者は変数の別名が欲しいといってるんじゃないのかな?

664:デフォルトの名無しさん
09/04/03 01:23:36
>>662
DirectX関係で参照してるのは

DirectX
Direct3D
Direct3DX
DirectInput
DirectSound

です
Direct3DXのバージョンは1.0.2911.0で他のものより新しいのを使ってたんですけど
バージョンをそろえてみても同じエラーが出ます


665:デフォルトの名無しさん
09/04/03 02:44:15
>>664
CS0121?
URLリンク(msdn.microsoft.com)
どうやらオーバーロードなどをしていて,複数の選択肢が暗黙的な型変換で,動作が決定不能になる時に発せられるらしい.
状況によって変わってくるから,他の部分で名前と名前,型と型がバッティングしていないか確かめてみたら?

あと,なんだか Microsoft.DirectX.Direct3D.FontDescription で検索すると,成功している人が少ない雰囲気.

666:デフォルトの名無しさん
09/04/03 07:06:03
アクセス制限機能つきのアプリを作りたいです。

ユーザ権限やパスワード管理機能つけたいんだけど、
一から作るしかないですか?

.NET Framework 2.0 ならいいライブラリがありそうだけど見つけきれません。。。



667:デフォルトの名無しさん
09/04/03 07:51:41
使ったことないけど、System.Security名前空間から適切な制限を見つけてDemaidメソッド呼び出せばいいんじゃね?

668:デフォルトの名無しさん
09/04/03 10:34:17
System.Windows.Form.WebBrowserをIE8に変更できませんか?
OSのIEは8に更新しました

Vista + VS2008 です

669:デフォルトの名無しさん
09/04/03 10:41:42
>>668
更新した時点でもうなっとるがな。

670:デフォルトの名無しさん
09/04/03 15:13:53
windowsアプリで自動アップデート機能をつけようと思うのですが
Program Files以下のファイルを更新するときは
管理者権限が必要ですよね。
Vistaの場合管理者でログインしても
普通にアプリを実行するとWindowsPrincipalはUserになっちゃいますよね。
右クリックで管理者として実行を行わないと
管理者権限で実行されませんよね。
そのため自動アップデートによるアップデートができないと思うのですが、
世に出回っているVista対応アプリはどうやって対処しているのでしょうか?

671:デフォルトの名無しさん
09/04/03 15:18:24
>>670
UAC の昇格をしてるでしょ。

672:668
09/04/03 15:21:40
>>669さん
確認くんで調べたらIE7のままなんです

673:デフォルトの名無しさん
09/04/03 15:25:11
>>672
その結果を貼り付けてみ。互換モードになってるとかの落ちじゃないよね?

674:デフォルトの名無しさん
09/04/03 15:41:32
IE8 WebBrowser Control で検索したらすぐに答えが出てきたぞ
URLリンク(blogs.msdn.com)

675:670
09/04/03 16:08:08
>>671
ユーザが意図的に管理者として実行をして、
昇格をしてもらわないとアップデートできないので、
世に出回ってるアプリはどう対応してるのかということを質問しています。
普通に実行したときはバージョンアップの通知だけで、
通知があったら「管理者として実行」してもらうと言うことになるんでしょうか。
でもそれだとUACを知らない、年配などのライト層は
ずっとバージョンアップできないってことになりますよね。
しかもそれって、自動アップデートではないですよね。

676:デフォルトの名無しさん
09/04/03 16:11:59
>>675
よくわからんけど、セキュリティソフトなんかは予めUAC昇格させる設定を
ユーザーにさせてるんでないの?
都度か一括かの違いで

677:デフォルトの名無しさん
09/04/03 16:17:35
>>675
つか、何言ってんの?

「管理者として実行」しなくても、UAC の昇格を行うことはできるよ。
一般的な方法としては、マニフェストを書いておいて、そのアプリを呼び出す。
新しいバージョンがあるかを確認するアプリと、実際に更新をするアプリに分ける、
って感じだね。

Firefox も、ATOK も HP のプリンタドライバも、そんな感じでやってると
思うけど・・・。

678:デフォルトの名無しさん
09/04/03 16:24:46
Google ChromeがAppData内にインストールされるのは
UACの昇格なしでアップデート可能にする為だって話を聞いたことがある

679:デフォルトの名無しさん
09/04/03 16:25:02
>>677
何言ってんのか分からないのに答えられるってすごいなぁ。
しかも最後、自信なさげなところがなんとも。

680:デフォルトの名無しさん
09/04/03 16:25:20
>>678
そもそも ClickOnce だし。

681:デフォルトの名無しさん
09/04/03 16:27:37
XPユーザーとしてはUACの昇格とかわけわかんないし怖いよ
今はそんなのも気にしなきゃならんのか

682:デフォルトの名無しさん
09/04/03 16:29:51
VistaユーザーだってUACなんか訳わからんよw
Linuxみたいにアクセス権限だけでいいだろって突っ込まれまくりだろ

683:デフォルトの名無しさん
09/04/03 16:32:42
>>679
「UAC 昇格起動」と「修辞的疑問文」でくぐってからまた来てね。


684:デフォルトの名無しさん
09/04/03 16:33:35
全世界の奴がMSに文句つけまくっていじめまくった結果がこれだよ
そして無意味なセキュリティをつけたらフルボッコだよ

685:デフォルトの名無しさん
09/04/03 16:34:51
>>684
× 全世界の奴
○ 狂ったLinuxユーザー

686:デフォルトの名無しさん
09/04/03 16:35:58
なんでLinuxユーザーが文句つけるんだ

687:デフォルトの名無しさん
09/04/03 16:38:37
>>680
ClickOnceって.NETアプリ以外でも使えたのか

ClickOnceと同じ場所を使ってるだけかと思ってたよ

688:デフォルトの名無しさん
09/04/03 16:40:53
>>687
正確には、インストーラとして使ってる、ってとこかと。
そのおかげで、統合認証以外のプロクシを使ってると、インストールすらできないw

689:デフォルトの名無しさん
09/04/03 23:29:47
>>675
Verb を runas にしたら昇格するよ。
アップデータの PE わけて起動させたほうがいいかもしれないけど。
なんとなーく勘違いしてそうなので UAC についてプログラマの視点から
指摘しとくと、昇格ダイアログ出すまではプログラムで可能。
OK ボタン押したら昇格ダイアログ→OK → アップデートってやるんだよ。

あとアップデートに関して言えば、パッチパッケージにすれば明示的な
昇格はいらない(ポリシーにより不可になるし署名が要るけど)。
Program Files 以下でも。実は古くからある機能だが。
実際には、パッチは管理や検証がめんどくさくなるのであまり使われな
いけどな。

>>681
Vista ユーザーからしたら XP の何もなく管理者で動くの不安になる正直
かといって Users で使おうとしたら不便極まりないし。両立できてかなり
いい機能だと思うがなぁ >UAC。リダイレクトとかの機能含めてな。

690:デフォルトの名無しさん
09/04/04 00:26:26
>>665
はい、CS0121です

引数なしのコンストラクタを呼び出しているのに
二つ選択肢があるっていうのがちょっと理解できません・・・
ヘルプのコンパイラ エラー CS0121の使用例は理解できるんですが・・・

エラーは吐いているんですがビルドできるし正常に動作しています
それも理解できないし気持ち悪いです

691:デフォルトの名無しさん
09/04/04 02:14:56
int a=0,b=0,c=0;
int line_count = arrText.Count;
ar_OKPOS = new List<int[]>[line_count];
for (int i = 0; i < ar_OKPOS.Length; i++){
ar_OKPOS[i] = new List<int[]>(new int[][] { new int[2] });
}
foreach (string sOutput in arrText)
{
// 一行ずつ読み込んで,各行をsplitメソッドで分ける
string temp = (string)arrText[a]; // string型にキャスト
string[] temp2 = temp.Split(',');// splitメソッドで文字列アレイにして数える
int col_count = temp2.Length; // 列数を数えているだけ

string[] temp_line = sOutput.Split(',');
for(int i=0;i<temp_line.Length;i++)
{
for(int k=0;k<2;k++){
i = i + k;
ar_OKPOS[a][b][c]=Convert.ToInt32(temp_line[i]);
c++;
}
c = 0;
b++;
}
b = 0;
a++;
}

692:デフォルトの名無しさん
09/04/04 02:24:35
すいません 誤爆してしました

693:デフォルトの名無しさん
09/04/04 08:52:22
デザインパターンとか全然勉強せずにプログラマやってるけど、勉強したほうがいいのかな?

694:デフォルトの名無しさん
09/04/04 08:54:14
デザインパターンはなんかJava臭いよな
C#はオブジェクト指向至上主義じゃないから合わないんじゃない

695:デフォルトの名無しさん
09/04/04 09:52:38
標準のクラスライブラリでも結構それっぽいのはよくでてくるよ
ただjavaと違って、MSはほとんどデザインパターン用語を使わない

696:デフォルトの名無しさん
09/04/04 13:38:17
privateなメンバ変数もprivateなプロパティとして表示させたほうがいいですか?

またメソッドでメンバ変数を利用するときなるべく引数として渡した方がいいですか?
それともメソッド内でいきなり使用しても問題無いですか?

たとえばクラスに以下のようなメソッド等があったとして
private int _num;
public void Method()
 int num = CalcMethod(2);
private int CalcMethod(int num1)
 return num1+_num:
こういう書き方が良いのか
private int _num:
public void Method()
 int num = CalcMethod(2, _num);
private int CalcMethod(int num1. int num2)
 return num1+num2;
こんな書き方のほうがいいのか知りたいです。
例では単なる足し算ですが、複雑な計算をしているという仮定です。

697:デフォルトの名無しさん
09/04/04 13:41:03
演算要素を全て引数で取らせるならstaticにする

698:デフォルトの名無しさん
09/04/04 14:20:05
メソッドを呼び出す側からすれば,メソッド呼び出しはオブジェクトを操作することなので
内部状態を存分に使ってもらって構わない気がする.

699:デフォルトの名無しさん
09/04/04 15:33:03
ありがとう
なるべく引数で渡したほうが、その中で完結するのでわかりやすい気がして
じゃあ、あんまり気にしなくていいってことかな?


700:デフォルトの名無しさん
09/04/04 15:58:22
計算処理のように内部状態に関係なしに定義できるものは、
内部状態非依存(static)の方が単体テストしやすい

まあ、その例くらいの規模なら大して変わらないんだが

701:デフォルトの名無しさん
09/04/04 16:06:09
>>696
むしろそのメソッドを定義したクラスはどんな責任と制約をもってんのよ?
メソッド単体じゃあなんともいえない

>699
時と場合による
プログラミングしやすい分かりやすさもあれば、
利用しやすいわかりやすさもある

702:デフォルトの名無しさん
09/04/04 17:48:14
VC#単体(他から持ってきたライブラリを使わず)で開発したソフトやゲームを
販売する場合、ライセンス等の問題ってありますか?


703:デフォルトの名無しさん
09/04/04 17:59:31
場合による。

704:デフォルトの名無しさん
09/04/04 21:17:48
ミサイル防衛システム作りたいんですがヒントだけでもください

705:デフォルトの名無しさん
09/04/04 21:25:07
MDIで作成した子フォームに含まれるコントロールを取得後、アクセスしたいんですが
foreachでいちいちループ回さないといけない・・・
なんか他にいい方法ないでしょうか?
子フォームはアクティブな状態のものです

if (!(this.ActiveMdiChild as Form == null))

{
foreach (Control Ctrl in (this.ActiveMdiChild as Form).Controls)
{
 if (Ctrl is TextBox /*例としてテキストボックス*/ )
 {
  //処理
 }
}
}


706:デフォルトの名無しさん
09/04/04 21:41:58
全コントロールを対象に処理が必要なら foreach で回さざるを得ないだろ。
特定のコントロールのみを対象にするなら Panel か UserControl に貼り付けて
必要なコントロールへのアクセスを容易にすればいいよ。

707:705
09/04/04 21:54:17
ん~じゃあ無理か
Panelのリストを管理するとまた手間がかかりますしねえ・・・
どうもありがとうございました

708:デフォルトの名無しさん
09/04/04 22:05:22
動的に作成する場合でもIList<>に入れればいいし、
あらかじめポトペタならコントロールが限られてるから
どちらにしても最低限のループでいけるんじゃないの?

709:デフォルトの名無しさん
09/04/04 22:16:50
Linqでコントロールの種類ごとに連想配列に分配するクエリを作れば?

710:デフォルトの名無しさん
09/04/04 22:29:30
>>702
ないよ

711:デフォルトの名無しさん
09/04/05 00:12:49
Form activeChild = this.ActiveMdiChild as Form;
if (activeChild != null)
{
  activeChild.Controls.Where(c => c is TextBox).ToList<TextBox>().ForEach(t =>
  {
    // 処理
  });
}

かえって煩わしいな。

712:デフォルトの名無しさん
09/04/05 00:29:55
>>711
ん?
実験してみようとしたのだが、インテリセンスにWhere()が表示されないのだがなんでだ?

713:デフォルトの名無しさん
09/04/05 00:42:19
ControlCollectionがIEnumerable<Control>を実装してないからか?

714:デフォルトの名無しさん
09/04/05 00:43:46
だな
気がつかなかった!すげー便利じゃん!と思ったのにorz

715:n
09/04/05 00:52:48
今までたくさんのサイトから通報者つのりあと少し
です
こいつは違反出品で昨日二度削除されました
URLリンク(auok.auone.jp)
空き巣に入られた?以上では‥
薔薇チョコ洋子さんは靴の転売や上履き二回削除されてるのに
今回は長期使用の文を消して書いてます
悪質なので評価欄の誹謗中傷の理由で通報お願いします

URLリンク(auok.auone.jp)
わいせつ物

URLリンク(auok.auone.jp)
わいせつ物
三箇所違反ですのでよろしくお願いします


716:デフォルトの名無しさん
09/04/05 02:53:12
this.ActiveMdiChild.Controls.Cast<Control>().Where()とか?

717:デフォルトの名無しさん
09/04/05 03:03:10
クラス内の自動プロパティを初期化したいのですがコンストラクタ内でするしかないのでしょうか?
例えば
public string Name{get;set;}
というものがあって、Nameは始めはnullですが、""に初期化しておきたいのです。
フィールドでしたら
private string Name = "";
と出来ます。
プロパティの量だけコンストラクタにも初期化する量が増えてしまうのでフィールドのように出来れば一度に初期化したいのですが方法はあるのでしょうか?

718:デフォルトの名無しさん
09/04/05 03:03:27
>708 がベストだろ

719:デフォルトの名無しさん
09/04/05 03:10:31
クラスを継承したときに基本クラスのメソッドにコードを追加するように書くにはわかりました。

720:デフォルトの名無しさん
09/04/05 09:26:10
>>717
ありません
自動プロパティの使用をやめるか普通にコンストラクタで初期化してください

721:デフォルトの名無しさん
09/04/05 09:52:29
>>717
リフレクションでstring型のプロパティを一括初期化できなくもないがバグの元だな

722:デフォルトの名無しさん
09/04/05 09:58:22
そのためのオブジェクト初期化子なんだろうか

723:デフォルトの名無しさん
09/04/05 09:59:50
ヘジさんが自動プロパティに必死で抵抗してたのは直接初期化できないからなのかな

724:デフォルトの名無しさん
09/04/05 10:12:36
自動プロパティって、文法的にインターフェースでの宣言と一緒なのがちょっと気になるっちゃ気になる。

int Method();

とだけ書いたらメソッドの中身ができちゃうようなもんだからなぁ。
パッと見同じだけど全然意味の違うものってのは、
ミスの原因だし、読むときの混乱招くから。

725:デフォルトの名無しさん
09/04/05 10:12:47
コンストラクタで初期化するくらいなら、
タイピング量的に自動プロパティである必要がぜんぜんないな

726:デフォルトの名無しさん
09/04/05 10:14:42
もう、自動プロパティを自動で普通のプロパティに展開するユーティリティを使えばいいよ

727:デフォルトの名無しさん
09/04/05 10:22:42
private string _test;
public string Test { get _test; set _test; }

こういう糖衣構文を可能にするだけでよかったんだよ

728:デフォルトの名無しさん
09/04/05 10:26:55
糖衣構文といいたいだけのやつ増えすぎ

729:デフォルトの名無しさん
09/04/05 10:29:42
構文糖を可能にするだけでよかったんだよ

730:デフォルトの名無しさん
09/04/05 10:30:46
public property string Test = "";

でいいんじゃないの

public readonly property string Test = "";

とか

731:デフォルトの名無しさん
09/04/05 10:36:05
public string Test { get GetTest(); set SetTest(value); }
も可能そうだな


732:デフォルトの名無しさん
09/04/05 10:41:00
>>731
それは意味がわからない。普通にかけばいいだろ
public string Test { get { return GetTest(); } set { SetTest(value); } }

733:デフォルトの名無しさん
09/04/05 10:41:50
インターフェイスにプロパティを宣言するときの書き方と合わせたかったんだろ
美学ってやつなんだろう

734:デフォルトの名無しさん
09/04/05 10:48:09
たとえ美学でも、読み取り専用にするprivate set;はせっかくの省力構文を台無しにしているな
public string Test { get; }
これで何がまずいのだろう

735:デフォルトの名無しさん
09/04/05 10:48:47
event の構文が

event DelegateType Variable;
event DelegateType Variable { add { ...] remove { ...} }

なのを考えると、

property VarType Variable;
property VarType Variable { set { ... } get { ...} }

がよかった気もするなぁ。


736:デフォルトの名無しさん
09/04/05 10:50:10
>>732
楽になるじゃん
それに変数とメソッドを同時に書くこともある
public string Test { get GetTest(); set _test; }


737:デフォルトの名無しさん
09/04/05 10:52:33
property Name: string read FName write FName;
もうこれでいいよ

738:デフォルトの名無しさん
09/04/05 10:54:11
>>735
それいいよね
読み取り専用プロパティは
readonly property VarType Variable;
にすればいいし

739:デフォルトの名無しさん
09/04/05 11:03:07
>>734
初期化も何もできないじゃん

740:デフォルトの名無しさん
09/04/05 11:26:12
>>739
private set;と書いたことにする

741:デフォルトの名無しさん
09/04/05 11:44:34
それなら>>735スタイルにしてgetも書かないようにしないとおかしい
アクセサを宣言する意味でgetやsetを書いてるのに

742:デフォルトの名無しさん
09/04/05 13:04:59
>>740
( ゚д゚ )

743:デフォルトの名無しさん
09/04/05 15:08:15
アクセス修飾子をpublicとprivateだけと思ってる奴が多いようだな

744:デフォルトの名無しさん
09/04/05 16:25:18
そんな奴いないだろw
もともとはプロパティのアクセサにアクセスレベルは指定できなかったんだよ
public get; protected set;みたいなのはそもそも想定されてなかった
だから別に>>735の形になっててもおかしくはない

745:デフォルトの名無しさん
09/04/05 18:13:05
addとremoveが必須なeventとgetとsetは片方あればいいプロパティじゃ初めから条件が違うな

746:デフォルトの名無しさん
09/04/05 18:55:27
話の流れを全部理解しているわけじゃないが、
そういうシンメトリックかどうかって話じゃないだろうw

素直に(VB方式ともいう)propertyってキーワードを導入しておいた方が
可読性の観点からは好ましかったんじゃないかって話なんじゃないの?

747:デフォルトの名無しさん
09/04/05 22:23:51
でもevent 型 名前;と型 名前 { get; set; }じゃ差がありすぎるからなあ
イベントを理解する上でプロパティとの類似性はかなり重要なのに
構文上全然違う種類のものになっちゃってるのはさすがに

748:デフォルトの名無しさん
09/04/05 22:43:42
そういや、結構いろんな言語に精通してる同僚が最近 C# 触り始めたんだけど、
event 知らずに普通にデリゲート型のプロパティ使ってたなぁ。


749:デフォルトの名無しさん
09/04/05 22:51:16
イベントって機能がデリゲートで実現されていることを知らずにイベントを
使ってるって話ならありそうだが、デリゲート押さえてるのにイベント知らない、
なんてこと普通はありえん気がするけどね。

750:デフォルトの名無しさん
09/04/05 22:55:20
eventって別に必要ない機能だろ

751:デフォルトの名無しさん
09/04/05 22:58:49
javaなんかでよく出てくるgetHoge, setHogeパターンを言語に組み込んだのがプロパティ
同様にaddHogeListener, removeHogeListenerパターンを言語に組み込んだのがイベント

752:デフォルトの名無しさん
09/04/05 23:29:37
言語に組み込む組み込まないの話ではないだろ

753:デフォルトの名無しさん
09/04/05 23:49:33
>>749
「デリゲートはイベント処理用のもの」って認識だとそうなんだけど、
「関数ポインタの便利版」って認識だと、
関数ポインタのプロパティでイベントハンドラ取ればいいやってなってもおかしくないかと。


754:デフォルトの名無しさん
09/04/05 23:56:59
もしプロパティを使うならデリゲートのコレクションを返すべきだろ
button.ClickEventHandlers.Add(new EventHandler(button_Click));
これなら意味的には同じ

755:754
09/04/05 23:59:32
外からの要素へのアクセスはできないようにしないといけないよもちろん
マルチキャストでいいだろと突っ込まれそうだから一応

756:デフォルトの名無しさん
09/04/06 00:00:30
Formsのコントロールの初期化をデザイナーで作っているところなんだが、
ツールバーのボタンが横に並んだ1つづりのPNGファイルを
ImageListを使って切り出して使おうとしているのだがうまくいかない。

System.Windows.Forms.ImageList il = new System.Windows.Forms.ImageList();
il.TransparentColor = System.Drawing.Color.Transparent;
il.ImageSize = new System.Drawing.Size(24, 24);
il.Images.AddStrip(Resources.tool);

こんな風に書いてデザイナーに読ませると、AddStrip()が認識できずに落ちてしまうようだ。
仕方がないのでpartialされたForm本体側で追加で初期化してるんだが、当然ながらデザイナーではプレビューできない。
画像の切り出し、切り出したチップをそれぞれのコントロールで使用したいんだがどうしたらいいだろうか。

757:デフォルトの名無しさん
09/04/06 00:10:38
>>748
eventをつけた場合とつけない場合は何が違うのですか?
public event EventHandler Unko;
public EventHandler Unko

758:デフォルトの名無しさん
09/04/06 00:13:42
>>757
ググれかす
見た目としては、eventだと外から行える操作がデリゲートの追加と削除だけになる。

759:デフォルトの名無しさん
09/04/06 00:17:51
>>757
Unkoの硬さが違ってくる

760:デフォルトの名無しさん
09/04/06 00:23:11
>>758-759
ありがとう。
何となく分かったよ
Unkoの硬さが+=と-=だけになるってことですね

761:デフォルトの名無しさん
09/04/06 00:28:52
>>756
デザイナで設定するのは無理なんじゃないの
とりあえずImageListプロパティだけ設定して,Tagプロパティにインデックスを入れといて
後でコードから舐めてImageIndexプロパティに設定し直すとか

762:デフォルトの名無しさん
09/04/06 01:04:40
>>761
ありがとう。「無理」という返事を聞いてある意味安心した。

どうせデザイナーで作る部分はある程度静的な割付になるので、わざわざTagに入れてループをまわさなくても、
ImageList.Images プロパティをControl.Image に直接代入していくだけで十分だね。

763:デフォルトの名無しさん
09/04/06 01:22:48
>>762
ImageList継承して"ImageStrip"のようなプロパティを追加するとか、
あるいは最初から目的のイメージを持たせちゃうとかすれば出来る気もする。

っていうか、なんでわざわざそんなC#向きでない作り方をするんだろう。
なんでも道具にあった作り方ってあると思うんだけど。

764:デフォルトの名無しさん
09/04/06 01:24:20
あーImageListってシールされてるのか。。

765:デフォルトの名無しさん
09/04/06 01:59:32
String型がシールされてる上にIStringのようなインターフェイスもないってどういうこと?
String型に限らずやたらシールされると拡張できなくて異常に不便

766:デフォルトの名無しさん
09/04/06 02:02:16
C#の入門誌のオススメ教えて

767:デフォルトの名無しさん
09/04/06 02:04:16
C#に入門書は必要ない
ぐぐれば腐るほどでてくるからな・・・
強いて言えば逆引き系のものがいいよ

768:デフォルトの名無しさん
09/04/06 02:04:39
継承は最低の方法だってみんな分かって来てるじゃない
それはともかくStringはIEnumerable<char>として扱うと便利だよ

769:デフォルトの名無しさん
09/04/06 03:31:43
>>763
コントロールで使う画像の処理をImageListに任せるのは、
Win32SDK時代から続く古式ゆかしいお作法なんだ。

770:デフォルトの名無しさん
09/04/06 08:32:28
> それはともかくStringはIEnumerable<char>として扱うと便利だよ
これは気づかなかった。ありがとう

771:デフォルトの名無しさん
09/04/06 09:03:50
デザイナーいるとかうらやましいなおい・・・・

772:デフォルトの名無しさん
09/04/06 09:26:25
>>765
恥ずかしいレスだなおいw

773:デフォルトの名無しさん
09/04/06 09:31:03
>>771
それはボケなのか……?

774:デフォルトの名無しさん
09/04/06 10:42:32
Stringがsealedなのはimmutableにするため
変更できない方が扱いやすいから

775:デフォルトの名無しさん
09/04/06 17:54:34
扱いやすいっていうか、継承を禁止しないとイミュータブルであることを保証できない。

776:デフォルトの名無しさん
09/04/06 18:04:25
なんとなくだが、>>774
"stringはimmutableであった方が扱いやすい"
と言いたかったのではないかと思う。

777:デフォルトの名無しさん
09/04/06 21:19:49
>>766
洋書なら色々あるけど、邦訳版が出てないのが多い・・・。

778:デフォルトの名無しさん
09/04/07 02:18:55
C#って検索数がいまいちなんだよね。
なんで?

779:デフォルトの名無しさん
09/04/07 02:34:22
>>778
記号とか入いってるとかは検索エンジン的にマイナスな気がする。
あと、なんだかんだいって後発だしね。
それと、一般名詞そのまま使ってるrubyとかと比べりゃそりゃ少なくなる。

780:デフォルトの名無しさん
09/04/07 03:42:38
思いつくままに検索してみた。言うほど少なくは無いようだが

php の検索結果 約 9,700,000,000 件
javascript の検索結果 約 680,000,000 件
vb の検索結果 約 657,000,000 件
java の検索結果 約 377,000,000 件
scheme の検索結果 約 107,000,000 件
ruby の検索結果 約 102,000,000 件
c++ の検索結果 約 101,000,000 件
perl の検索結果 約 88,000,000 件
c# の検索結果 約 63,900,000 件
python の検索結果 約 62,300,000 件
delphi の検索結果 約 49,500,000 件
lisp の検索結果 約 8,290,000 件
fortran の検索結果 約 7,720,000 件
cobol の検索結果 約 6,530,000 件
c++/cli の検索結果 約 4,680,000 件

781:デフォルトの名無しさん
09/04/07 03:54:22
>>780
ごめんそれ違う。

漏れが言ったのは、グーグルトレンドの方。

782:デフォルトの名無しさん
09/04/07 04:47:38
>>780
発想は面白いよ発想は

783:sage
09/04/07 13:13:32
vb.net の private shared は C# でいうとなんですか?
private partial ? private protected?

784:デフォルトの名無しさん
09/04/07 13:17:51
private static

785:デフォルトの名無しさん
09/04/07 13:19:16
thx!

786:デフォルトの名無しさん
09/04/07 14:11:03
VB.netの存在意義がわからない
初心者向けならジェネリックやLinqの拡張をすべきではないと思うんだが・・・

787:デフォルトの名無しさん
09/04/07 14:12:59
VB.NETはVBプログラマ用の隔離病棟もしくはオブジェクト指向リハビリ施設

788:デフォルトの名無しさん
09/04/07 14:13:04
>>786
それは、貴方の考えた存在意義と違うってだけでしょう。

789:デフォルトの名無しさん
09/04/07 18:15:55
C#>VBってのはC#でオブジェクト指向を勉強した奴がやけに言いたがるようだけど
他から見たらチェイサーとクレスタ


790:デフォルトの名無しさん
09/04/07 18:24:42
そりゃ.NETがベースにあるからだろ

791:デフォルトの名無しさん
09/04/07 18:28:30
.NETのWebBrowserコンポーネントで
RichTextBoxのSelectionColorプロパティみたいに、文字列をドラッグしたときの選択色を変える方法ありませんか?

792:デフォルトの名無しさん
09/04/08 05:02:52
Microsoft Visual C++ Express Edition
このコンパイラで一度「デバッグ無しで開始」でコンパイル成功するとソースを書き換えてもプログラムが変わらないようです
今までは少しソースを書き換えようと思ったら新規作成で新しいソース作ってコピペを繰り返してたんですがいい加減ソースの管理がキツいです
誰か助けてください

793:デフォルトの名無しさん
09/04/08 05:09:03
バイト代は出ますか?

794:デフォルトの名無しさん
09/04/08 05:14:13
>>792
全ては君の勘違い

795:デフォルトの名無しさん
09/04/08 06:02:20
>>792
『Microsoft Visual C# Express Edition』で開発していると仮定しての話だが、(スレタイ読めよ!)
確かにVC++と違って C#の開発のときはアプリの実行ボタンでビルドが更新されないことがあるようだ。
しかし、コンパイルないしビルドボタンを押せば問題ないはず。
デバッグ無しで開始 や デバッグ実行 のボタンとは別にあるぞ。

796:デフォルトの名無しさん
09/04/08 09:47:57
>>792
リビルドしてみた?

797:デフォルトの名無しさん
09/04/08 09:53:21
むしろ自動ビルドしてるならクリーンアップ?で
さもなくばexploreでファイル削除

798:デフォルトの名無しさん
09/04/08 15:22:07
.net のプログラムを C#に書き換えています。
.net におけるshadow(オーバーライドの一種で引数も返り値も変更可能なもの)
はC#だとどういう風にトランスレートすればいいんですかね?

799:デフォルトの名無しさん
09/04/08 15:26:15
.net のプログラムってなに?VB?

800:デフォルトの名無しさん
09/04/08 15:27:01
もちろんC#

801:デフォルトの名無しさん
09/04/08 15:27:15
隠蔽のnew

802:デフォルトの名無しさん
09/04/08 15:30:02
vb.netっす

803:デフォルトの名無しさん
09/04/08 15:32:06
VBではoverridesとshadowが別なのが良くわかんないね。
overridesがほぼC#のnewと同じ。
shadowとまったく同じものはなかったかと。

804:デフォルトの名無しさん
09/04/08 15:35:20
それでは Public Shadow Property X は
public new override X
{get return ...みたいな感じで書けばいいってことですか?

805:デフォルトの名無しさん
09/04/08 15:36:43
ああちがうか、そもそもoverrideとoverridesのちがいがわかってませんでした。
勉強してきます。

806:デフォルトの名無しさん
09/04/08 15:43:35
WebBrowserのDocumentで、mshtmlを経由してiframeの中身にアクセスしようとするとUnauthorizedAccessExceptionになるのですが、
これを回避するにはどうすればいいのでしょうか。

807:デフォルトの名無しさん
09/04/08 18:51:30
public class Bar
inherits Foo
  overrides sub f()
  end sub
  shadows sub g()
  end sub
  overloads sub h()
  end sub
end class
をリフレクションで調べるとこういう違いがあるようだべさ。

public class Bar : Ansi,Auto
    extends public class Foo : Ansi,Auto
        public virtual Void f()
        public Void g()
        public Void h(),HideBySig
        public constructor Void .ctor(),SpecialName

C#の場合全部のメソッドにHideBySigが付いてるんだよね。


808:デフォルトの名無しさん
09/04/08 19:28:38
すみません。馬鹿な質問いいですか?

フォームにラベルがいくつかありまして、それぞれ
lbl001
lbl002
lbl003
という名前になっています。

で引数に001とか002を渡すと通し番号の一致するラベルのテキストを""に変えるメソッドを
作りたいのですが、どうしたら良いのでしょうか?

解りにくい文章ですみませんが、お願いします。



809:808
09/04/08 19:30:47
private void hoge(string number)
{
lbl+number.text="";
}
という感じなのですが・・・

810:デフォルトの名無しさん
09/04/08 19:36:25
public void ClearLabel(string labelName)
 Control control = this.Controls.Find(labelName, false)[0].Text = "";

thisはForm


811:デフォルトの名無しさん
09/04/08 19:39:39
ああ、最初の変数宣言はイラネ

public void ClearLabel(string labelName)
 Control control = this.Controls.Find(labelName, false)[0];
 control.Text = "";

または

public void ClearLabel(string labelName)
 this.Controls.Find(labelName, false)[0].Text = "";


812:デフォルトの名無しさん
09/04/08 19:42:38
public void Func(int number)
{
string name = "lbl" + number.ToString("000");
foreach (FieldInfo info in this.GetFields())
{
if (name == info.Name)
{
Label label = (Label)info.GetValue(this);
label.Text = "";
}
}
}

813:デフォルトの名無しさん
09/04/08 19:43:55
ラベルを配列に入れりゃいいんじゃないの

814:デフォルトの名無しさん
09/04/08 19:46:45
>>808
そういうことをするならラベルをコレクションで管理しとけ
リフレクションを使うのはあくまで応急処置

最初からコレクションで生成してもいいし、どうしてもデザイナを使いたいなら以下のようにする
var labels = new List<Label>();
labels.Add(lbl001);
labels.Add(lbl002);
labels.Add(lbl003);

815:808
09/04/08 19:58:30
みなさまありがとうございました!
>>811
public void ClearLabel(string labelName)
 this.Controls.Find(labelName, false)[0].Text = "";

この場合labelNameは"002"とかでもlbl002を見つけてくれるのでしょうか?

>>812
なるほど。僕でも判る解りやすいコードですね

>>814
おっしゃる通りです。以降気をつけます

816:デフォルトの名無しさん
09/04/08 20:21:07
>>815
見つけてくれないからlabelNameを自分で作成すれ

817:808
09/04/08 21:27:47
>>816
ありがとうございました!

僕はデザイナでしかコントロールを置いたことがないので
名前の重複がありうるなんて知りませんでした。

なので名前のわかっているコントロールを探すなんてナンセンスな感じを
うけましたが、自分が無知だっただけでした!

818:デフォルトの名無しさん
09/04/08 21:49:25
何も解かってないことが解かった

819:デフォルトの名無しさん
09/04/08 21:54:33
>>817が何を言ってるのかまるでわからない・・・

820:デフォルトの名無しさん
09/04/08 21:56:19
なんとなく理解できる俺もほ乳類を名乗って問題無いのか・・・

821:デフォルトの名無しさん
09/04/08 23:41:34
>819
多分Nameプロパティとフィールド参照名をごっちゃにしてるんだろ。
>817
参照名はスコープ内で重複しないけど、コントロールごとに設定できるNameプロパティの値は重複可能。
デザイナーは勝手に「Name = 参照名」に設定してるから一意に見えるだけ。自前でNameを設定してなければ、
int num = 2;
Label label = this.Controls[ "lbl" + num.ToString("000")] as Label;
if( label != null ) { 処理 } else { エラー処理とか }
自前のコードでNameを設定してて同じNameの奴が重複してたら、最初に追加されたやつ(普通はデザイナーが作った方)が返ってくる。
どうしてもフィールド名のほうでアクセスする必要がある場合は、>812みたいにリフレクションを使う。
でもクラス内で完結することに使うことはまずない。

822:デフォルトの名無しさん
09/04/09 00:09:57
Regexクラスを使った正規表現って
交差演算子「&&」は使えませんよね?

823:デフォルトの名無しさん
09/04/09 00:12:33
古語でも可也

824:デフォルトの名無しさん
09/04/09 00:18:44
>>822
MSDN読め。


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