C#, C♯, C#相談室 Part91 at TECH
[2ch|▼Menu]
[前50を表示]
250:デフォルトの名無しさん
16/08/07 00:26:15.92 9x/mUqeF.net
>>239
FooException ex と BarException ex を同時に使う状況ってこと?

251:デフォルトの名無しさん
16/08/07 00:28:08.51 NgeF8SpO.net
ごくまれにcatchの中でtry-catchすることはあるがまあその時は柔軟に

252:デフォルトの名無しさん
16/08/07 00:31:45.60 e9qgeSIc.net
かぶったらex1とかex2でok
どうせスコープは短いだろうし適当な名前で問題なし

253:デフォルトの名無しさん
16/08/07 00:47:22.73 S/UbGMUU.net
>>240
いや、それはキャッチのスコープが違うから問題なかろうけど、>>241のケース

254:デフォルトの名無しさん
16/08/07 00:50:27.58 9x/mUqeF.net
catchの中でtry-catch…! そういうのもあるのか……!

255:デフォルトの名無しさん
16/08/07 09:23:00.24 mCHosifW.net
エラーのリカバリー処理でエラー発生リスクが有る場合かな?
色々見なおしたほうが良さそうな気もする

256:デフォルトの名無しさん
16/08/07 12:01:30.30 9x/mUqeF.net
for文のi j k みたいに e f g って続いてたら笑ったのに

257:デフォルトの名無しさん
16/08/08 06:26:49.16 4wAqez6C.net
>>245
普通にあるでしょそんなもん
そのへんをいい加減に作ると後片付けがうまくいかなくてフリーズする
よくあるゴミアプリが誕生する

258:デフォルトの名無しさん
16/08/08 19:52:54.53 0f2Bh+Sl.net
ねぇ、いつまで 場合によるだけの話を続ける気?
人格だの人の能力を言い出しては もうプログラムの話ではない。
マ板行け

259:デフォルトの名無しさん
16/08/08 20:50:56.99 bsQ3M/kD.net
>>247
やむを得ないこともあるけど、できるだけ避けるべきですね
エラー処理の中でエラーが起こるとデバッグに支障が出る場合もある

260:デフォルトの名無しさん
16/08/08 22:43:36.18 uowaRDGP.net
Visual Studio2015 について質問です。
VisualStudioにて複数ソースを開くと上部に複数タブが出てきます。
で、よくわからない内に選択したソースのタブが勝手に一番左に来るようになりました。
これが非常に面倒くさくて、選択したソースが一番左に来ないようにしたいのですが
どなたか解決方法ご存知ないでしょうか?

261:デフォルトの名無しさん
16/08/09 00:07:43.18 +GDJlmm9.net
>>250
タブがピン留めされてない?

262:デフォルトの名無しさん
16/08/09 00:29:21.39 PJVjRNSn.net
>>251さん

263:デフォルトの名無しさん
16/08/09 00:36:05.38 PJVjRNSn.net
途中投稿すいません。
>>251さん レスありがとうございます。
ピンなどの機能は使っていません。
全てのタブを閉じたり、Visual Studioを落としたりしても
直らないのです。
検索して同様の件を探そうにも、タブやソースを検索ワードに入れると
プログラムの製作方法ばかりで困ってます。

264:デフォルトの名無しさん
16/08/09 03:44:24.30 JQFwElds.net
文面見る限りでは俺もそうだけど…
これじゃ嫌なの?
てかさ、まず何に困ってるのか書かないと。

265:デフォルトの名無しさん
16/08/09 04:34:03.25 T9h0Wo+i.net

sssp://o.8ch.net/fbfe.png

266:デフォルトの名無しさん
16/08/09 17:26:16.40 PJVjRNSn.net
>>254さん >>255さん レスありがとうございます。
文面では状況が伝わりにくいと思い Gifで撮影致しました。
URLリンク(gyazo.com)
この様にタブの順番が変わってしまうのが非常に辛いのです。
自分はタブの位置 順番でソースを把握しているので複数開いている時
非常に煩雑になります。
>>255さん
頂いた画像の部分の項目や 他部分変更したのですが
自分の求めている部分の変化はありませんでした。

267:デフォルトの名無しさん
16/08/09 17:36:54.04 PJVjRNSn.net
大変申し訳無いです。自己解決致しました。
別に入れておりましたvisualstudioのプラグインによって
タブがソートされておりました。
これが何かのキッカケでオンになってしまっていたようです。
大変お騒がせ致しました。
お返事頂けた方々ありがとうございました!

268:デフォルトの名無しさん
16/08/09 19:14:43.91 10xMu+CU.net
ネタフリ
textboxから数値


269:取り出すのってどうしてる? いまだにTryParseとかやってる? それだけのためにプロパティをバインディングしたりしてる? 一時期stringに拡張メソッドつけて数値とっていたけどそれすらめんどくなってきた めんどいもっと楽させてほしい



270:デフォルトの名無しさん
16/08/09 19:25:41.64 mk3kxjVQ.net
VBでも使え
そして二度と帰ってくるな

271:デフォルトの名無しさん
16/08/09 19:41:20.86 /QPZwEhn.net
数値しか入れないのにTextBox使わない

272:デフォルトの名無しさん
16/08/09 19:54:32.32 Ulr7R0RZ.net
>>258
Windows Formの話だと思うけど、TextBox継承して数値入力専用のを作ればいいよ。
実際やってみると以外と大変だけどねw
こんなの本当は標準で用意して欲しいよね。

273:デフォルトの名無しさん
16/08/09 19:57:01.35 AJ2CLbue.net
>>259
VBじゃなくてVBScript勧めたほうがいいんじゃねw
>>260
ごもっともw

274:デフォルトの名無しさん
16/08/09 19:59:46.34 2xtWtUt/.net
>>258
一文字入力されたら数字とBS以外スルーするようにしとけよ

275:デフォルトの名無しさん
16/08/09 20:04:18.47 JS0TrNVx.net
T使って継承すればよろし

276:デフォルトの名無しさん
16/08/09 20:17:13.72 h+7CEzP0.net
いい加減
数値⇔文字列
の変換をするキャストメソッド追加しろよ

277:デフォルトの名無しさん
16/08/09 21:01:17.26 mk3kxjVQ.net
>>264
お前ふらっとの方でも似たような書き込みしてるけど何も理解できていないな

278:デフォルトの名無しさん
16/08/09 21:04:36.79 10xMu+CU.net
似たような感じでしょうもない変換メソッドとか毎回書かされるのはもうつまらん
c#はここから先に進まないのか?

