探検
ふらっと C#,C♯,C#(初心者用) Part129 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワキゲー MMff-S7v4)
2017/06/09(金) 18:36:01.72ID:lNiKtgPwM「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part128
http://mevius.2ch.net/test/read.cgi/tech/1493730340/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
---
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
164デフォルトの名無しさん (アウアウカー Sa33-otAv)
2017/06/16(金) 22:46:38.91ID:BaZST6Yaa アルゴの性能差が顕著に出そうやなw
165デフォルトの名無しさん (ワッチョイ ba66-yC+1)
2017/06/16(金) 22:49:24.32ID:pyKmluG/0166デフォルトの名無しさん (ワッチョイ 4fe3-W9ZD)
2017/06/16(金) 23:06:59.57ID:e3V6DgTh0 >>153
軽い動画プレーヤー、軽い画像ビューア、アラーム時計、カレンダー
軽い動画プレーヤー、軽い画像ビューア、アラーム時計、カレンダー
167デフォルトの名無しさん (ワッチョイ e3dd-N71/)
2017/06/16(金) 23:20:32.11ID:G6Sd6q7a0 自炊した本の補正ツール
168デフォルトの名無しさん (ワッチョイ 538e-c+64)
2017/06/17(土) 04:24:32.54ID:N+Hb8N3C0 よろしければ、みなさんが初期に作成したVisualC#のアプリを教えてくださいませんか?
初学者で作れるのはどの程度のものなのか知りたいのです
本当は作りたいものを作るのがいいのでしょうが、どれも難度が高いため、完成させることによるモチベーションを適度に得たいのと、
参考書に載っているのはサンプルのためのサンプルみたいなものばかりで……
よろしければ実例を参考に「こういうのなら作りたいかも」というのを考えてみたいのですが、お願いできませんでしょうか?
初学者で作れるのはどの程度のものなのか知りたいのです
本当は作りたいものを作るのがいいのでしょうが、どれも難度が高いため、完成させることによるモチベーションを適度に得たいのと、
参考書に載っているのはサンプルのためのサンプルみたいなものばかりで……
よろしければ実例を参考に「こういうのなら作りたいかも」というのを考えてみたいのですが、お願いできませんでしょうか?
169デフォルトの名無しさん (ワッチョイ 164a-2Jtg)
2017/06/17(土) 05:24:34.32ID:IAjbbKvT0170デフォルトの名無しさん (ワッチョイ ba66-yC+1)
2017/06/17(土) 06:57:39.48ID:OHTO1ViL0 カメレオンベースの改造人間は高度すぎて初心者向けじゃねーな
171デフォルトの名無しさん (JP 0H9b-HMVo)
2017/06/17(土) 08:50:19.87ID:Pz+rULOlH172デフォルトの名無しさん (ワッチョイ 574b-2WTa)
2017/06/17(土) 08:54:44.36ID:UkHjy7lW0 >>168
モチベーションなんて人それぞれだから好きなものを作ればいいよ
モチベーションなんて人それぞれだから好きなものを作ればいいよ
173デフォルトの名無しさん (ワッチョイ eb00-yC+1)
2017/06/17(土) 09:10:51.87ID:zjPLEmpW0 >>168
電卓一択
電卓一択
174デフォルトの名無しさん (ワッチョイ 1693-wecc)
2017/06/17(土) 09:15:02.48ID:aTbxEjUL0 電卓とかテキストエディタとかブラウザとか絶対他社のものしか優れてるものしか作れないんだよな
175デフォルトの名無しさん (ワンミングク MMaa-QeqB)
2017/06/17(土) 09:18:47.13ID:LVtaY0YUM 普段めんどくさいなあくそったれと思ったらそれをメモすればいいじゃん
176デフォルトの名無しさん (ワッチョイ 536e-mug2)
2017/06/17(土) 09:35:00.48ID:cX5L/y8y0 自分じゃなくて他の人に目を向けたら?
世の中にはお前がちょっとクソコード書いてやれば解雇されるクソみたいな仕事してる奴が腐るほどいるんだぞ
世の中にはお前がちょっとクソコード書いてやれば解雇されるクソみたいな仕事してる奴が腐るほどいるんだぞ
177デフォルトの名無しさん (アウアウエー Saf2-4shY)
2017/06/17(土) 09:44:33.47ID:WmtHpkBVa >>168
GUIなら電卓は良いんじゃないかな。
おいらは何故か画像表示して、その上に落書きできる機能付けるのが定番だけど。
(ちゃんとWindow重なったり、拡大縮小で画像が消えないようにメモリ上にビットマップを保持して)
CUIだとcat -nと同じ、テキストを行番号付けて表示するって奴。
C#とかはIDE充実し過ぎだけど、LLとかだと自分専用テキストエディタとかモチベーション維持に良いかも。
GUIなら電卓は良いんじゃないかな。
おいらは何故か画像表示して、その上に落書きできる機能付けるのが定番だけど。
(ちゃんとWindow重なったり、拡大縮小で画像が消えないようにメモリ上にビットマップを保持して)
CUIだとcat -nと同じ、テキストを行番号付けて表示するって奴。
C#とかはIDE充実し過ぎだけど、LLとかだと自分専用テキストエディタとかモチベーション維持に良いかも。
178デフォルトの名無しさん (ワッチョイ 1693-wecc)
2017/06/17(土) 10:04:07.30ID:aTbxEjUL0 visual basicとC#って違うんですか?
179デフォルトの名無しさん (ワッチョイ ba66-yC+1)
2017/06/17(土) 10:09:41.93ID:OHTO1ViL0 出来ることはほぼ同じ。違いはソースコードの見た目が大部分
180デフォルトの名無しさん (ワッチョイ aea2-yC+1)
2017/06/17(土) 10:13:01.37ID:Vu9y7E7d0 C#が初めての言語って人ここは少ないだろう
CかJava経由じゃないかなあ
ちな、圧縮ファイル内の画像をリサイズアプリ
CかJava経由じゃないかなあ
ちな、圧縮ファイル内の画像をリサイズアプリ
181デフォルトの名無しさん (ワッチョイ 3a1b-IZXD)
2017/06/17(土) 10:19:41.45ID:oukwXZuM0 C#ならunsafeで出来ることがVBだと凄く面倒
182デフォルトの名無しさん (ワッチョイ 164a-2Jtg)
2017/06/17(土) 10:42:57.69ID:IAjbbKvT0 tryと打ってエンター押せばcatchもend tryも書いてくれるVB
それに比べてC♯は自分で書かなきゃならない。
それに比べてC♯は自分で書かなきゃならない。
183デフォルトの名無しさん (ワッチョイ 53c0-yC+1)
2017/06/17(土) 10:51:50.98ID:+efmFY/i0 >>182
それIDEの話だし、VSでもコードスニペットあるだろ
それIDEの話だし、VSでもコードスニペットあるだろ
184デフォルトの名無しさん (アウアウイー Saeb-YD8M)
2017/06/17(土) 11:16:13.23ID:0jHdEJ69a コードペニスット
185デフォルトの名無しさん (ワッチョイ 4fe3-W9ZD)
2017/06/17(土) 11:20:07.43ID:JDz+7Aqh0 >>168
まずデジタル時計、次に画像ビューア
慣れてきたらデジタル時計にアラームを付ける
そして文字色や背景色をダイアログで設定して変えられるようにするとかフォントも変えられるようにするとか
画像ビューアも自分が便利に使えるようにバージョンアップする
かなり慣れてきたら簡単なテキストエディタや簡単なブラウザを作ってみる
まずデジタル時計、次に画像ビューア
慣れてきたらデジタル時計にアラームを付ける
そして文字色や背景色をダイアログで設定して変えられるようにするとかフォントも変えられるようにするとか
画像ビューアも自分が便利に使えるようにバージョンアップする
かなり慣れてきたら簡単なテキストエディタや簡単なブラウザを作ってみる
186デフォルトの名無しさん (ワッチョイ bb11-VLdI)
2017/06/17(土) 11:28:08.65ID:Ff+eRTHW0 >>182
え、vsでtab2回押すのも面倒なの?
え、vsでtab2回押すのも面倒なの?
187デフォルトの名無しさん (ブーイモ MM97-/28B)
2017/06/17(土) 11:48:58.24ID:oj1+TyVBM DB連携のアドレス帳だな
188デフォルトの名無しさん (ワッチョイ bb11-NFrx)
2017/06/17(土) 11:53:05.95ID:P+HusDAs0 >>179
嘘教えんなよ
嘘教えんなよ
189デフォルトの名無しさん (ワッチョイ 536e-mug2)
2017/06/17(土) 12:00:00.23ID:cX5L/y8y0 C#はAWS LambdaやAzure Functionsでも使える
MSにすら捨てられてたVB
MSにすら捨てられてたVB
190デフォルトの名無しさん (アウアウカー Sa33-otAv)
2017/06/17(土) 12:28:42.76ID:25P2TRU/a フォームアプリで無限ループをまわすと画面が固まるので、ループ処理を別スレッドで行いたいのですが.NET4の環境でこれを行うのはどういう記述をすればいいのでしょうか
ボタン1を押して無限ループ処理開始
ボタン2を押して無限ループ処理停止
みたいな感じです。よろしくお願いします。
ボタン1を押して無限ループ処理開始
ボタン2を押して無限ループ処理停止
みたいな感じです。よろしくお願いします。
191デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/17(土) 12:35:29.47ID:mqhokTvga 非同期処理
async await
async await
192デフォルトの名無しさん (ブーイモ MM97-/28B)
2017/06/17(土) 12:42:32.90ID:oj1+TyVBM フォームアプリならbgwakerを使うのが楽では?
193デフォルトの名無しさん (ワッチョイ 5312-kYIN)
2017/06/17(土) 12:54:36.45ID:mQN0Gi2S0 >>190
bool cancelRequested;
async button1_Click()
{
button1.Enabled = false;
button2.Enabled = true;
cancelRequested = false;
await Task.Run( DoWork );
button1.Enabled = true;
button2.Enabled = false;
}
button2_Click()
{
cancelRequested = true;
}
void DoWork()
{
while( ! cancelRequested )
{
;
}
}
bool cancelRequested;
async button1_Click()
{
button1.Enabled = false;
button2.Enabled = true;
cancelRequested = false;
await Task.Run( DoWork );
button1.Enabled = true;
button2.Enabled = false;
}
button2_Click()
{
cancelRequested = true;
}
void DoWork()
{
while( ! cancelRequested )
{
;
}
}
194デフォルトの名無しさん (アウアウカー Sa33-otAv)
2017/06/17(土) 13:23:55.65ID:25P2TRU/a >>193
ありがとうございます
async/await
を使うと、GetAwaiterの定義が含まれておらず〜って出るのですがasync/awaitを使わずにTask.RUN(DoWork)のみでいいでしょうか
あと、Task.RUN(DoWork)とTask.Factory.StartNew(DoWork)は全く同一処理と思っていいでしょうか
ありがとうございます
async/await
を使うと、GetAwaiterの定義が含まれておらず〜って出るのですがasync/awaitを使わずにTask.RUN(DoWork)のみでいいでしょうか
あと、Task.RUN(DoWork)とTask.Factory.StartNew(DoWork)は全く同一処理と思っていいでしょうか
195デフォルトの名無しさん (ワッチョイ 5312-kYIN)
2017/06/17(土) 13:52:44.39ID:mQN0Gi2S0 >>194
修正版
http://ideone.com/1vh2bo
Task.RunとTask.Factory.StartNewは似てるけど、全く同じではないらしい。
MSDNのTaskFactory.StartNewの備考に書いてある。
今回の例ではどちらでも動くけど。
修正版
http://ideone.com/1vh2bo
Task.RunとTask.Factory.StartNewは似てるけど、全く同じではないらしい。
MSDNのTaskFactory.StartNewの備考に書いてある。
今回の例ではどちらでも動くけど。
196デフォルトの名無しさん (ワッチョイ ba66-yC+1)
2017/06/17(土) 13:57:47.94ID:OHTO1ViL0197デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/17(土) 13:57:55.77ID:zZ/nI29ta cancelRequestedはvolatileつけるかプロパティにしないとまずくない?
198デフォルトの名無しさん (ワッチョイ 536e-mug2)
2017/06/17(土) 13:59:20.60ID:cX5L/y8y0 boolなら問題ないよ
この場合、結果整合性があれば十分なはずだし
この場合、結果整合性があれば十分なはずだし
199デフォルトの名無しさん (ワッチョイ 4f96-2WTa)
2017/06/17(土) 14:04:47.83ID:n9iTrThT0 テキストボックスを何十個か保存する方法教えてください
プロパティで設定して
Properties.Settings.Default.aaaa = this.textBox0.Text;
と1つ1つ手動で保存する方法はわかるのですが
他に一括でできる方法ありませんか
プロパティで設定して
Properties.Settings.Default.aaaa = this.textBox0.Text;
と1つ1つ手動で保存する方法はわかるのですが
他に一括でできる方法ありませんか
200デフォルトの名無しさん (ワッチョイ 5312-kYIN)
2017/06/17(土) 14:09:52.65ID:mQN0Gi2S0 >>194
すまん。.Net4環境だと標準でawait/async使えないの忘れてた。
async/awaitを使わないバージョン
http://ideone.com/34GTJb
>>195でも>>196のを入れれば動くはずだけど。
すまん。.Net4環境だと標準でawait/async使えないの忘れてた。
async/awaitを使わないバージョン
http://ideone.com/34GTJb
>>195でも>>196のを入れれば動くはずだけど。
201デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/17(土) 14:16:32.15ID:zZ/nI29ta202デフォルトの名無しさん (アウアウカー Sa33-otAv)
2017/06/17(土) 14:17:41.38ID:25P2TRU/a203デフォルトの名無しさん (アウアウカー Sa33-otAv)
2017/06/17(土) 14:27:54.24ID:25P2TRU/a すみません。また勘違いでした
async/await使えませんでした
上のをいれてみたら使えました
async/await使えませんでした
上のをいれてみたら使えました
204デフォルトの名無しさん (ワッチョイ bb11-NFrx)
2017/06/17(土) 14:29:10.55ID:P+HusDAs0 >>202
なんでとっくにサポート切れの4.0使ってんの?
なんでとっくにサポート切れの4.0使ってんの?
205デフォルトの名無しさん (ワッチョイ 53c0-yC+1)
2017/06/17(土) 14:29:50.71ID:+efmFY/i0 .NET4.0はサポート外の環境だけど、意外と残っているんだよな
206デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/17(土) 15:21:51.02ID:CkD5o1Z0a207デフォルトの名無しさん (ワッチョイ 4f96-2WTa)
2017/06/17(土) 15:27:16.60ID:n9iTrThT0 >>206
その普通にというのがどうやるのかわかりません
その普通にというのがどうやるのかわかりません
208デフォルトの名無しさん (アウアウイー Saeb-YD8M)
2017/06/17(土) 15:32:15.49ID:EJsUF3+1a209デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/17(土) 16:42:38.11ID:CkD5o1Z0a210デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/17(土) 18:09:25.33ID:10Ix2VZLa >>199
あんまり使ったことないけど、バインディングしておけばいちいちアプリケーション設定を
ユーザーコードで読み書きする必要はなかったように思ったけど...
http://dobon.net/vb/dotnet/programing/dynamicproperties.html
あんまり使ったことないけど、バインディングしておけばいちいちアプリケーション設定を
ユーザーコードで読み書きする必要はなかったように思ったけど...
http://dobon.net/vb/dotnet/programing/dynamicproperties.html
211デフォルトの名無しさん (ワンミングク MMaa-QeqB)
2017/06/17(土) 19:20:12.04ID:BEwZTU1BM212デフォルトの名無しさん (ブーイモ MM06-VgqF)
2017/06/17(土) 19:43:42.82ID:KgLuH5ksM テキストボックスが何十個も並んでる時点で
俺は泣くと思う
そしてそれがちゃんとしたデータ構造に格納されてないことを知り号泣すると思う
そして10分でリファクタリングを終わらせコーヒーを飲む
俺は泣くと思う
そしてそれがちゃんとしたデータ構造に格納されてないことを知り号泣すると思う
そして10分でリファクタリングを終わらせコーヒーを飲む
213デフォルトの名無しさん (ワンミングク MMaa-QeqB)
2017/06/17(土) 19:51:50.19ID:fizf5E0aM 業務システムはそんなんばっかりだよね
1画面で事細かに大量に入力するのって疲れるだろうに
可能な限り入力を減らして楽しようとか
分割統治して脳の負担を減らそうって発想がないのだろうか
1画面で事細かに大量に入力するのって疲れるだろうに
可能な限り入力を減らして楽しようとか
分割統治して脳の負担を減らそうって発想がないのだろうか
214デフォルトの名無しさん (アウアウイー Saeb-YD8M)
2017/06/17(土) 19:54:04.63ID:TZ6VLTL7a やりたいことがExcelってことなら理解できるよ俺は
215デフォルトの名無しさん (ワッチョイ 4f96-2WTa)
2017/06/17(土) 20:18:40.56ID:n9iTrThT0 とりあえずstreamwiterと StreamReaderでテキストファイルに書き込んでやりたいことはできました
216デフォルトの名無しさん (ワッチョイ 6eca-XzLc)
2017/06/17(土) 21:09:28.32ID:LXfRrLne0 プログラミングはhello worldくらいしかやったことないゴミがc#を学習するのにいい書籍教えてください
猫でもわかるやつは評判見る限り私には無理そうなので
猫でもわかるやつは評判見る限り私には無理そうなので
217デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/17(土) 21:21:18.71ID:f5T73F7La ぶっちゃけ、C#「で」プログラミングに入門するってコンセプトの本はほとんどない気がする。
C#「に」入門する系の本もあんまり売れないのか最近は少ないよね
C#「に」入門する系の本もあんまり売れないのか最近は少ないよね
218デフォルトの名無しさん (ブーイモ MM97-/28B)
2017/06/17(土) 21:30:13.35ID:KwnIyY64M >>216
独習をちゃんと読めば割とレベル上がる
独習をちゃんと読めば割とレベル上がる
219デフォルトの名無しさん (オッペケ Srab-83yN)
2017/06/17(土) 21:33:17.28ID:Mj6DpfH2r C#は解りやすいからGoogle先生だけで何とかなった
220デフォルトの名無しさん (ブーイモ MM06-VgqF)
2017/06/17(土) 21:42:29.35ID:KgLuH5ksM >>218
お遍路ころがしか
お遍路ころがしか
221デフォルトの名無しさん (ワッチョイ 6eca-XzLc)
2017/06/17(土) 21:48:08.75ID:LXfRrLne0 どの書籍のレビュー見てもレベル1→2みたいな感じで私のようなレベル0対象の書籍がどれなのかわかりません
222デフォルトの名無しさん (アウアウイー Saeb-YD8M)
2017/06/17(土) 21:49:37.62ID:TZ6VLTL7a >>221
変数とか構造体やクラスの使い方が分かればレベル1でいいよ
変数とか構造体やクラスの使い方が分かればレベル1でいいよ
223デフォルトの名無しさん (ブーイモ MM06-VgqF)
2017/06/17(土) 21:50:29.15ID:KgLuH5ksM224デフォルトの名無しさん (アウアウイー Saeb-YD8M)
2017/06/17(土) 21:52:04.54ID:TZ6VLTL7a 本なんか買わなくていいよ
c# 作り方
でググれ
なんか気に入ったの見つけたら打って見ればいい
c# 作り方
でググれ
なんか気に入ったの見つけたら打って見ればいい
225デフォルトの名無しさん (ブーイモ MM06-VgqF)
2017/06/17(土) 21:55:50.37ID:KgLuH5ksM 地元の図書館はSwiftやGOやtype scriptやscalaの本が複数ある
226デフォルトの名無しさん (ワッチョイ bb11-NFrx)
2017/06/17(土) 21:56:12.88ID:P+HusDAs0 みんな優しいな
227デフォルトの名無しさん (ワッチョイ 4f0b-r2kx)
2017/06/17(土) 22:05:04.73ID:/RnpRH4O0 0からでいいのってあるのかいな・・・
228デフォルトの名無しさん (ブーイモ MM06-VgqF)
2017/06/17(土) 22:06:13.88ID:KgLuH5ksM WPFが腐れたので今はかなり入門しにくい環境にあるんだと思う
UWPで入門は地獄だし
UWPで入門は地獄だし
229デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/17(土) 22:12:34.98ID:f5T73F7La >>221
本当は遠回りでもちゃんと構造化プログラミングとOOPを
理解した方がいいんだけど、そういう趣旨の本はないね。
web上の記事だとなおさら少ない。
個人的には、ネットで十分とかいう奴は真に受けてはダメだと思うw
まあ、全部を網羅した本はないからいろいろザッピング気味に読んでみるのがいいんじゃないか。
図書館とか、ブックオフとかアマゾンの古本で十分だと思う。(さすがにC#2.0以前の
古いものは避けた方がいいかもしれんが...)
それでプログラミングの考え方がつかめるようになれば、
言語としてのC#やその新機能を調べるのはwebで十分だと思う
本当は遠回りでもちゃんと構造化プログラミングとOOPを
理解した方がいいんだけど、そういう趣旨の本はないね。
web上の記事だとなおさら少ない。
個人的には、ネットで十分とかいう奴は真に受けてはダメだと思うw
まあ、全部を網羅した本はないからいろいろザッピング気味に読んでみるのがいいんじゃないか。
図書館とか、ブックオフとかアマゾンの古本で十分だと思う。(さすがにC#2.0以前の
古いものは避けた方がいいかもしれんが...)
それでプログラミングの考え方がつかめるようになれば、
言語としてのC#やその新機能を調べるのはwebで十分だと思う
230デフォルトの名無しさん (ワンミングク MMaa-QeqB)
2017/06/17(土) 22:25:44.96ID:fizf5E0aM レベル0ならCLR via C#がオススメ
基礎的な内容をほぼ網羅してる
基礎的な内容をほぼ網羅してる
231デフォルトの名無しさん (ワッチョイ ae61-yC+1)
2017/06/17(土) 22:38:38.18ID:mmWGHNwB0232デフォルトの名無しさん (ワッチョイ e3f7-hsT2)
2017/06/17(土) 23:32:40.03ID:/Eb+eps20 俺は大学の情報学の図書館とか市の図書館で借りて勉強した
一度近くの図書館に行ってみるのはオススメ
一度近くの図書館に行ってみるのはオススメ
233デフォルトの名無しさん (ワッチョイ 574b-2WTa)
2017/06/17(土) 23:34:19.64ID:UkHjy7lW0 >>230
初心者に勧めるには少し難易度高すぎない?
初心者に勧めるには少し難易度高すぎない?
234デフォルトの名無しさん (ワッチョイ e3b1-yC+1)
2017/06/18(日) 00:26:44.91ID:HEHabn3K0 >>221
「作って覚えるVisual C# デスクトップアプリ入門」は、レベル0向けとしていいかもしれない。
この本は、文法などは簡単な説明で済まされてしまっているけど
書いてあるとおりに手を動かせば、初歩的なGUIアプリ(タイマーとか付箋アプリとか家計簿アプリとか)を
完成させることができた。
文法だけの本で勉強するのは苦行に感じるかもしれないので、まず実際に動くものを作れるのはいいと思う。
僕はC#2013年版を読んだけど、最新の「作って覚えるVisual C# 2017〜」もたぶん大きくは変わってないはず。
ただしこの本は、レベル0向けに分かりやすくするため、あえて説明を端折ったり、
説明しやすくするためにあまり一般的じゃないやり方が書いてあるところもあるように思う。
勘のいい人だと、この本を足掛かりにWebの情報だけでどんどん先に進めるだろうけど、
どうも応用が利かないと思ったら、独習C#といった文法の本を改めて勉強すればいいんじゃないだろうか。
「作って覚えるVisual C# デスクトップアプリ入門」は、レベル0向けとしていいかもしれない。
この本は、文法などは簡単な説明で済まされてしまっているけど
書いてあるとおりに手を動かせば、初歩的なGUIアプリ(タイマーとか付箋アプリとか家計簿アプリとか)を
完成させることができた。
文法だけの本で勉強するのは苦行に感じるかもしれないので、まず実際に動くものを作れるのはいいと思う。
僕はC#2013年版を読んだけど、最新の「作って覚えるVisual C# 2017〜」もたぶん大きくは変わってないはず。
ただしこの本は、レベル0向けに分かりやすくするため、あえて説明を端折ったり、
説明しやすくするためにあまり一般的じゃないやり方が書いてあるところもあるように思う。
勘のいい人だと、この本を足掛かりにWebの情報だけでどんどん先に進めるだろうけど、
どうも応用が利かないと思ったら、独習C#といった文法の本を改めて勉強すればいいんじゃないだろうか。
235デフォルトの名無しさん (ワンミングク MMaa-QeqB)
2017/06/18(日) 00:44:54.96ID:LYHl+wocM 読者が初心者だからって変なこと教えたり誤魔化したりする入門書は捨てていい
嘘をつかないこと
包み隠さず詳細まで書いてあること
これが良い参考書の必要条件だ
嘘をつかないこと
包み隠さず詳細まで書いてあること
これが良い参考書の必要条件だ
236デフォルトの名無しさん (JP 0H9b-HMVo)
2017/06/18(日) 01:33:04.85ID:rNmQ8rlgH つーかレベル0ってのが変数って何?とかプログラム制御でお決まりのif〜thenとか
forループとか、サブルーチンへ飛んでreturnで戻るとか、その辺りのほんとの初歩の
知識がないってことなら、そういうの解説したC#版入門本・サイトってあるのかね?
そのへんって常識として押さえてないようだと、挫折する可能性高いと思う
forループとか、サブルーチンへ飛んでreturnで戻るとか、その辺りのほんとの初歩の
知識がないってことなら、そういうの解説したC#版入門本・サイトってあるのかね?
そのへんって常識として押さえてないようだと、挫折する可能性高いと思う
237デフォルトの名無しさん (ワッチョイ 5732-2WTa)
2017/06/18(日) 02:04:31.00ID:ifJ7nIy80 webbrowserを使用したソフトを作っているのですが、
デフォルトだと音量が大きすぎるので音量設定で変更したいのですが、
ミキサーの音量とかってどうやって設定するか探してみたのですが見つかりませんでした。
何かいい方法はないでしょうか?
デフォルトだと音量が大きすぎるので音量設定で変更したいのですが、
ミキサーの音量とかってどうやって設定するか探してみたのですが見つかりませんでした。
何かいい方法はないでしょうか?
238デフォルトの名無しさん (アウアウイー Saeb-YD8M)
2017/06/18(日) 03:53:50.02ID:bj+pilWTa239デフォルトの名無しさん (ワッチョイ 5732-2WTa)
2017/06/18(日) 05:02:45.88ID:ifJ7nIy80 それもそうですね・・・
ユーザーに任せるとします
ユーザーに任せるとします
240デフォルトの名無しさん (ワッチョイ 8bbe-2WTa)
2017/06/18(日) 11:31:27.68ID:3NNsYvIS0 質問させてください。
本やネットに載っているサンプルをまねて、下記のようなMyCollection<T>クラスを作りました。
public class MyCollection<T> : IEnumerable<T>
{
List<T> list;
public MyCollection()
{ list = new List<T>(); }
public void AddObject(T item)
{ list.Add(item); }
public IEnumerator<T> GetEnumerator()
{ for (int i = 0; i < list.Count; i++) yield return list[i]; }
IEnumerator IEnumerable.GetEnumerator()
{ return this.GetEnumerator(); }
}
このクラスでは、非ジェネリック版のGetEnumerator()は、インターフェイスIEnumerableを明示的に実装しています。
(サンプルがそうなってたのでそうしています。)
== 続く ==
本やネットに載っているサンプルをまねて、下記のようなMyCollection<T>クラスを作りました。
public class MyCollection<T> : IEnumerable<T>
{
List<T> list;
public MyCollection()
{ list = new List<T>(); }
public void AddObject(T item)
{ list.Add(item); }
public IEnumerator<T> GetEnumerator()
{ for (int i = 0; i < list.Count; i++) yield return list[i]; }
IEnumerator IEnumerable.GetEnumerator()
{ return this.GetEnumerator(); }
}
このクラスでは、非ジェネリック版のGetEnumerator()は、インターフェイスIEnumerableを明示的に実装しています。
(サンプルがそうなってたのでそうしています。)
== 続く ==
241240 (ワッチョイ 8bbe-2WTa)
2017/06/18(日) 11:32:03.36ID:3NNsYvIS0 == 続き ==
で、この非ジェネリック版のGetEnumerator()はどんなときに呼ばれるんだろう?と思い、試しに無理やり
呼んでみようと、下のように非ジェネリックなIEnumerator iを経由してMoveNext()をコールしてみました。
しかし、デバッガで見る限り、ジェネリック版のほうのGetEnumerator()が呼ばれるようです。
MyCollection<int> collection = new MyCollection<int>();
collection.AddObject(0);
collection.AddObject(1);
collection.AddObject(2);
//IEnumerator<int> i = collection.GetEnumerator();
IEnumerator i = collection.GetEnumerator();
while (i.MoveNext())
{ var j = i.Current; Console.WriteLine(j); }
ここで質問なのですが、
(1) 上記のコードで、どうして非ジェネリック版のGetEnumerator()が呼ばれないのか?
(2) どんなときに呼ばれるのか?
(3) 上記のコードでは、非ジェネリック版のGetEnumerator()の中からジェネリック版のGetEnumerator()を
呼んでいるが、両者は戻り値が異なる(IEnumerator<T>とIEnumerator)のに、なぜそんなことができるのか?
以上、よろしくお願いします。
で、この非ジェネリック版のGetEnumerator()はどんなときに呼ばれるんだろう?と思い、試しに無理やり
呼んでみようと、下のように非ジェネリックなIEnumerator iを経由してMoveNext()をコールしてみました。
しかし、デバッガで見る限り、ジェネリック版のほうのGetEnumerator()が呼ばれるようです。
MyCollection<int> collection = new MyCollection<int>();
collection.AddObject(0);
collection.AddObject(1);
collection.AddObject(2);
//IEnumerator<int> i = collection.GetEnumerator();
IEnumerator i = collection.GetEnumerator();
while (i.MoveNext())
{ var j = i.Current; Console.WriteLine(j); }
ここで質問なのですが、
(1) 上記のコードで、どうして非ジェネリック版のGetEnumerator()が呼ばれないのか?
(2) どんなときに呼ばれるのか?
(3) 上記のコードでは、非ジェネリック版のGetEnumerator()の中からジェネリック版のGetEnumerator()を
呼んでいるが、両者は戻り値が異なる(IEnumerator<T>とIEnumerator)のに、なぜそんなことができるのか?
以上、よろしくお願いします。
242デフォルトの名無しさん (ブーイモ MMda-mug2)
2017/06/18(日) 11:37:58.02ID:F94toio2M >>241
1) C#に戻り値の型に応じた型推論はないから
2) collectionをIEnumerableにキャストしてから3) GetEnumeratorすれば非ジェネリックの方を呼べる
IEnumerator<>はIEnumeratorを継承しているから
1) C#に戻り値の型に応じた型推論はないから
2) collectionをIEnumerableにキャストしてから3) GetEnumeratorすれば非ジェネリックの方を呼べる
IEnumerator<>はIEnumeratorを継承しているから
243デフォルトの名無しさん (ワッチョイ ba66-yC+1)
2017/06/18(日) 12:41:44.72ID:xQzWj2hP0 >>239
一応ミキサーをコントロールするAPIがVistaのときに出来て、それを制御するソフトがCodeProjectに揚がっていたよ
一応ミキサーをコントロールするAPIがVistaのときに出来て、それを制御するソフトがCodeProjectに揚がっていたよ
244240 (ワッチョイ 8bbe-2WTa)
2017/06/18(日) 13:14:15.29ID:3NNsYvIS0 早速の回答ありがとうございます。
いただいた回答をもとに色々考えましたが、何か釈然としない部分が残っています。
先のコードの、
IEnumerator i = collection.GetEnumerator(); // @
i.MoveNext() // A
の部分は、下記のような動作と考えていいのでしょうか?
@について:
・collectionはMyCollection<int>型である。
・よって、collection.GetEnumerator()のGetEnumerator()はジェネリック版のほうを意味し、
その戻り値はIEnumerator<T>型である。
・IEnumerator<T>型である戻り値が、IEnumerator型の変数iに入る。
・IEnumerator<T>型の値を、IEnumerator型の変数に入れられる理由は、
「IEnumerator<>はIEnumeratorを継承しているから」。
Aについて:
・i.MoveNext()により、実際にGetEnumerator()が呼ばれる。
・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、
ジェネリック版のGetEnumerator()のほう。
以上の動作は、
インターフェイスI1をI2が継承するとして、
I2型の値をI1型の変数に入れて、I1型の変数経由で、I2にしかないメソッドを呼んでいるように見えます。
(I2にしかないメソッドとは、今回の例ではジェネリック版GetEnumerator()のことです)
== 続く ==
いただいた回答をもとに色々考えましたが、何か釈然としない部分が残っています。
先のコードの、
IEnumerator i = collection.GetEnumerator(); // @
i.MoveNext() // A
の部分は、下記のような動作と考えていいのでしょうか?
@について:
・collectionはMyCollection<int>型である。
・よって、collection.GetEnumerator()のGetEnumerator()はジェネリック版のほうを意味し、
その戻り値はIEnumerator<T>型である。
・IEnumerator<T>型である戻り値が、IEnumerator型の変数iに入る。
・IEnumerator<T>型の値を、IEnumerator型の変数に入れられる理由は、
「IEnumerator<>はIEnumeratorを継承しているから」。
Aについて:
・i.MoveNext()により、実際にGetEnumerator()が呼ばれる。
・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、
ジェネリック版のGetEnumerator()のほう。
以上の動作は、
インターフェイスI1をI2が継承するとして、
I2型の値をI1型の変数に入れて、I1型の変数経由で、I2にしかないメソッドを呼んでいるように見えます。
(I2にしかないメソッドとは、今回の例ではジェネリック版GetEnumerator()のことです)
== 続く ==
245240 (ワッチョイ 8bbe-2WTa)
2017/06/18(日) 13:14:32.67ID:3NNsYvIS0 == 続き ==
しかし例えば、
interface I1 { void Method1(); }
interface I2 : I1 { void Method2(); }
class C1 : I2
{
public void Method1() { Console.WriteLine("1"); }
public void Method2() { Console.WriteLine("2");}
}
以上のようなインターフェースとクラスに対して、
I2 i2 = new C1();
I1 i1 = i2;
i1.Method1(); // OK
//i1.Method2(); // エラー
以上のようにしてi1経由でi2にしかないメソッドを呼ぼうとすると、エラーになります。
これはどうしてなのでしょうか?
(長文ですみません)
しかし例えば、
interface I1 { void Method1(); }
interface I2 : I1 { void Method2(); }
class C1 : I2
{
public void Method1() { Console.WriteLine("1"); }
public void Method2() { Console.WriteLine("2");}
}
以上のようなインターフェースとクラスに対して、
I2 i2 = new C1();
I1 i1 = i2;
i1.Method1(); // OK
//i1.Method2(); // エラー
以上のようにしてi1経由でi2にしかないメソッドを呼ぼうとすると、エラーになります。
これはどうしてなのでしょうか?
(長文ですみません)
246デフォルトの名無しさん (ブーイモ MMaf-mug2)
2017/06/18(日) 13:36:20.31ID:hiI5kOBPM どこでI2にしかないメソッドを呼んでいるように見えるのかわからん
iにはジェネリックGetEnumeratorの戻り値であるIEnumerator<>オブジェクトが入る
i.MoveNextは非ジェネリックのIEnumerableのメンバたけどIEnumerable<>のメンバでもある
なぜならIEnumerable<>はIEnumerableのMoveNextを継承しているから
iにはジェネリックGetEnumeratorの戻り値であるIEnumerator<>オブジェクトが入る
i.MoveNextは非ジェネリックのIEnumerableのメンバたけどIEnumerable<>のメンバでもある
なぜならIEnumerable<>はIEnumerableのMoveNextを継承しているから
247デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/18(日) 13:47:39.71ID:CKbpnobma >i.MoveNext()により、実際にGetEnumerator()が呼ばれる。
ここは何か勘違いしているというか、何を言ってるのか分からないというか...
C#は静的型付けの言語なので、I1型の変数i1のメンバーへのアクセスとして
記述可能なのは、I1型のメンバーだけ。
i1には実際はI2型の値が入ってるんだからI2のメンバーも呼び出せるべきだとか言ったって、
実行時にi1にI2型の値が入ってるかどうかなんてコンパイル時にはコンパイラに分かりません
ここは何か勘違いしているというか、何を言ってるのか分からないというか...
C#は静的型付けの言語なので、I1型の変数i1のメンバーへのアクセスとして
記述可能なのは、I1型のメンバーだけ。
i1には実際はI2型の値が入ってるんだからI2のメンバーも呼び出せるべきだとか言ったって、
実行時にi1にI2型の値が入ってるかどうかなんてコンパイル時にはコンパイラに分かりません
248デフォルトの名無しさん (ブーイモ MM06-VgqF)
2017/06/18(日) 14:20:22.43ID:sWt6I29PM >>244
実装はどうなってるか知らないけど
同名のメソッドを継承でオーバーライドされたらそっちのメソッドが呼ばれる
非ジェネリックメソッドをジェネリックでオーバーライドしてたら
ジェネリック版が呼ばれる
それが下位のInterfaceで操作された場合でも
実装はどうなってるか知らないけど
同名のメソッドを継承でオーバーライドされたらそっちのメソッドが呼ばれる
非ジェネリックメソッドをジェネリックでオーバーライドしてたら
ジェネリック版が呼ばれる
それが下位のInterfaceで操作された場合でも
249デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/18(日) 14:26:19.82ID:CKbpnobma おいおい、質問者のケースはインターフェイスの継承だから
オーバーライドなんかされてないってw
オーバーライドなんかされてないってw
250デフォルトの名無しさん (ワッチョイ efe0-LlRF)
2017/06/18(日) 14:34:17.42ID:dIx7/lbV0 > ・i.MoveNext()により、実際にGetEnumerator()が呼ばれる。
?
GetEnumeratorはここではもう関係ない
iという少なくともIEnumeratorを実装しているオブジェクトのMoveNextを呼び出してるだけ
> ・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、
ジェネリック版のGetEnumerator()のほう。
なんでGetEnumeratorがでてくんの?
IEnumerator<T>のMoveNextっていうなら分からんでもないけど
?
GetEnumeratorはここではもう関係ない
iという少なくともIEnumeratorを実装しているオブジェクトのMoveNextを呼び出してるだけ
> ・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、
ジェネリック版のGetEnumerator()のほう。
なんでGetEnumeratorがでてくんの?
IEnumerator<T>のMoveNextっていうなら分からんでもないけど
251デフォルトの名無しさん (ワッチョイ ba66-VgqF)
2017/06/18(日) 14:53:44.56ID:Hoh12jc00 おそらくyieldで記述と実行の順序が見た目と異なる事を言ってるんだろうけど
明示的なインターフェイスの実装は最初のレスでも有るように(IEnumerable)collectionの時に呼ばれるだけであって
結局はIEnumerator<T> GetEnumerator()へのラッパーだし、IEnumeratorに入れようがインターフェイスは全て仮想呼び出しだし
もはやジェネリックがどうとか関係ないな
明示的なインターフェイスの実装は最初のレスでも有るように(IEnumerable)collectionの時に呼ばれるだけであって
結局はIEnumerator<T> GetEnumerator()へのラッパーだし、IEnumeratorに入れようがインターフェイスは全て仮想呼び出しだし
もはやジェネリックがどうとか関係ないな
252デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/18(日) 15:49:10.59ID:fcq/NEcZa >>244
@でジェネリック版のIEnumerator(を実装したクラスのインスタンス≠MyCollection<int>)を返している
AではそいつのMoveNextを普通に呼んでるだけ
そこで渡されているIEnumeratorの仕様に沿ったオブジェクトは
MyCollection<int>と別のクラスというのが
間違えやすいポイント
public IEnumerator<T> GetEnumerator()の
ジェネリック版のyield returnを含んだブロックから全然別のクラスが生成されていて
そいつのインスタンスが渡されている
@でジェネリック版のIEnumerator(を実装したクラスのインスタンス≠MyCollection<int>)を返している
AではそいつのMoveNextを普通に呼んでるだけ
そこで渡されているIEnumeratorの仕様に沿ったオブジェクトは
MyCollection<int>と別のクラスというのが
間違えやすいポイント
public IEnumerator<T> GetEnumerator()の
ジェネリック版のyield returnを含んだブロックから全然別のクラスが生成されていて
そいつのインスタンスが渡されている
253デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/18(日) 15:53:23.46ID:fcq/NEcZa デバッグでステップすると
public IEnumerator<T> GetEnumerator()の中を動いてるけど
実際は別のクラスが作られていてその中を実行してる
このクラスはコンパイル時に自動実装される
以前は別クラスを自分で作らなければならなかったけど
yield returnが実装されてから楽になった
public IEnumerator<T> GetEnumerator()の中を動いてるけど
実際は別のクラスが作られていてその中を実行してる
このクラスはコンパイル時に自動実装される
以前は別クラスを自分で作らなければならなかったけど
yield returnが実装されてから楽になった
254240 (ワッチョイ 8bbe-2WTa)
2017/06/18(日) 17:54:39.05ID:3NNsYvIS0 たくさんの回答ありがとうございます。
「i.MoveNext()により、実際にGetEnumerator()が呼ばれる」と思った理由は、>>253が書いてくれてるように、
デバッガでステップ実行すると、MoveNext()を呼んだタイミングでGetEnumerator()の中に入っていくためです。
皆のおかげで、その考えが誤りであることがわかりました。
ただ、
IEnumerator i = collection.GetEnumerator(); // @
i.MoveNext() // A
については、まだイマイチ自信がないんですが…。
全員のレスをつなぎ合わせて、下記のように理解したのですが、あってますでしょうか?
@で、
・GetEnumerator()により、ジェネリック版IEnumerator<T>を実装したクラスのインスタンスが生成される
・そのクラスは、ジェネリック用と非ジェネリック用の2つのMoveNext()を持つ
(IEnumerator<T>はIEnumeratorを継承しているため、両方のMoveNext()が作られる)
・ジェネリック用のMoveNext()の内容は、ジェネリック版のyield returnブロックから生成される
・非ジェネリック用のMoveNext()は、ジェネリック版のMoveNext()のラッパーである
Aで、
・iは非ジェネリックのIEnumeratorなので、非ジェネリック用のMoveNext()が呼ばれる
・それにより、ラップされているジェネリック用のMoveNext()が呼ばれ、結果として、
「ジェネリック版のyield returnブロックから生成された処理」が呼ばれる。
以上、よろしくお願いします。
「i.MoveNext()により、実際にGetEnumerator()が呼ばれる」と思った理由は、>>253が書いてくれてるように、
デバッガでステップ実行すると、MoveNext()を呼んだタイミングでGetEnumerator()の中に入っていくためです。
皆のおかげで、その考えが誤りであることがわかりました。
ただ、
IEnumerator i = collection.GetEnumerator(); // @
i.MoveNext() // A
については、まだイマイチ自信がないんですが…。
全員のレスをつなぎ合わせて、下記のように理解したのですが、あってますでしょうか?
@で、
・GetEnumerator()により、ジェネリック版IEnumerator<T>を実装したクラスのインスタンスが生成される
・そのクラスは、ジェネリック用と非ジェネリック用の2つのMoveNext()を持つ
(IEnumerator<T>はIEnumeratorを継承しているため、両方のMoveNext()が作られる)
・ジェネリック用のMoveNext()の内容は、ジェネリック版のyield returnブロックから生成される
・非ジェネリック用のMoveNext()は、ジェネリック版のMoveNext()のラッパーである
Aで、
・iは非ジェネリックのIEnumeratorなので、非ジェネリック用のMoveNext()が呼ばれる
・それにより、ラップされているジェネリック用のMoveNext()が呼ばれ、結果として、
「ジェネリック版のyield returnブロックから生成された処理」が呼ばれる。
以上、よろしくお願いします。
255デフォルトの名無しさん (ブーイモ MMaf-mug2)
2017/06/18(日) 18:01:08.18ID:kXxrIi51M256デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/18(日) 18:22:19.50ID:CKbpnobma いやいや、「ラッパー」って言葉を誤用している点を除けば質問者の>>254の方が正しいからw
現実のほとんどの実装ではIEnumerator.MoveNextは
IEnumerator<T>.MoveNextをそのまま呼ぶだろうけど、
やろうと思えば別の実装をすることだって可能に決まってる
現実のほとんどの実装ではIEnumerator.MoveNextは
IEnumerator<T>.MoveNextをそのまま呼ぶだろうけど、
やろうと思えば別の実装をすることだって可能に決まってる
257デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/18(日) 18:40:25.49ID:jItXXYfIa >>254
素直に考えてほしい
@で iに入れたのはジェネリック版
A movenextはジェネリックでも非ジェネリックでも共通
>>256
残念だけどこれを読むように
https://msdn.microsoft.com/ja-jp/library/78dfe2yb(v=vs.110).aspx
素直に考えてほしい
@で iに入れたのはジェネリック版
A movenextはジェネリックでも非ジェネリックでも共通
>>256
残念だけどこれを読むように
https://msdn.microsoft.com/ja-jp/library/78dfe2yb(v=vs.110).aspx
258デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/18(日) 18:57:24.62ID:CKbpnobma259デフォルトの名無しさん (ワッチョイ efe0-LlRF)
2017/06/18(日) 19:03:33.17ID:dIx7/lbV0 共通って言うとなんか分かりづらい
オーバーライドなんて257は一言も言ってないようだが…
interface IEnumerator {
object Current { get; }
bool MoveNext();
void Reset();
}
interface IEnumerator<T> : IEnumerator, IDisposable {
new T Current { get; }
void Dispose();
}
IEnumerator<T>自体はMoveNextを定義しない
派生元のMoveNextをそのまま公開する
なので、IEnumerator<T>の実装はこんなんになる
class HogeEnumerator : IEnumerator<T> {
public T Current { get { 略 } }
object IEnumerator.Current { get { return this.Current; } }
public bool MoveNext() { 略 }
public void Dispose() { 略 }
}
なので、
IEnumerator<T> ia = obj.GetEnumerator();
IEnumerator ib = obj.GetEnumerator();
iaでもibでも同じMoveNextが呼び出される
オーバーライドなんて257は一言も言ってないようだが…
interface IEnumerator {
object Current { get; }
bool MoveNext();
void Reset();
}
interface IEnumerator<T> : IEnumerator, IDisposable {
new T Current { get; }
void Dispose();
}
IEnumerator<T>自体はMoveNextを定義しない
派生元のMoveNextをそのまま公開する
なので、IEnumerator<T>の実装はこんなんになる
class HogeEnumerator : IEnumerator<T> {
public T Current { get { 略 } }
object IEnumerator.Current { get { return this.Current; } }
public bool MoveNext() { 略 }
public void Dispose() { 略 }
}
なので、
IEnumerator<T> ia = obj.GetEnumerator();
IEnumerator ib = obj.GetEnumerator();
iaでもibでも同じMoveNextが呼び出される
260デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/18(日) 19:06:45.73ID:jItXXYfIa >>258
誰もそんなことについて言ってるのではないよ
トンチンカンなレスありがとう
MoveNextは別々に必要ない
そもそもシグネチャーは一個だけだから
必要なのは一個だけだと言うこと
さっきのページの変な訳を見てよく考えてほしい
誰もそんなことについて言ってるのではないよ
トンチンカンなレスありがとう
MoveNextは別々に必要ない
そもそもシグネチャーは一個だけだから
必要なのは一個だけだと言うこと
さっきのページの変な訳を見てよく考えてほしい
261デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/18(日) 19:09:56.48ID:CKbpnobma262デフォルトの名無しさん (アウアウイー Saeb-jmzv)
2017/06/18(日) 19:11:42.21ID:CKbpnobma しかしあれだ、「ほとんどの実装でそうなっている」ことと、「必然的にそうなりそれ以外の実装はありえない」
ことの区別のつかないレベルの人が偉そうに回答する側に回ってはダメだと思うw
ことの区別のつかないレベルの人が偉そうに回答する側に回ってはダメだと思うw
263デフォルトの名無しさん (アウアウウー Sa77-VgqF)
2017/06/18(日) 19:11:59.22ID:jItXXYfIa >>261
さっきのページの説明とコードをぜひ読んでほしい
さっきのページの説明とコードをぜひ読んでほしい
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【テレビ】25年ぶり復活「炎のチャレンジャー」南原清隆&菊池風磨がMC 懐かし「電流イライラ棒」も [湛然★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- ( ・᷄ὢ・᷅ )あ?
- 安価でセブンイレブンの商品買いに行く
- ブタをぶったたく
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 高市総理、睡眠時間30分😢
- 【速報】高市早苗、起床 [779938112]
