トップページ⇒tech
1001コメント315KB

C♯, C#相談室 Part34

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2006/09/06(水) 22:34:17
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C♯, C#相談室 Part33
http://pc8.2ch.net/test/read.cgi/tech/1153537081/l50

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0809デフォルトの名無しさん2006/10/24(火) 17:33:06
インターフェイスを呼び出すとは何ですか?
0810デフォルトの名無しさん2006/10/24(火) 17:33:09
>>808
実装MethodにIntarfaseName.が付くんですぅ><
08118082006/10/24(火) 17:33:57
これのことか、
ttp://www.kumei.ne.jp/c_lang/cs/cs_60.htm
08128082006/10/24(火) 17:36:58
インターフェース名を明示したって事だな。
明示する理由が分かった。
これpublicにするとまずいだろ
0813デフォルトの名無しさん2006/10/24(火) 17:42:40
>>812 なんで?
0814デフォルトの名無しさん2006/10/24(火) 17:44:09
>>810≠>>807ね
つい、やってしまいますたwごめんね(はぁと
0815デフォルトの名無しさん2006/10/24(火) 18:32:43
ttp://msdn2.microsoft.com/ja-jp/library/ms229034.aspx


積極的な理由がない場合は、インターフェイス メンバの明示的な実装を避けます。
明示的な実装について理解するには、高度な専門知識が必要です。
たとえば、明示的に実装したメンバはそのシグネチャがプライベートであっても
パブリックに呼び出すことができることを知らない開発者が大勢います。
シグネチャがプライベートであるため、明示的に実装されたメンバは、
パブリックに参照できるメンバのリストには表示されません。また、メンバを明示的に
実装すると、不必要に値型がボックス化される原因となることもあります。

0816デフォルトの名無しさん2006/10/24(火) 19:35:58
public void Method() { ((IInterfaceA)this).Method(); }
void IInterfaceA.Method(){}
void IInterfaceB.Method(){}

こういうのはいいんだっけ
0817デフォルトの名無しさん2006/10/24(火) 22:55:47
Generics で値型を使った場合 (Point<int, int> みたいに)
boxing/unboxing が行われるコードが生成されるの?
0818デフォルトの名無しさん2006/10/24(火) 23:03:20
意味が分からん。
行われる時は行われるし行われない時は行われないだろ。
0819デフォルトの名無しさん2006/10/24(火) 23:13:27
>>817
http://msdn2.microsoft.com/ja-jp/library/ms172194.aspx
>ジェネリック コレクション型の利点は、タイプ セーフだけではありません。
>ジェネリック コレクションでは、値型をボックス化する必要がないため、
>一般に、値型の格納と操作のパフォーマンスが向上します。
Javaとは違うよ
0820デフォルトの名無しさん2006/10/25(水) 00:04:35
すいませんウェブサービスを参照している画面を継承して
画面をつくったら、
アセンブリロケーションが変な場所になっていて
UIデザイン画面読み込み時にApp.Configがありませんとエラーが出ました。

実際ビルドすると普通にとおってローカルで動いています。
デザイン時のこのエラーをなくすにはどうしたらいいのでしょうか?

ウェブサービスを参照している画面を継承元にするとやはりまずい?

0821デフォルトの名無しさん2006/10/25(水) 01:21:51
hogehoge.Designer.csを自分で編集して参照してるとこを書き換えればいいんでないの?
0822デフォルトの名無しさん2006/10/25(水) 10:09:09
>>821
すいません、参照しているところ、、、って?
Designerにそんなことかいてあるのでしょうか?
探してみます!
0823デフォルトの名無しさん2006/10/25(水) 22:52:01
NUnitの質問もここでいいですかね?
NUnit2を使ってテストしたいのですが
同期メソッドのテストは出来たのですが
非同期メソッドのテストの仕方がわかりません
デリゲートにコールバックが返ってきて値をチェックして成功を判断したいのです

誰かやり方を教えてください
0824デフォルトの名無しさん2006/10/25(水) 23:10:24
WaitHandleとか使って待つとか
適当にSleep入れてコールバック側でいつもどおりチェックする
とりあえず、AutoResetEventを使用しとけば?
0825デフォルトの名無しさん2006/10/25(水) 23:20:14

 .NETの学習は時間の無駄です

0826デフォルトの名無しさん2006/10/25(水) 23:27:23

 .NETの学習は時間の無駄です
0827デフォルトの名無しさん2006/10/25(水) 23:38:36

 .NETの学習は時間の無駄です
0828デフォルトの名無しさん2006/10/25(水) 23:46:03

 .NETの学習は時間の無駄です
0829デフォルトの名無しさん2006/10/25(水) 23:53:46
textboxが3つあります(A,B,Cとする)

A.text + B.text(数値加算) の結果をC.txetに表示したいのですが、エラーになります。
対象方を伝授して下さい

int A = A.text;
int B = B.text;
int C = A + B;

C.text = C.ToString();
0830デフォルトの名無しさん2006/10/25(水) 23:55:47
C.text = ( int.Parse(a.Text.Trim()) + int.Parse(b.Text.Trim())).ToString();
0831デフォルトの名無しさん2006/10/25(水) 23:55:58
>>819
thx.
ということは、代入時の動作が値型と参照型で違うけれども、
Generic なクラスを書くときは、そのへんを考慮しないといけないってこと?
0832デフォルトの名無しさん2006/10/25(水) 23:57:01
>>829
みたいな質問って.NETの弊害じゃないかな?
アセンブラやCからプログラムを始めたような人なら絶対しない質問だよね

ポトペタ環境で糞低レベルなやつの質問が正直うぜー

VC6のような初心者にいきなり高い壁を見せ付けて脱落させる環境が好きだったのに・・・
0833デフォルトの名無しさん2006/10/25(水) 23:58:36
代入とコレクションへの追加をごっちゃにしてないか?
0834デフォルトの名無しさん2006/10/25(水) 23:58:52
>>832
('A`) プ
0835デフォルトの名無しさん2006/10/25(水) 23:59:43
>>832
C から始めた人なら char * を足し合わせるんじゃないか
0836デフォルトの名無しさん2006/10/26(木) 00:00:30
そんやついねーよ
0837デフォルトの名無しさん2006/10/26(木) 00:00:56

 .NETの学習は時間の無駄です
0838デフォルトの名無しさん2006/10/26(木) 00:01:28
>>833
コピーが追加されるか、そのものへの参照が追加されるのかは実質的に
区別が必要だと思うけど・・・

でもまぁそれは Generics なクラスを書くときに限らず、
値型を用いる場合一般について言えることのような気がする。
0839デフォルトの名無しさん2006/10/26(木) 00:18:29

 .NETの学習は時間の無駄です
0840デフォルトの名無しさん2006/10/26(木) 00:21:42
>>839
お前のほうが(ry
0841デフォルトの名無しさん2006/10/26(木) 00:22:42
スクリプトにレスしないように。
0842デフォルトの名無しさん2006/10/26(木) 01:17:40
  
 .NETの学習は時間の無駄です
   
0843デフォルトの名無しさん2006/10/26(木) 01:21:47
スクリプトご苦労w

手伝ってやろうw

 .NETの学習は時間の無駄です

そうは思わんがw
08448292006/10/26(木) 01:24:56
レスありがとう。おいらVB坊ですが、C#を昨日始めたところなんで、最初からつまずきました。
0845デフォルトの名無しさん2006/10/26(木) 01:34:41
>>844
C#は自動でstring → intなどの型変換しないのだ。
c++やjavaとかもです。

自動で型変換すると不都合が起こったり、バグが分かりづらくなりますので。。
0846デフォルトの名無しさん2006/10/26(木) 01:39:56
えっ?
0847デフォルトの名無しさん2006/10/26(木) 01:46:05
>>845
(;´Д`)
0848デフォルトの名無しさん2006/10/26(木) 02:20:27
スレの空気が凍ったのが見えた
0849デフォルトの名無しさん2006/10/26(木) 09:27:17
ホワイトアルバムのスタンド使いが現れたのか
0850デフォルトの名無しさん2006/10/26(木) 09:51:19
エターナルフォースブリザード使いがいるのはこのスレですか?
0851デフォルトの名無しさん2006/10/26(木) 11:05:01
最近Win32API直接呼び出す必要があるプログラムかいてんだけど
ポインタ演算が整数で足し算しなきゃ駄目だからCよりえげつない事になるな
p++って書けばいいとこ
new IntPtr(base.ToInt32()+Marshal.Sizeof(..))
0852デフォルトの名無しさん2006/10/26(木) 11:26:19
C#関連のコミュニティって言うとどこらへんよさげでしょうか?
VSUG,MSDNフォーラムぐらいしかわからんです。
メーリングリストや海外の掲示板でもOKです。
0853デフォルトの名無しさん2006/10/26(木) 17:30:00
>>851
unsafe使えばいいじゃない
0854デフォルトの名無しさん2006/10/27(金) 01:19:21
>>844
本来ならVB(6.0)でもそんなことやっちゃダメなんだがな。
とにかくデータ型とその演算方法をそろえることだ。
どう見ても 文字型+文字型=整数型 っておかしいだろ?
がんばれ。
0855デフォルトの名無しさん2006/10/27(金) 01:23:01
>>845-850の流れがよくわからない俺に、どういうことなのか説明してくれないか。
0856デフォルトの名無しさん2006/10/27(金) 01:24:07
VBってあれでコンパイラ通るの・・・?
0857デフォルトの名無しさん2006/10/27(金) 01:41:31
>>855
『自動で型変換が行われることはない』 が誤り
0858デフォルトの名無しさん2006/10/27(金) 03:28:00
>>856
さすがに変数名とコントロール名がかぶってるから通らない。
でも
 Dim x As Integer = A.Text
 Dim y As Integer = B.Text
 C.Text = x + y
なんてのは通っちゃう。もちろん実行時に数値変換できない文字列だったら例外発生。
オプションでコンパイル時に型チェックするようには出来るが規定値はOff。
0859デフォルトの名無しさん2006/10/27(金) 03:44:19
string→intの方変換が自動で行われることなんてあんのか?
0860デフォルトの名無しさん2006/10/27(金) 03:50:29
stringっつーかobject
0861デフォルトの名無しさん2006/10/27(金) 04:22:14
おそろしい言語だな
0862デフォルトの名無しさん2006/10/27(金) 04:26:45
C#的に言うと int i = "123"; と書くとコンパイラが勝手に
int i = Convert.ToInt32("123"); と補完する感じ。
実際使われるのはVB独自の変換クラスのメソッドだけど。
0863デフォルトの名無しさん2006/10/27(金) 07:35:18
>>937
どの文字かまで追ってないけどXMLの禁則文字が入ってるだけじゃね?
><&は< > &に置き換え

あぁ、タグ名かも知れんな・・・
"XML 禁則"でぐぐってくだちぃ
08648632006/10/27(金) 07:36:21
誤爆スマソ
0865デフォルトの名無しさん2006/10/27(金) 08:16:39
>C#は自動でstring → intなどの型変換しないのだ。
これのどこがまちがってんのか教えてくれ。
0866デフォルトの名無しさん2006/10/27(金) 08:20:55
え、まじ?
自動変換してくれるとは知らなかったぞ
0867デフォルトの名無しさん2006/10/27(金) 08:23:33
漏れもちゃんと変換書いてたお
サンプルキボン
0868デフォルトの名無しさん2006/10/27(金) 09:31:41
VB.NETはstrict onだと暗黙の型変換されないはず

>>865
蒸し返すな
0869デフォルトの名無しさん2006/10/27(金) 11:01:50
XMLSerializer で、一つのファイルに複数のオブジェクトをシリアライズってできますか?
一つのファイルに対して複数の Serializer.Serialize() すると、一つのファイルに複数の
オブジェクトが入りますが、Deserialize できません。
どうなんでしょう?
0870デフォルトの名無しさん2006/10/27(金) 12:12:08
>>869
追記
違う型のオブジェクトを一つの XML ファイルにシリアライズできますか?
0871デフォルトの名無しさん2006/10/27(金) 12:41:57
XmlSerialization ネームスペースにあるアトリビュートを眺めてみろ
0872デフォルトの名無しさん2006/10/27(金) 12:43:02
手順を踏めば解決できそう。

それより保存クラス作ったほうがいいんじゃないか?
0873デフォルトの名無しさん2006/10/27(金) 12:56:51
>>865
>C#は自動で(string → intなどの)型変換しないのだ。
俺は↑と読んだ。
0874デフォルトの名無しさん2006/10/27(金) 12:57:57
>>871
どもです。眺めてみたけど、どれでしょう?
xmlns などを変更してみたがだめでした。orz
0875デフォルトの名無しさん2006/10/27(金) 13:44:29
結局違ってないんだな?
0876デフォルトの名無しさん2006/10/27(金) 13:58:56
こう読んだらどうだ?

 C# は自動で string (自動で何でもstringにする、の意?)
 → int などの型変換はしないのだ (int にはしてくれない、の意?)。

いや意味は不明だが。
0877デフォルトの名無しさん2006/10/27(金) 14:13:18
「C# は string → int の型変換は自動で行われませんよ」 って意味なんだろうけど……
>>873 みたいに、括弧の中が抜け落ちて 「C# は自動で型変換しないのだ」 に読めてしまう罠( ´ー`)y-~~
0878デフォルトの名無しさん2006/10/27(金) 14:17:25
どうでもいい
0879デフォルトの名無しさん2006/10/27(金) 16:11:11
ttp://wisdom.sakura.ne.jp/programming/cs/cs32.html
0880デフォルトの名無しさん2006/10/27(金) 17:19:09
string→intの暗黙の変換は無いだろ
int→stringはやってくれる場合もあるけど
0881デフォルトの名無しさん2006/10/27(金) 17:22:23
>int→stringはやってくれる場合もあるけど
言語仕様ではやらないよ。

あれは演算子のオーバーロードですよ。
0882デフォルトの名無しさん2006/10/27(金) 17:23:13
×string
○object
0883デフォルトの名無しさん2006/10/27(金) 17:23:16
C#ではそういうの「暗黙の変換」とは言わないでしょ
ToString()が呼ばれるだけ
0884デフォルトの名無しさん2006/10/27(金) 17:38:03
初心者が多いな
俺も変わらないけどw

初心者は
abc.Text="abc"+1;
がおkで、
abc.Text= 1+"abc";
がなぜNGなのかわからない。

ヒント:演算子オーバーロード
0885デフォルトの名無しさん2006/10/27(金) 17:40:06
>>884
両方OK
0886デフォルトの名無しさん2006/10/27(金) 17:46:34
>>884
>>884
>>884
>>884
0887デフォルトの名無しさん2006/10/27(金) 17:48:21
>>884
ついでに言うと、演算子オーバーロードではない。
言語仕様上でどうなってるかは忘れたが、文字列結合演算子 + の実体は String#Concat
0888デフォルトの名無しさん2006/10/27(金) 18:06:10
二項 + 演算子は、数値型と文字列型に対してあらかじめ定義されています。
数値型の場合、+ は 2 つのオペランドの合計を計算します。
オペランドの片方または両方が文字列型の場合は、オペランドの文字列表現が
連結されます。
0889デフォルトの名無しさん2006/10/27(金) 18:06:19
つーか、>>865 は、
「int → long とかは暗黙の型変換あるよ」って意味でもないの?

C# では、暗黙の型変換は、「整数 → より表現範囲の広い整数」か、
float → double のみ。
明示的な型変換も、組み込み型だと、object からのダウンキャストと、
整数・浮動小数点数同士の間のみ。
string との相互変換は int.Parse とかと ToString 使う。
0890デフォルトの名無しさん2006/10/27(金) 18:11:30
ところでToStringって何のためにあるの?
わざわざObjectに定義するほど重要?
0891デフォルトの名無しさん2006/10/27(金) 18:15:28
ToStringがないと上記の+演算が出来ないのでは?
0892デフォルトの名無しさん2006/10/27(金) 18:18:59
>>890
Console.Write(string format, params object[] args) とかのためでしょ。
0893デフォルトの名無しさん2006/10/27(金) 18:32:36
C#言語仕様ver1.2より抜粋。

7.7.4加算演算子
x + y 形式の演算では、二項演算子のオーバーロードの解決 (7.2.4 を参照) を適用して、
演算子の実装が選択されます。オペランドが、選択した演算子のパラメータの型に
変換され、その結果の型が演算子の戻り値の型になります。

文字列の連結 :
string operator +(string x, string y);
string operator +(string x, object y);
string operator +(object x, string y);
二項演算子 + は、一方または両方のオペランドが string 型のときは、文字列の連結を
行います。文字列連結のオペランドが null の場合は、空の文字列に置き換えられます。
文字列ではない引数は、object 型から継承された仮想の ToString メソッドを呼び出すことで、
文字列形式に変換されます。
ToString が null を返す場合は、空の文字列に置き換えられます。
0894デフォルトの名無しさん2006/10/27(金) 18:36:29
変に >>893 みたいな string.operator + を用意しちゃうから、
string ⇔ 数値型間の暗黙の型変換が出来るもんだと勘違いしちゃう初心者が出てくるんかな?
0895デフォルトの名無しさん2006/10/27(金) 18:54:49
高級言語で書くときにレジスタのことを考えなくてもいいように
プログラムの内容に関係ないところは気にしなくて済むようにするのが言語としてはまっとうだと思うけど
ToStringはまだ気にしておくべきところなんだろうね
+でもConsole.Writeでも、全部Tostring()明記を強制したほうがいい気がするなあ

D言語の配列連結演算子はなかなか良い設計だと思う俺
0896デフォルトの名無しさん2006/10/27(金) 18:56:48
Console.Write に ToString 明記しろって言われたちょっとめんどくさすぎるかなぁ。
文字列結合の + は明記にして欲しいけど。
0897デフォルトの名無しさん2006/10/27(金) 18:58:06
javaも似たようなもの。


15.17.1 文字列連結演算子 +
一つのオペランドの式だけが型Stringならば,実行時に文字列を生成するために,
他方のオペランドに対して文字列変換を実行する。結果は二つのオペランドの文字列を
連結して新たに作成したオブジェクト String への参照とする。
新たに作成した文字列内では,左辺オぺランドの文字が右辺オぺランドの文字に先行する。
0898デフォルトの名無しさん2006/10/27(金) 19:55:11
HP作ったり画像編集したりっていう仕事つく予定なんだけど、
どの言語重点的にやったらいいでつかね?

ちなみにいまC#中
0899デフォルトの名無しさん2006/10/27(金) 20:00:19
今C#をやってるならC#をマスターすればいいよ
C#ができればJavaもVB.NETも簡単にできるようになる
0900デフォルトの名無しさん2006/10/27(金) 20:00:23
HTML
0901デフォルトの名無しさん2006/10/27(金) 20:16:54
>899 そうですか、わかりました どうもありがとうございます
本よんでせかせかやります
0902デフォルトの名無しさん2006/10/28(土) 11:54:56
>>901
画像編集はプログラミングつーよりイラストレーターとかじゃないか?
0903デフォルトの名無しさん2006/10/28(土) 18:18:29
ランチャーを作ろうと思っています。
ドラッグ&ドロップでフルパスを取得することまではできましたが、
そのフルパスからファイルを実行させる方法はどうするのでしょうか?

0904デフォルトの名無しさん2006/10/28(土) 18:25:47
Process.Start
0905デフォルトの名無しさん2006/10/28(土) 18:54:33
>>904
ありがとうございます
0906デフォルトの名無しさん2006/10/29(日) 05:48:15
.net初心者です。

bool型の変数に対して、複数スレッドから読み書きする必要があるのですが、
lock等の排他制御を書く必要ありますでしょうか?
それとも、bool型に排他制御は必要ないでしょうか?
0907デフォルトの名無しさん2006/10/29(日) 05:53:39
>>906
static volatile bool aaa;
09082062006/10/29(日) 06:01:46
助かりました。本当にありがとうございます。
レス数が900を超えています。1000を超えると表示できなくなるよ。