ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
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(@) {A}
で、@では自作ログ出力クラスのインスタンスを生成しています。
この際、インスタンス初期化時にログファイルを開けない場合は
StreamWriterのコンストラクタが出力する例外をそのままthrowするのですが、
それをcatchするには、
try {using(@) {A}}
みたいに全体を囲わないといけないのでしょうか。
この場合、Aまで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
たぶん異なるスレッドから見てるんでしょ

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


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

5259日前に更新/200 KB
担当:undef