279:デフォルトの名無しさん
16/08/09 21:06:08.84 h+7CEzP0.net
変換メソッド自動生成はもうAIの領域だな

280:デフォルトの名無しさん
16/08/09 21:53:33.39 rTlnm3J6.net
両端にスペース入りのカンマつき数字をコピペしてくる強者がいる
まずクリアするのがこれで
次が全角数字の人、その次が丸つき数字の人、その次が数字の途中か終りにマイナスを入れてくる人

281:デフォルトの名無しさん
16/08/09 22:36:34.91 Ulr7R0RZ.net
ペーストの処理は面倒だからコンテキストメニューを殺してペースト禁止するのが楽だねw

282:デフォルトの名無しさん
16/08/10 10:54:02.06 sZvpYadZ.net
そういえば**演算子と//演算子の追加予定ないの?
n乗とn乗根演算子欲しい

283:デフォルトの名無しさん
16/08/10 11:01:59.51 vUhFEZdN.net
>>271
//の方はコメントつけたソースが大変な事にw

284:デフォルトの名無しさん
16/08/10 11:14:15.16 sZvpYadZ.net
あっ…w
/*でもコメントだしな〜

285:デフォルトの名無しさん
16/08/10 13:38:46.88 yH6Tmb7K.net
そこに気付くとはやはり天才か(棒)

286:デフォルトの名無しさん
16/08/11 18:47:30.48 Lr/mSCyz.net
string s1 = "10 〜 20";
string s2 = "1-500";
string s3 = "-25 - -10";
string s4 = "0〜1";
のように、FROM + 半角スペース(ありorなし) + -または〜 + 半角スペース(ありorなし) + TO
というような範囲の含まれている文字列があります。
(FROMとTOの数字はマイナスや小数点あり)
FROMだけを取り出したいのですが、何かいい方法は無いでしょうか。
正規表現などを使うとできるんでしょうか?

287:デフォルトの名無しさん
16/08/11 18:50:37.65 PgxrnQsD.net
-?¥d+

288:デフォルトの名無しさん
16/08/11 20:02:01.76 gnwNFYm1.net
>>276
> 小数点あり
-?¥d+(¥.¥d+)?

289:デフォルトの名無しさん
16/08/11 20:59:51.07 Lr/mSCyz.net
ありがとう!
やってみる!

290:デフォルトの名無しさん
16/08/15 16:48:49.78 C0q0R5N5.net
スレッド違いかもしれないですが教えてください。
Google Analitics でトラフィックを確認


291:したところ ↓の様にIP+ポート番号でのアクセスがありました。 通常であれば、YahooやGoogleなどの検索エンジンからの流入だけになるハズが この様なアクセスがあり警戒しています。これは何か攻撃を受けているのでしょうか? 10.160.XXX.XXX:XXXXX



292:デフォルトの名無しさん
16/08/15 16:58:13.22 zs1ooRaK.net
帰れカス

293:デフォルトの名無しさん
16/08/15 22:44:50.60 C0q0R5N5.net
279
です。誰か教えてください。
>>280
のキチガイはスルーで

294:デフォルトの名無しさん
16/08/15 22:47:06.97 9j969OGV.net
ふらっとの粘着がこっちに移動してきたか

295:デフォルトの名無しさん
16/08/15 23:02:56.98 ga2FZEJa.net
>>281
C#とGoogle Analiticsにどんな関連性があるの?
さっさと帰れよ

296:デフォルトの名無しさん
16/08/15 23:19:34.56 C0q0R5N5.net
279
関連スレッドがあれば教えてください
そちらで質問します。

297:デフォルトの名無しさん
16/08/15 23:46:15.43 /I3SQKNS.net
>>284
死んでろ
ここも次の次はワッチョイだな
次は既に立ってるから
スレリンク(tech板)

298:デフォルトの名無しさん
16/08/16 13:51:24.11 vfH4bKhl.net
new byte[1024*1024*1024]で1GBのメモリ確保は出来るのに300*300の画像を読み込み、Clone(300*300*4*2=720000byte=0.7MB弱)をするとメモリエラーが発生します
何故でしょうか

299:デフォルトの名無しさん
16/08/16 14:50:00.40 o15hK2EL.net
クイズですか?

300:デフォルトの名無しさん
16/08/16 15:10:19.55 qGC1dEkn.net
プログラムは思った通りではなく作られた通りに動くから

301:デフォルトの名無しさん
16/08/16 17:06:36.47 KuBIRE+Q.net
System.DrawingというかGDI+は困ったらすぐOutOfMemory返してくる

302:デフォルトの名無しさん
16/08/16 18:11:02.75 imMBMuem.net
>>286
そもそもコピーされるわけでもないCloneを使うなと
>>289
そのせいで便利な機能あるのに変換とか下手に任せられないんだよな

303:デフォルトの名無しさん
16/08/18 14:05:26.86 e8NCsKv7.net
クイズワロタ

304:デフォルトの名無しさん
16/08/18 14:19:15.35 CKZSwyTz.net
indexオーバーフローみたいな感じのが原因みたいでした
何でオートオブメモリーが発生したのかは分かりませんが

305:デフォルトの名無しさん
16/08/18 14:34:24.97 tXC5KaDm.net
indexが悪かったからだろw

306:デフォルトの名無しさん
16/08/18 14:41:42.86 KZM7ssxd.net
indexエラーとout of memoryは状況が全然違うエラーだろ
どうせCloneの元を削除したとかその辺だろうな

307:デフォルトの名無しさん
16/08/18 14:50:17.82 CKZSwyTz.net
>>294
クローンで画像切り抜こうとしたら画像の範囲越えてた

308:デフォルトの名無しさん
16/08/18 14:50:47.64 CKZSwyTz.net
オートオブメモリーは行番号出ないからどこで発生したか分かりにくいし

309:デフォルトの名無しさん
16/08/18 14:54:22.77 MLAmiHPT.net
オートw

310:デフォルトの名無しさん
16/08/18 14:56:31.03 PpWXAaq4.net
このスレまじヤバ

311:デフォルトの名無しさん
16/08/18 15:03:18.90 CKZSwyTz.net
>>297
↑こいつ馬鹿すぎワロタwwwwwwwwwwwww

312:デフォルトの名無しさん
16/08/18 15:16:29.46 dOs+cdOj.net
顔真っ赤だぞ

313:デフォルトの名無しさん
16/08/18 15:34:56.78 r1qD6HKD.net
>>296
OutOfMemoryでエラー位置示されないことは稀にあるけど出ないのが普通みたいなこと書かれても困る
最初の質問の要点も違っているし、次からは初心者スレへどうぞ

314:デフォルトの名無しさん
16/08/18 16:32:11.96 Qi6POpo5.net
オートレストランってまだあるのかなあ。

315:デフォルトの名無しさん
16/08/18 16:46:38.64 iO4p2OMA.net
エラー位置出すのにメモリ確保伴うから省くんじゃないの
何かのライブラリで OOM 例外だけ予め構築済みのまま使い回すの見て感心したおぼえがある

316:デフォルトの名無しさん
16/08/18 17:55:49.08 RNZU/l3x.net
オートオブメモリが流行っているのか

317:デフォルトの名無しさん
16/08/18 18:32:39.29 KC0cWNIH.net
たぶんエラーはオートオブメモリじゃなくてオートオブランゲなんだろうな

318:デフォルトの名無しさん
16/08/18 18:54:33.61 q9ZhHGDc.net
ふらっとがワッチョイ付いたからこっちに移住してきたのかな

319:デフォルトの名無しさん
16/08/18 19:09:53.77 VT/uRpp6.net
URLリンク(www.automemory.co.jp)

320:デフォルトの名無しさん
16/08/18 19:17:24.52 sh92haT+.net
CTRL+ALT+E で例外設定出して、OutOfMemoryExceptionにチェック入れたら普通に止まるけど
それとは違うことなんだろうか?

321:デフォルトの名無しさん
16/08/18 19:24:39.04 zEQl8UVs.net
OutOfMemoryに限らずデバッガで該当する場所でなくエントリポイントが表示されたり
GDI+関連のエラーだと意図していない場所のRefresh()とかで止まることならある
try-catchを入れとけばそこで表示されるから済む話だが

322:デフォルトの名無しさん
16/08/18 19:33:28.84 CKZSwyTz.net
>>306
そう
前はふらっとにいたけどワッチョイ付いたら他の板での書き込みバレるからこっち来た

323:デフォルトの名無しさん
16/08/18 20:03:39.26 oJeK6Bjx.net
cppでアウトオブメモリー処理のために汎用メモリーを取っておくシステムを見たことあるがそこまでやるべきなのか

324:デフォルトの名無しさん
16/08/25 23:14:01.46 HsD7PkbO.net
What’s New in C# 7.0
URLリンク(blogs.msdn.microsoft.com)

325:デフォルトの名無しさん
16/08/25 23:42:36.74 MmwMpV4v.net
>>312
throw式以外は全部ボツだろうなこれ
ジャストアイデアとしても酷すぎ

326:デフォルトの名無しさん
16/08/25 23:57:25.92 Pgok0gcb.net
>>313
タプルとパターンマッチング

327:デフォルトの名無しさん
16/08/26 00:02:49.66 TYI3AeP1.net
>>314
なんだよ。かまわんよ、存分にそれらについて語ってくれよ…

328:デフォルトの名無しさん
16/08/26 00:04:14.57 cD5Ga51Z.net
>>312
tupleとdeconstructionは欲しいな

329:デフォルトの名無しさん
16/08/26 00:26:51.57 qEbjB0B4.net
C#7.0はいい感じだね
早く業務で使いたい

330:デフォルトの名無しさん
16/08/26 00:32:45.54 zWe+Xnw2.net
パターンマッチはdeconstructionと組み合わせられないとほとんど意味ない、
というかOCPを破るだけで有害
やるなら最初からやらないとこんな中途半端なもの出したら
コーディング規約で軒並み禁止されちゃうぞ

331:デフォルトの名無しさん
16/08/26 00:39:32.65 TYI3AeP1.net
プロパティ禁止とか最早ブラックあるあるネタだもんな…今更感はある

332:デフォルトの名無しさん
16/08/26 00:48:13.71 PgCAqldG.net
>>319
そもそもプロパティを知らないおっさんがいて驚いたわ

333:デフォルトの名無しさん
16/08/26 01:01:05.00 b/aYUiUZ.net
getX(),setX()書く人は、まれに良く紛れ込むね

334:デフォルトの名無しさん
16/08/26 01:13:44.01 ZXi/bCeq.net
.NET4.0とC#7の組み合わせって可能なのかなあ。
まだあと5年ぐらいはXPのPC無視できないよね。

335:デフォルトの名無しさん
16/08/26 01:18:27.62 PgCAqldG.net
>>322
4.0とかとっくにサポート切れやで

336:デフォルトの名無しさん
16/08/26 01:27:27.85 AjmVo6xU.net
>>321
それがうちのルールなう

337:デフォルトの名無しさん
16/08/26 01:29:19.51 MwmpSlTr.net
カワイソス

338:デフォルトの名無しさん
16/08/26 01:35:14.31 b/aYUiUZ.net
>>324
残念すぎる(


339:LД`)



340:デフォルトの名無しさん
16/08/26 01:56:48.53 iK8FV/yi.net
>>322
ウチはWindows2000(.NET 2.0)も無視できない場合がある。
設備制御用のスタンドアローン機だが。

341:デフォルトの名無しさん
16/08/26 17:37:43.90 MxDOiAHv.net
よくわからないけどパターンマッチングってどういう局面で必要?
いままでのコーディングが大幅に減るとかいい面を教えてほしい
今のところ見にくいなあと感じる

342:デフォルトの名無しさん
16/08/26 18:46:17.17 zWe+Xnw2.net
>>328
本格的なパターンマッチングならこんなことができる
double GetArea(Shape shape) {
switch (shape) {
case Rectangle(x,y,w,h): return w * h;
case Circle(x,y,r): return PI * r * r;
}
}
さらに、変数にキャプチャするだけでなくxに具体的な値を指定すればxが特定の値の場合だけという条件指定も可能
今の貧弱な仕様だとお前の疑問の通りメリットはほとんどないのでまあ最終的には却下だろうな

343:デフォルトの名無しさん
16/08/26 20:21:13.42 6mUdfhCy.net
オブジェクト指向からswitch地獄に退化してないそれ?
関数型とかだとそれが普通なのかな

344:デフォルトの名無しさん
16/08/26 21:28:47.03 MxDOiAHv.net
必要に応じて使わないと退化だな

345:デフォルトの名無しさん
16/08/26 22:32:43.70 zWe+Xnw2.net
関数型はあくまで関数が主だからね
(本物の)パターンマッチは静的検査でパターンの網羅性を担保できるから、
やってることはインターフェースを実装してるのと同じようなもん

346:デフォルトの名無しさん
16/08/27 00:18:55.08 nVNQ8rj/.net
この場合は単純にGetAreaをabstract methodにして
各クラスでoverrideさせた方がよくないっすか?

347:デフォルトの名無しさん
16/08/27 00:20:04.19 1AQozIyW.net
if(x > y) (x, y) = (y, x);

348:デフォルトの名無しさん
16/08/27 00:38:01.47 gXVhUUHW.net
>>333
その方がいいと思う理由は?
>>333にとって関数型よりオブジェクト指向の方が馴染みがあるからそう感じるだけじゃない?
どっちがいいかじゃなくて考え方が違うんだよ

349:デフォルトの名無しさん
16/08/27 00:57:01.73 p93C1zWb.net
C#は関数型言語を目指すのか?

350:デフォルトの名無しさん
16/08/27 00:58:08.99 dfJ7JP1w.net
>>336
良いとこを取り入れようとしている

351:デフォルトの名無しさん
16/08/27 01:26:03.53 zYdR+KfD.net
マルチパラダイム言語なんだから、あるプログラミングパラダイムには大して効果的でない
(が、他のプログラミングパラダイムでは効果的な)機能が入ることもあるさ

352:デフォルトの名無しさん
16/08/27 01:43:46.91 p93C1zWb.net
まあたしかに今のC#はマルチパラダイムなんだろうけど
そもそもマルチパラダイムを意識して設計された言語なのだろうか
良いとこ取りしようって考え方はいいんだが
マルチパラダイムで複数のスタイルに対応しようとか、言語の複雑さが増すだけだと思うんだがなぁ
まあそのうち、オブジェクト指向でやりたい人はこれは不要(というか使うな)とかいう機能と
関数型でやりたい人はこの機能は使うなとかいう分類が出来ていくのだろうかね
だったら初めから言語分けろよと思うわけなんだが

353:デフォルトの名無しさん
16/08/27 08:01:26.33 uwQm2EgT.net
このままではVB6になってしまう

354:デフォルトの名無しさん
16/08/27 08:50:02.94 ZCfqwLYC.net
>>330
switchで分岐して分かりやすいと思う

355:デフォルトの名無しさん
16/08/27 08:50:57.27 ZCfqwLYC.net
>>333
switchがいい

356:デフォルトの名無しさん
16/08/27 08:59:36.29 xPu9ULSF.net
パターンマッチングは大変な事になりそう
ようするに型を調べて分岐の糖衣構文でしょ
バッドプラクティスの糖衣構文なんてよくないよ

357:デフォルトの名無しさん
16/08/27 09:04:35.71 SmFG8gRK.net
      ク    ク || プ  //
      ス  ク ス  | | │ //
       / ス    | | ッ //   ク   ク  ||. プ  //
       /         //   ス ク ス _ | | │ //
         / ̄ ̄\     /  ス   ─ | | ッ //
       /  _ノ  .\     /         //
       |  ( >)(<)       ___
.        |  ⌒(__人__)     ./ ⌒  ⌒\
        |    ` Y⌒l    /  (>) (<)\
.         |    . 人__ ヽ /  ::::::⌒(__人__)⌒ \
        ヽ         }| | |        ` Y⌒ l__   |
         ヽ    ノ、| | \       人_ ヽ /
.         /^l       / /   ,─l       ヽ \

358:デフォルトの名無しさん
16/08/27 09:18:21.32 xncZCRpk.net
ポリモフィズム過負荷で歪なクラスを量産するよりはよい

359:デフォルトの名無しさん
16/08/27 09:56:58.93 gXVhUUHW.net
型で分岐するのがどうして問題かというと、
後で型を追加したときに分岐の箇所を自分で探して条件を追加しなきゃいけなくなるから。
ちゃんとした関数型だと、パターンマッチで分岐させるような型って
type Shape = Rectangle(double x, double y, double w, double h)
  | Circle(double x, double y, double r);
みたいな感じでクローズしておくんだよ。
これでShapeがとりうる全ての型をコンパイラが認識できるから、
Shapeに型を新たに追加したら>>329がコンパイルエラーになってくれる。
イメージ的には 列挙体 + タプル に近いかな。OO言語の超強力なクラスとは全然異なるもの。
このように、パターンマッチは根が深いからにわか言語が中途半端に導入するとおかしなことになる。

360:デフォルトの名無しさん
16/08/27 10:14:58.12 xncZCRpk.net
データベースやXMLで不定形データ受け取って
パースした後の分岐に使うくらいかな

361:デフォルトの名無しさん
16/08/27 10:17:36.05 xPu9ULSF.net
>>346
モジュールの配布面倒くさそう
パターンをを追加したら参照元コード全部追記してねって全ユーザーに通知するの?

362:デフォルトの名無しさん
16/08/27 12:08:15.98 vp5ltHnS.net
>>346
しかしそれだと書く側にとってはOOPの方がいいが。
機能追加がクラス追加で対応できるとき、
OOP: 既存部分に一切手を入れる必要はない。
FP: 既存部分も書き直す必要がある。
普通はどう見ても退化だよ。
書き直す部分がSyntaxErrorで見つかるのは便利だけど、
OOPでもそのクラスの全メソッドを列挙するのは簡単なので、漏れる事もない。
OOPは実際の詳細なクラス毎の動作はその部分のコードからは読みとれない。
それがswitchの方がいいという人の意見なのだろうけど、
大概の場合は読みとれないのは低位記述のみであって、読みとる必要がないから問題ない。
>>329にしてもGetAreaメソッドの方がいいし、
本家の例にしてもExplainMyselfメソッドの方がいい。
本来はメソッドとしてくくれないswitch分岐に使えばいいのだろうけど、
本家にしてもそのいい例を探せなかったということじゃないか。
つまり要らない子。

363:デフォルトの名無しさん
16/08/27 18:13:53.32 gff3j1Ec.net
C#はjsのオブジェクトリテラルを導入すべきだ
C#の匿名型は書きにくいし見辛い

364:デフォルトの名無しさん
16/08/27 19:31:49.76 p93C1zWb.net
つまりパターンマッチはオブジェクト指向とはきわめて相性が悪いって事か
まあ、型チェックと代入が一発でできる機能だけなら便利に使える場面もあるだろうけど

365:デフォルトの名無しさん
16/08/27 19:54:25.56 0MFbcQeG.net
相性が悪いんじゃなくて使い分けだと思う
上ででたShapeでは各クラスが面積を出すメソッドを持っててもべつにいいだろうけど
GUI側で図形の表示に使うメソッドをShapeに持たせるのはおかしい
その場合はどこか別


366:で限定的にこのパターンマッチを使えばいいのではないか?



367:デフォルトの名無しさん
16/08/27 19:54:53.32 vp5ltHnS.net
相性が悪いわけではなく、用途がないんだと思う。
型ありOOPの場合は、型判定+分岐を仮想関数で対応するのが基本思想である為、
そもそもの例がswitch文で型判定の時点で要らない子でしかない。
もうちょっとマシな例はなかったのかよ、とも思うが。
つかどっちかというと、
パターンマッチングが活躍している言語のソースを眺めた方が良いのではないか?
誰か知ってたら教えてプリーズ。

368:デフォルトの名無しさん
16/08/27 20:00:45.28 vp5ltHnS.net
あ、ただ、絞り込みは出来るようだから、それは役に立つか?
> case Rectangle s when (s.Length == s.Height):
> case Rectangle r:
もちろんメソッドでも出来るが、色々まどろっこしくなるのかも。
(俺はC#erではないので詳しくは分からない)

369:デフォルトの名無しさん
16/08/27 20:33:04.97 vp5ltHnS.net
>>352
> GUI側で図形の表示に使うメソッドをShapeに持たせるのはおかしい
言っていることは分かるけども、それは思想によると思うよ。
OOP原理主義だとして、GUI側からの描画リクエスト対応もメソッドとして持たせた場合、
オブジェクトのメソッドは永遠に追加されていくことになるので、オブジェクトのソースが確定しない。
でも、OOPの基本理念、「動作しているコードには一切触れることなく機能追加可能」は実現出来る。
したがって、デグレードの危険が全くない。
機能の切り分けとしてはGUI側に持たせたいところだけど、
これだと追加Shape毎にGUI側もいちいち対応しないといけなくなる。
(動いているコードを修正する必要がある)
オブジェクトが肥大化するけども、
バグを出さない為の管理なら、オブジェクト側に持たせた方が楽だと思う。
他プログラムとオブジェクトを共用する気なら、
オレオレメソッドで肥大化したオブジェクトなんて要らないから、
GUI側に持たせることになる。
もしかして拡張メソッドってこのため?アレいまいちピンとこなかったんだが。

370:デフォルトの名無しさん
16/08/27 21:12:00.13 n0Zp8t3m.net
Shapeのコンテキストによるだろ
数学や物理の計算に使うモデルなら描画用メソッドなんて書いた時点で解雇されるし
描画モデルなら描画用メソッドがあってもいい

371:デフォルトの名無しさん
16/08/27 21:43:02.69 vp5ltHnS.net
だからそのための拡張メソッドじゃないの?
今回の例なら、GUI側で拡張メソッドを追加して対応する。
すると、既存コードに手を加えることもなく、描画部分もswitch文無しという、両取りが可能。
追加Shapeがあった時もGUI側の拡張メソッド部分に追加するだけ。管理もしやすい。
URLリンク(msdn.microsoft.com)

372:デフォルトの名無しさん
16/08/27 22:01:19.98 gXVhUUHW.net
>>357
それは詭弁だな
拡張メソッドは単に型ごとにGetAreaをオーバーロードしてるだけだ
オブジェクト指向というよりはむしろ関数型的なやり方
型switchや仮想メソッドは実行時型に応じた動的な多相を実現する手段で、拡張メソッドで代替できるものではないよ

373:デフォルトの名無しさん
16/08/27 22:23:19.62 E9zwljSJ.net
>>357
今の流れに拡張メソッド全く関係ないよね

374:デフォルトの名無しさん
16/08/27 22:23:59.95 vp5ltHnS.net
>>358
> 実行時型に応じた動的な多相
C#には無いだろこれ。

375:デフォルトの名無しさん
16/08/27 22:37:21.41 gXVhUUHW.net
>>360
?
普通にメソッドのオーバーライドによる多態のことだよ

376:デフォルトの名無しさん
16/08/27 22:42:35.41 vp5ltHnS.net
>>361
例えばJavaScriptでは動的に型を変更出来る。
だから実行時にswitchでやるのとコンパイル時に静的にリンクするのでは動作が異なってくる。
そういうのはC#にはないでしょ、って話。
だから話を戻すと、>>329のケースは通常のOOPの多態、
>>352のケースは拡張メソッドが一番良いと思う。
本家のも普通はOOPで対応する。
ただそれだと例にならないのでクエリがわざわざくっつけられているのだと思う。

377:デフォルトの名無しさん
16/08/27 22:43:28.66 yK/3tXKV.net
何の話を


378:してるのかなってちょっと上からレス読んでみたけど、 >>352の話ならShapeがDrawを持っても別に必ずしもおかしくないし、 持たせたくないならShapeで描画側が要求する描画に必要なデータを提供する 一連のメソッドやプロパティを定義しておけば済む話だよね。 描画側で型を見て分岐なんてどう贔屓目に見ても最悪のやり方にしか思えんね俺も。



379:デフォルトの名無しさん
16/08/27 23:01:52.80 gXVhUUHW.net
>>362
最初の4行は俺にはよく意味がわからないけどそれはまあいいとして、
>>329で多態が必要なのに>>352は拡張メソッドでいいというのは矛盾してるよ。
List<Shape>に入ってるものを全部Drawしたいとき、型ごとの拡張メソッドじゃ対応できないよ?
Shapeの外部にメソッドを定義しつつ多態相当の動作をさせたい、そのうえ明示的な型判定はダメというんなら、
引数をdynamicにキャストして強引に動的ディスパッチさせるみたいなことが必要。

380:デフォルトの名無しさん
16/08/27 23:02:26.56 ygls7M0s.net
>>363
おかしいかおかしくないかは場合による
このShapeが幾何学計算ライブラリのShapeだったらDrawはおかしい
図形描画用のライブラリならDrawがあってもおかしくないしなくてもおかしくない

381:デフォルトの名無しさん
16/08/27 23:10:16.02 vp5ltHnS.net
>>364
> List<Shape>に入ってるものを全部Drawしたいとき、型ごとの拡張メソッドじゃ対応できないよ?
出来るよ。というかそちららの認識が間違っていると思うが、
拡張メソッドはソース上では普通のメソッドと見た目は同じだよ。

382:デフォルトの名無しさん
16/08/27 23:15:37.10 ygls7M0s.net
>>366
ネタかマジかからかってるかわからないんだけど

383:デフォルトの名無しさん
16/08/27 23:18:51.07 gXVhUUHW.net
>>366
ほんとに?
URLリンク(ideone.com)
たまには自分の思い込みを疑ってみるのも大切だぞ

384:デフォルトの名無しさん
16/08/27 23:19:50.69 vp5ltHnS.net
>>364
>>367
いやこちらも意味不明なのだが。
逆に>>364の言う「メソッドでは対応出来るが拡張メソッドでは対応出来ない」ケースって出せるか?

385:デフォルトの名無しさん
16/08/27 23:28:42.22 vp5ltHnS.net
>>368
いやそれOOPじゃないと思うが、、、ただのオーバーロードだよね。

386:デフォルトの名無しさん
16/08/27 23:31:52.50 gXVhUUHW.net
>>370
だから俺は>>358からそう言ってるじゃん
拡張メソッドでは対応できないケースを示しただろ?

387:デフォルトの名無しさん
16/08/27 23:33:00.29 ygls7M0s.net
>>369
拡張メソッドにできない事、のシンプルな答えとして挙げるなら、インスタンスメソッドにはなれない、だな
それでもう終わりだろこの話
わからないなら入門書読み直してくれ

388:デフォルトの名無しさん
16/08/27 23:40:42.34 vp5ltHnS.net
>>371,372
まあ俺はC#erではないので拡張メソッドは使ったことがないし、
俺の理解が間違っている可能性もあるが、
MSDNの仕様書を見る限り、当たり前だがメソッドを拡張したように見せかけているのだと思うよ。
だからその場合は Rectangle と Circle に対して拡張メソッドを追加する。
これができないのならそちらの言うとおりだが、それだと拡張メソッドなんてゴミじゃん。
まあどのみち俺かそちらの仕様に対する勘違いだと思うので、この話はこれで終わりでいい。

389:デフォルトの名無しさん
16/08/27 23:48:05.17 vp5ltHnS.net
>>372
いや悪いがやっぱりそっちが間違ってるぞ。
拡張メソッドで普通にthisが取れてる。(引数の所に書く)
つかそうじゃないと意味無いだろ。
> public static int WordCount(this String str)
> {
> return str.Split(new char[] { ' ', '.', '?' },
> StringSplitOptions.RemoveEmptyEntries).Length;
> }
> URLリンク(msdn.microsoft.com)

390:デフォルトの名無しさん
16/08/28 00:08:50.44 s1SxoEZK.net
>>374
あんたにも分かるように説明してあげよう
拡張メソッドとは、HogeClass.func(x) を x.func() と書けるシンタックスシュガーである
そ れ だ け

391:デフォルトの名無しさん
16/08/28 00:15:50.55 zGC1w6Ia.net
>>365
だからそう言ってるでしょ。

392:デフォルトの名無しさん
16/08/28 00:17:10.42 +mkoP4gZ.net
>>375
それはオブジェクト指向がその意味でのシンタックスシュガーでしかないよ。
class構文が無かったCでも関数ポインタ+構造体で同じ事が出来たわけだし。
重要なのは拡張メソッドにthisが渡っていることだよ。
静的メソッド(クラスメソッド)にはthis使えないでしょ。
今回の例で言えば、宣言部分は以下になるということ。
ただしコンパイルが通るかどうかは知らんが。
通らないのなら君の言うとおり、通るのなら俺の言い分が正しいことになる。
public static void Draw(this Rectangle rect)
public static void Draw(this Circle circle)

393:デフォルトの名無しさん
16/08/28 00:19:39.62 UJTSRlJK.net
何で拡張メソッドってstaticクラスじゃないと定義出来ないんだ?
何か理由あるの?
別に制限はstaticメソッドだけでいいと思うけど
例えばString.IsNullOrEmpty(String)
もしstaticクラス以外に拡張メソッド定義出来たら
String.IsNullOrEmpty(this String)
みたいになって更に便利になると思うのに

394:デフォルトの名無しさん
16/08/28 00:21:24.05 hQF+q+Zk.net
そこのthisは単に拡張メソッドのマーク
通常のthisとは違う意味
拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
RectangleやCircleにキャストすることになる
そこで登場するのがパターンマッチングと

395:デフォルトの名無しさん
16/08/28 00:26:26.11 UJTSRlJK.net
今更変えるのは互換性的な問題で難しいだろうけど、
==演算子を等価演算子
===演算子を等値or不変インスタンスかつ等価演算子
にするべきだと思った
不変かは属性とかで定義して
Equalsメソッドとかいらねーだろ
==演算子と両方定義しろとかどうなってんだ

396:デフォルトの名無しさん
16/08/28 00:31:26.64 +mkoP4gZ.net
>>379
いや拡張メソッド内で自分自身のメンバを参照出来るよ。多分。
> 実際に、拡張メソッドは、それらが拡張している型のプライベート変数にはアクセスできません。
> URLリンク(msdn.microsoft.com)
普通に考えれば、わざわざプライベートは駄目って書いてある時点でpublicならいけるって事でしょ。
要するに外面的には Draw(circle) でしかないところを circle.Draw() と書けるだけでしかない。
その辻褄はコンパイラが合わせるけど、privateをpublicには出来ないのでこれは無理。
MSDNの説明には矛盾を感じないけど。

397:デフォルトの名無しさん
16/08/28 00:36:48.79 +mkoP4gZ.net
>>379
> 拡張メソッドは親クラスからは呼べないからそれを定義してもShapeクラスから直接呼べない
バインディングはコンパイル時だし、多分普通に呼べると思うよ。
というか呼べないと拡張にならないから、文法が違ったとしても何らかの呼び方は必ずあるはず。

398:デフォルトの名無しさん
16/08/28 00:37:11.60 zGC1w6Ia.net
>>380
EquqlsというかIEquatableが不要とは思わないけど、
VBと同じように参照等価検査専用の演算子を用意して、==はオーバーロードしないと
使えないようにしてくれた方が分かりやすかったね。

399:デフォルトの名無しさん
16/08/28 00:43:30.59 hQF+q+Zk.net
>>379
RectangleとCircleにDraw拡張メソッドが定義されているなら以下のようになる
void hoge( Shape shape )
{
//できない
//shape.Draw();
if(shape is Rectangle)((Rectangle)shape).Draw();
else if(shape is Circle)((Circle)shape).Draw();
}
拡張メソッドを呼び出すときにキャスト必須
「Shapeを継承したクラスはすべてDraw拡張メソッドを定義しなければならない」
という条件はかなり強引で、ヘタすればCLRや共通言語仕様にも手を入れなければいけない問題になる

400:デフォルトの名無しさん
16/08/28 00:45:09.67 s1SxoEZK.net
>>378
スコープが広がってルールが複雑になるから
例えばこういうときどうする?
/* ファイル1.cs */
namespace NS1 { class Hoge { public static void EX(this Hoge h) { … } }
/* ファイル2.cs */
namespace NS2 { class Test { public static void Main() { new NS1.Hoge().EX(); } } }
これ、現在の仕様から類推すればファイル2内ではNS1をusingしてないから
EXは拡張メソッドとして呼び出せないはずだけど、直感的には呼べた方が自然だと思わない?
それとか、拡張メソッドを含むクラスを別の名前空間のクラスが継承したらどうする?

401:デフォルトの名無しさん
16/08/28 00:59:15.28 hQF+q+Zk.net
>>382
拡張メソッドはコンパイラで解決しなきゃいけない
しかし、外部のDLLがShapeの子クラスを実装して、それを動的に読み込む可能性があるのでコンパイラでは解決不能
>オブジェクト指向がその意味でのシンタックスシュガーでしかないよ
そういうことを言ってるんじゃない
オブジェクト指向は共通言語仕様に書かれているのでILにその情報が残り、すべての言語が対応する
それに対しシンタックスシュガーはコンパイラの機能でILに完全には残らなかったり、属性をつけることで対応しているコンパイラのみが利用する

402:デフォルトの名無しさん
16/08/28 01:12:12.64 +mkoP4gZ.net
>>386
コンパイラ云々は俺は普通に出来ると思っているのだが、まあそれは置いておこう。
>>384
こちらを先にやろう。
> //できない
> //shape.Draw();
これって出来ないんだっけ?というかこちらは最近はJavaScript(型無し)でやっていて、
void hoge(var shape ) // var なので何でも入る
{
shape.Draw(); // 勝手に直近のvirtualが呼ばれる。
}
で普通にオーバーライドされたvirtualが呼べる(circle.drawなりrectangle.drawなり)から、
実際のC#での記述の仕方は知らない。
ただ、アップキャストしたらもう仮想関数は呼べません、ダウンキャストしてからにしてください、
だとOOPとしてはかなり無理があるから、自然なやり方がないわけ無いと思うけど。
だってその is 構文ってのも新しいんでしょ?
だったらそれがなかったこれまではOOPできませんでしたーってことになっちゃうじゃん。

403:デフォルトの名無しさん
16/08/28 01:32:13.31 hcj7YQtW.net
しつけえなあ
入門書ぐらい読んでからにしろよ
なんでど素人がそんな自信満々なんだよ

404:デフォルトの名無しさん
16/08/28 01:33:21.98 +mkoP4gZ.net
>>384
以下見る限り、virtual付けたら普通にOOPできるとしか読めないが。
てか当たり前だが。
引き数渡ししたら出来なくなるって事もないと思うけど。
> しかし、動的な型に基づいて呼び出されるメソッドを決定したい場合があります。
> (というより、ほとんどの場合、メソッド呼び出しは動的に決定した方が都合がいい。)
> 動的な型に基づいて呼び出されるメソッドを選びたい場合、
> 以下のように、 メソッドに virtual という修飾子を付けます。
> URLリンク(ufcpp.net)
その上にvirtual付けなかった場合も書いてあるから見比べれば分かると思うよ。

405:デフォルトの名無しさん
16/08/28 01:37:09.54 +mkoP4gZ.net
>>388
まあその通りだ。今は最新環境がないので試せない。
確かにこれ以上やっても意味無いので、後日最新環境で試せば良いだけだね。
「拡張メソッド」ってのに俺が夢を見すぎているのかもしれんし。

406:デフォルトの名無しさん
16/08/28 02:08:02.18 hQF+q+Zk.net
>>389
何度も行っているように、拡張メソッドではオーバーライドできない。
なぜなら拡張メソッドはただのC#限定のstaticメソッドのシンタックスシュガーに過ぎないから。
そのURLではどこにも拡張メソッドのことは書いてないでしょ
class Triangle : Shape{}
ってプラグインみたいに外部のDLLで宣言されて、それを動的に読み込んで、hogeに渡ってきたらどうするの?
外部のDLLのことなんてコンパイルの地点では知らないので存在しない拡張メソッドを呼べるはずがない。
夢を見すぎているんじゃなくて、ただ無知でC#とかCLIをよく理解してないだけだと思う
javascriptで言うならprototypeの存在も知らないでjavascriptはウンタラカンタラ言っている状態なので、基礎から学び直したほうがいい

407:デフォルトの名無しさん
16/08/28 08:45:51.40 UJTSRlJK.net
>>385
そういう事か…確かに面倒だな
それならnull可メソッド的な物を作ればいいんじゃない
public null void Hoge(){
  //thisがnullの可能性あり
}

408:デフォルトの名無しさん
16/08/28 09:58:20.62 +mkoP4gZ.net
>>391
試したぞ。VS


409:Community2015はサインインしないと使えなかったから、VS2008EEだが。 その範囲では確かに出来なかった。コードは以下ページを参考に改変した。 > http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=cs002_ExtensionMethods しかし理由は拡張メソッドがstaticだからだよ。以下コードで、 class SampleClass1 {} class SubClass : SampleClass1 {} static class hoo { static public void SampleExtensionMethod1(this SampleClass1 sampleClass1) { Console.WriteLine("super_ex"); } static public void SampleExtensionMethod2(this SampleClass1 sampleClass1) { Console.WriteLine("super_ex2"); } static public void SampleExtensionMethod1(this SubClass subClass) { Console.WriteLine("sub_ex"); } } static void test(SampleClass1 sampleClass1) { sampleClass1.SampleExtensionMethod1(); // (A) sampleClass1.SampleMethod1(); // (B) } static void test3(SubClass subClass) { subClass.SampleExtensionMethod2(); .// (C) }



410:デフォルトの名無しさん
16/08/28 09:59:05.95 +mkoP4gZ.net
(B)は通常メソッドで、SubClassが与えられると当然SubClassのメソッドが呼ばれる。
ただし(A)は常にSampleClass1(親クラスというより「そこに記述された」クラス)の拡張メソッドが呼ばれる。
なお(C)はSampleClass1の拡張メソッドが呼ばれる。
(つまり子→親に関しては辿れる)
(B)が動作する以上、thisポインタは正しく渡っている。
あとは拡張メソッド側に継承関係を明記し、実行時型でこれを解決すれば良いだけなのだけど、
C#はどうやら文法的にこれを禁止している。(技術的には全く問題なく出来るはず)
今回出来ないのは、拡張メソッドがstaticだからコンパイル時にそこにリンクされるからだ。
そこでvirtual指定してみたが、これはSyntacErrorで落ちる。
どうやらそれ以前にC#は静的クラスは継承禁止で、当然virtualには出来ない。
しかしそもそも静的クラスが継承出来ないのが問題だ。
何故これを禁止しなければならないのかは分からない。
結局>>378の「static縛り」或いは上記「staticクラスは継承出来ない」のが問題。
とはいえこの仕様では「拡張メソッド」がイマイチなのはC#開発側も認識出来るだろうから、
何らかの理由があってこの仕様なのだとは思うが。
したがって>>364の指摘どおり、
> >>329で多態が必要なのに>>352は拡張メソッドでいいというのは矛盾してるよ。
これは間違いだった。拡張メソッドが多態出来ないのは知らなかったから。
となると>>352
・Shapeクラスにメソッド追加---(α)
・GUI側でShapeクラスを継承したクラスを作って対応---(β)
>>384方式で is XXXX 形式で全部書く---(γ)
のどれかになるが、俺ならαかβであって、γはないね。

411:デフォルトの名無しさん
16/08/28 10:08:01.32 acJIbkh4.net
スクリプトコーダーらしいパフォーマンス無視の考え嫌いじゃないよ

412:デフォルトの名無しさん
16/08/28 10:18:04.05 +mkoP4gZ.net
釣りか?
仮想関数とif/switch分岐でのコストはC++の連中が死ぬほど議論しているが、
結論はどっちもほぼ同じだよ。
だからαもβもγも動作速度は大して変わらないはずだけど。
しかしそもそもC#ってパフォーマンス重視出来る言語じゃないよね。

413:デフォルトの名無しさん
16/08/28 10:21:51.48 acJIbkh4.net
>>396
そこじゃない

414:デフォルトの名無しさん
16/08/28 10:24:49.86 +mkoP4gZ.net
じゃあどこだよ?
てかチャットじゃねーんだから意見があるのなら分かるように書けよ

415:デフォルトの名無しさん
16/08/28 10:26:20.15 acJIbkh4.net
>>398
それ君が言うんだ?

416:デフォルトの名無しさん
16/08/28 10:32:20.35 1sBWhH04.net
>>396
>C#ってパフォーマンス重視出来る言語じゃないよね
これ免罪符に糞コード生み出す奴多いから困る

417:デフォルトの名無しさん
16/08/28 10:34:33.21 acJIbkh4.net
入門書も読まないスクリプトコーダーはdynamicでも使ってろってこった

418:デフォルトの名無しさん
16/08/28 11:04:12.58 h1JFz9az.net
ウザイから質問者と回答者以外が3行以上書いたら死刑な

419:デフォルトの名無しさん
16/08/28 12:58:05.84 0rJ/vUpY.net
ひょっとして結局拡張メソッドからは型の外のスコープからアクセスできるメンバーにしか
アクセスできない、っていう糞当たり前の話を延々やってだけなの?
そんなのちょっと我慢して拡張メソッドの解説記事を5分も読んだら猿でも分かる話だろw

420:デフォルトの名無しさん
16/08/28 13:59:05.59 ZfPDxmLp.net
フロントエンドコーダーってろくな人材いないよな

421:デフォルトの名無しさん
16/08/28 14:35:00.94 hQF+q+Zk.net
>>394
実行時に解決するのは非常にコストが高い。
多分仮想関数を理解してないんだと思うけど、静的メソッドはC++やC#の方式だと仮想関数テーブルに無いので仮想関数になり得ない
また、呼び出しに失敗する可能性があるというリスクがあり、静的型付け言語の良さを殺している
>そもそもC#ってパフォーマンス重視出来る言語じゃないよね。
大きな勘違い。Roslynとかではパフォーマンスをかなり重視してる。
実行時はネイティブコードになるので書き方によってはC++と同等の速度が出る。
(ただし、C++は危険な操作を行ったりできるのでその分有利)
>staticクラスは継承出来ない
なぜなら、staticクラスは「インスタンス化、継承できない」という指定付きのクラスだから。なぜintは数値しか表せないのかみたいな意味不明な主張
>・Shapeクラスにメソッド追加---(α)
Shapeクラスが汎用的に使ったり、ライブラリとして公開するクラスならどうしようもない
WPF、WinForms、Xamarinなど、プラットフォームによって描画方法は全然異なるのでDrawメソッドを決められない
>・GUI側でShapeクラスを継承したクラスを作って対応---(β)
手間が掛かり過ぎるし、構造体やsealedクラスなら継承はできない。
クラス内にフィールドで保持してもいいが、Int32WrapperとかStringWrapper、加えて列挙体や関数、タプルなんかのラッパークラスができて複雑に。
状況によってはInt32WrapperWrapperみたいなものも爆誕

422:デフォルトの名無しさん
16/08/28 14:43:51.29 hQF+q+Zk.net
普通にココらへんのリンクで十分か
URLリンク(www.buildinsider.net)

>GUI側でShapeクラスを継承したクラスを作って対応
これは構文解析ライブラリは継承前のクラスを返してくるわけだから、無理があった

423:デフォルトの名無しさん
16/08/28 14:55:35.63 14dFRx50.net
拡張メソッドで話がだいぶ逸れたけどなに話してたんだっけ

424:デフォルトの名無しさん
16/08/28 14:56:21.93 QOlzH7cc.net
できない君か

425:デフォルトの名無しさん
16/08/28 15:27:24.87 +mkoP4gZ.net
>>405
先に了解事項を書いておく。
> >staticクラスは継承出来ない
> なぜなら、それが定義だから(意訳)
これは了解。こちらも調べている限り、どうやらそのようだと分かった。
staticクラスはシングルトンの糖衣かと思っていたが、わざわざ別物を用意しているね。
> 静的クラスはシールされるため、継承できません。
> URLリンク(msdn.microsoft.com)
> staticクラスとSingletonでは以下の違いがあります。
> URLリンク(takachan.hatenablog.com)
したがって、疑問は何故staticクラスにしか拡張メソッドを置けないか、になり、
つまり>>378と同じで、そちらの見解は>>385というのもいい。
ただ俺はこの回答に納得しているわけではないが、
結局これはどこまでやるかということだから。


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

2402日前に更新/279 KB
担当:undef