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

ふらっとVisual C#,C♯,C#(初心者用) Part109

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/11/28(木) 11:27:54.20
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問。
質問者自身なんだか意味がよく分からない質問。
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて、他スレ・他板へ行くことを勧められることがあります、ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっとVisual C#,C♯,C#(初心者用) Part108
http://toro.2ch.net/test/read.cgi/tech/1383867970/

■関連スレ
C#, C♯, C#相談室 Part81
http://toro.2ch.net/test/read.cgi/tech/1381134494/

■コード貼るなら↓使ってください
http://ideone.com/
0002デフォルトの名無しさん2013/11/28(木) 11:41:32.05
いちょつ
0003デフォルトの名無しさん2013/11/28(木) 19:09:04.85
■■テンプレ追加■■
Close()とDispose()についてのお話大歓迎です!
0004デフォルトの名無しさん2013/11/28(木) 19:15:24.71
>>3
そろそろ自動荒らしbot止めないか?
0005デフォルトの名無しさん2013/11/28(木) 19:17:27.62
>>4
そろそろ自動荒らしbot止めないか?
0006デフォルトの名無しさん2013/11/28(木) 19:20:21.61
命が止まっちゃうだろ
0007デフォルトの名無しさん2013/11/28(木) 19:46:51.31
天才チンパンジーのアイちゃん、最近見ないね
0008デフォルトの名無しさん2013/11/28(木) 20:37:47.45
この流れがわからんのだがどっちでもいいじゃ駄目なん?
どっちにしろアンマネージドなクラスインスタンスを生成するから最後はDispose(Close)しろよって制約なだけじゃん
この認識じゃおまえはまだまだ半人前以下だなプギャーなの?
0009デフォルトの名無しさん2013/11/28(木) 20:41:36.85
うん
0010デフォルトの名無しさん2013/11/28(木) 20:57:24.70
こ
0011デフォルトの名無しさん2013/11/28(木) 20:59:51.26
Windows.Forms.Form dispose != close
Stream系 dispose == close

MSでも分かれてるのだし、クラスやライブラリの設計次第ってことで
0012デフォルトの名無しさん2013/11/28(木) 21:34:57.77
プロパティをrefで渡せなくて泣いた
もはやrefだけでなく構造体とかローレベルな機能のほとんどを使わなくなってしまった
0013デフォルトの名無しさん2013/11/28(木) 21:37:37.63
ならrefなんか完全に捨ててデリゲートでコールバックを渡せ
0014デフォルトの名無しさん2013/11/28(木) 21:45:14.26
refにプロパティ渡せないのって
よく考えれば妥当なんだけど
便利なc#の世界観にひたってるとびっくりするよね
0015デフォルトの名無しさん2013/11/28(木) 21:48:15.40
VBだと渡せたりする。
実際はテンポラリの変数にプロパティの値をコピーして関数をコール
関数の呼び出しが終わったら、
テンポラリの変数からプロパティに書き戻しと泥臭いことをやってる
0016デフォルトの名無しさん2013/11/28(木) 21:51:52.89
いま再設計したらrefやoutは無くなってTryParse("123", x => hoge = x)になるだろうな
0017デフォルトの名無しさん2013/11/28(木) 21:56:08.42
それより多値関数の実装をたのむ
0018デフォルトの名無しさん2013/11/28(木) 22:18:18.90
class MyClassA { }
class MyClassB : MyClassA { }
class MyClassC : MyClassB { }
class MyClassD : MyClassC { }
void Hoge(MyClassA a) { }
void Hoge(MyClassB b) { }
void Hoge(MyClassC c) { }

今こういう書き方してるんですがHogeメソッドって一つにまとめられませんか?
派生クラスならABCDどれでも呼べるような
0019デフォルトの名無しさん2013/11/28(木) 22:21:41.39
void Hoge(MyClassA a) { }

これにMyClassBとかMyClassCのインスタンス指定してみた?
0020デフォルトの名無しさん2013/11/28(木) 22:25:29.87
そんなものよりHogeメソッドを持ってるなら何でもokみたいなジェネリックメソッドの書き方教えてよ
なんでジェネリックなのにいちいち継承かインターフェース使わなならんねん
0021デフォルトの名無しさん2013/11/28(木) 22:27:25.96
ダックタイピングがしたいのか?
0022デフォルトの名無しさん2013/11/28(木) 22:28:53.47
>>18
void Hoge(dynamic a) { a.SomeMethod(); }
0023デフォルトの名無しさん2013/11/28(木) 22:30:42.48
>>21
左様
0024デフォルトの名無しさん2013/11/28(木) 22:36:38.05
成程
0025デフォルトの名無しさん2013/11/28(木) 22:36:49.73
>>19
それは void Hoge(MyClassB b) { } を書かなくてもAにぶち込めるはずって事ですか?
今テスト用に書いたコードでは行けたっぽくて
元々詰まってたのは「オーバーロードメソッドには無効な引数がいくつか含まれます」って
出てきて絶賛大混乱中なんですが
0026デフォルトの名無しさん2013/11/28(木) 22:45:38.23
reflectionを使うのが定石だよ
0027デフォルトの名無しさん2013/11/28(木) 22:53:52.32
>>21
多分それです

>>22
それも>>25と同じエラーが出ます

そしてどこに躓いてるか今わかりました
static void Hoge(MyClassA a) {}
static void Hoge(List<MyClassA> a) { }

Hoge(new MyClassD()); ←これは通る
Hoge(new List<MyClassD>()); ←これが通らない

Listの方をしたいんですがどうにかなりませんか
0028デフォルトの名無しさん2013/11/28(木) 22:58:47.13
むちゃくちゃ言ってんぞおい
0029デフォルトの名無しさん2013/11/28(木) 22:59:02.04
それは全く別の問題
IList<T>とparams T[]のオーバーロードを併用するとかか
■ このスレッドは過去ログ倉庫に格納されています