ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
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
たぶん異なるスレッドから見てるんでしょ

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

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昇格させる設定を
ユーザーにさせてるんでないの?
都度か一括かの違いで


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

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