1 名前:デフォルトの名無しさん mailto:sage [2018/08/05(日) 19:55:44.50 ID:tZmoj8I+.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part93 https://mevius.5ch.net/test/read.cgi/tech/1492818720/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part138 https://mevius.5ch.net/test/read.cgi/tech/1528194762/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/ja-jp/library/gg145045.aspx https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/
159 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 18:44:47.51 ID:h3eX92xO.net] >>134 >>136 ありがとうございます。やってみます
160 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:20:46.35 ID:s18ZTF9u.net] >>150 マジで底辺のリーダーってこんなんがほとんどなの?こええ
161 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:36:31.86 ID:n2aXOJxU.net] staticなナントカUtilクラスはJavaドカが好むよねー staticなのに内部でインフラ異存しまくっててキレそうになるよ
162 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:32:41.02 ID:KbP5R+D4.net] 失礼します。 ASP.NET MVC又はASP.NET MVC CoreのRazorビューから匿名型がサポートされない理由を説明してくださる方居ますか?
163 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:36:20.82 ID:usF07bpd.net] >>156 これのこと? https://stackoverflow.com/questions/5120317/dynamic-anonymous-type-in-razor-causes-runtimebinderexception
164 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 00:04:54.82 ID:K7SavMc/.net] >>157 はい。 .frameworkがpoorなのでサポート出来ない事が私には理解できません。 こちらのurlの記事では普通にプロパティで取得出来ているように見えますが… architect-wat.hatenablog.jp/entry/20130501/1367415654
165 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:58:42.90 ID:uF3Ar+0r.net] >>158 匿名型なんて使わなきゃいい
166 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 19:34:07.64 ID:ZJ6IWHAy.net] c#アプリって簡単に逆コンパイルで簡単にソース見れちゃうじゃん? 例えばAPIキーとかハードコーディングしてもしてなくても抜き出せてしまうけどどうすんの?
167 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 19:41:36.20 ID:ajbZjNWE.net] >>160 リバースエンジニアリングはどのくらいの労力がかかるかだけの違いで解析できないものなんかないから諦めろ
168 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 19:57:01.93 ID:Z58Bgt4H.net] >>160 ハッシュ値使うねん
169 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 20:08:24.14 ID:6fvgv2wi.net] >>162 ハッシュからAPIキーは復元できないでしょ
170 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 20:21:29.85 ID:nj06+sqx.net] >>160 環境変数
171 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 20:50:49.58 ID:J4BiRy9W.net] 200週くらい周回遅れの話題だ
172 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 21:51:49.34 ID:uGtRYhlb.net] >>163 間接的に別なのから取得するとか
173 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 21:53:27.00 ID:Y3DnwOBx.net] >>165 結論はどうなってるの? どうしようもない?
174 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 21:53:40.13 ID:Y3DnwOBx.net] >>166 どういうこと?
175 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 09:06:38.21 ID:mvt+Dc+2.net] >>159 問題はEFで匿名型が簡単に作られてしまうのが問題ですね。 結局expandoobjectに変換するか、ViewModelを毎回作るしか無さそうですね。
176 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 09:44:13.36 ID:O9adGcKd.net] >>167 要件による サーバーからもらうとか
177 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:36:40.81 ID:KYhaaDP0.net] >>161 まあそうだけど >>164 ふむふむ >>170 まあそれだね てかそれやってるんだけど超めんどい
178 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:41:52.49 ID:d3emHXQQ.net] >>170 サーバーから貰うときの認証は?
179 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:45:24.17 ID:MAg8NxfR.net] >>172 認証のパスワードなどの手続を登録した人に別途配布
180 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:48:09.71 ID:mLZLsxB6.net] サーバーから受け取るようにしたとしてもクライアントが丸見えなら同じ方法でサーバーからキー抜けるだろ ちゃんとやるなら、開発者だけが知ってる秘密鍵でシリアルキー作ってクライアントごとに払い出すようにする そしてサーバー側でシリアルキーに基づいてクライアントを識別し、クライアント単位でクォータや権限の制御をする 漏れる前提で他のクライアントに影響が出ないように設計するのが基本的な戦略だよ
181 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:55:18.75 ID:IHY0+SV3.net] どうでもいいけど、もともとの質問の趣旨は ネイティブコードと同程度の秘匿性でバイナリにデータを隠せるかじゃないの? それは無理、で終わりだと思うけど。
182 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:56:47.03 ID:g9QDbTAC.net] APIキーって5chのAPIみたいなの想像してたけど違うの? それだとクライアント毎に払い出しても誰か一人のがばれたら使用権貰えちゃうけど
183 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:57:13.81 ID:mLZLsxB6.net] >>175 APIキーを抜くくらいならネイティブでも難しくないよ
184 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 13:13:33.45 ID:mLZLsxB6.net] >>176 それで困るのは5chではなくブラウザの開発者だろ? 5chにとっては、特定のクライアント(この場合は開発者単位な)からの不正な大量投稿があれば、 そのクライアント(開発者)を丸ごとBANしてしまえばいい。他のクライアント(開発者)には影響しない。それを防ぐ責任はあくまでクライアントの開発者にある。 ユーザー単位で
185 名前:払い出すにしろ開発者単位て払い出すにしろ、個別に払い出すことで責任をAPIキーを払い出された側に転嫁できるんだよ。 [] [ここ壊れてます]
186 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 13:14:28.64 ID:fHWcXfSA.net] >>178 なるほど
187 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 13:22:20.16 ID:KYhaaDP0.net] ソースコード丸見えだから、APIキーがどこにあるかわかるよね そうやって海賊版作れてしまうわけだ
188 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 14:46:35.94 ID:VBsyc88B.net] 流石にAPIキーを普通に文字列で書くアホはnativeでも居ないだろ。 難読化する。 ソースコードが丸見えだとしても問題無い気はする。どーせnativeでも逆アセンブルするんだし。 カジュアルな対策なら、c#には逆コンパイルされないILコード使って復号ロジック書くべきかと思うな。 ちゃんとやるならドングルかライセンスサーバのどっちかじゃねえかな。
189 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 16:44:19.57 ID:Aux3ZmsD.net] nativeと同程度の隠匿で良いならそこだけnativeにすれば良いだけやん
190 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 16:46:40.21 ID:UH8BRHfz.net] oauthのキーなら速攻でばれるし文字列でそのまま書くな。難読かしても意味ねぇし。やるだけ無駄。
191 名前:デフォルトの名無しさん [2018/08/26(日) 16:48:17.70 ID:7VY92v0a.net] DBのパスワードとかソースに直書きしてるわ ハッシュにしてもどこで復号すればいいのか
192 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:33:04.42 ID:Lq+jppE1.net] 自前でやるだけのセキュリティのスキルがあるとこは珍しい 素直にASP.NET Identity + IdentityServerでOIDC使っとくのが懸命な判断
193 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:45:57.13 ID:6lhNHki6.net] こういう大事な部分を手軽で強固なセキュリティとしてなんでMSは用意しておかないんだ?
194 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:47:36.13 ID:vKa62JvF.net] はい意味不明 OIDCってアプリ側がユーザーの認証認可をする仕組みだぞ? それをどうクライアントアプリのAPIキーの隠蔽に使うのか教えてくれ
195 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:47:37.20 ID:86UvKUWS.net] >>186 もうすでにC#関係なくなっているが手軽で強固なやり方ってどんなことよ?
196 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:49:20.77 ID:vKa62JvF.net] >>186 本質的に不可能だからだよ 見られたくないならクライアントに埋め込まずにサーバーに持ってプロキシせよってこと
197 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:49:59.20 ID:6lhNHki6.net] まあそれよりもソースを復元できるのが問題だわな
198 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:50:52.91 ID:O9adGcKd.net] >>172 マシンに固定したいならMACアドレスとかHDDのシリアル番号とかで特定 ユーザーに固定するなら登録されたパスワードを定期的に入力とか
199 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:51:50.11 ID:86UvKUWS.net] >>190 中間言語形式だけでなくスクリプト言語も否定する気かw
200 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:54:18.49 ID:Lq+jppE1.net] >>187 チュートリアルもやったことないのかよ…
201 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:56:14.36 ID:vKa62JvF.net] >>193 だから何のことを言ってるんだ アプリ本体がユーザーの手元にあるのに認証認可もクソもないわ
202 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:57:02.40 ID:6lhNHki6.net] >>192 サーバー型はビジネスロジックがサーバー内にあるからそこで防げるけど、c#アプリは無理じゃん
203 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:00:17.07 ID:O9adGcKd.net] >>186 それなりには用意してる お前らが使わねーだけ https://docs.microsoft.com/ja-jp/windows/uwp/security/intro-to-secure-windows-app-development
204 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:02:46.79 ID:6lhNHki6.net] >>196 UWPじゃなくFormアプリでおねがい
205 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:04:53.73 ID:vKa62JvF.net] >>196 これユーザーが入力した認証情報を安全に保持するのと、サーバー側のリソースに関するユーザーの認証認可をする話だよね 開発者の機密情報を安全にクライアントに持たせるのとは全く別の問題だよ(そしてそれは原理的に不可能)
206 名前:198 mailto:sage [2018/08/26(日) 18:15:55.92 ID:vKa62JvF.net] もちろんクライアント側で復号する必要がなくて、単にデータストアをクライアント側に置きたいだけなら、サーバー側で暗号化すればいいだけだよ 原理的に不可能なのはクライアント側でも機密情報を復号して使う必要がある場合の話ね
207 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:22:46.80 ID:wR7TFJf0.net] こんな解説しないと分からないってのが信じられん
208 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:40:28.29 ID:O9adGcKd.net] >>198 だから「それなり」って書いてあるだろ
209 名前:デフォルトの名無しさん [2018/08/26(日) 23:06:54.05 ID:BDbiNYg/.net] Dapperを使用するにあたり、下記の「DAO」クラスの「SelectDAO」メソッドの 戻り値を抽象的に表現できれば、SQL与えるだけで共通に使えるのになと思っているのですが 戻り値を下記のList<IAB>のように書く方法はあるでしょうか? interface IAB{ } public class A : IAB { public string nen{ get; set; } } public class B : IAB { public string nen{ get; set; } } public class DAO { public List<IAB> SelectDAO(string sql) { System.Data.IDbConnection _con = new SqlConnection("接続文字列"); return (List<IAB>)_con.Query<IAB>(sql);//DynamicMethodに対する型オーナーが無効です。 と怒られます。 } }
210 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:10:18.71 ID:iDr2keD8.net] >>202 いやSQLを隠蔽するのがDAOなのにSQL渡したらダメだろ…
211 名前:デフォルトの名無しさん [2018/08/26(日) 23:12:59.95 ID:hANAm2gW.net] ようするにdaoなんか使わずに odbc使いなさいということ
212 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:15:38.55 ID:qu/vhMXg.net] >>204 ODBCだなんて何十年前の話だよ…
213 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:26:06.62 ID:HvpvLn4I.net] >>202 戻す値をList<dynamics>にすることで解決します。 マジオススメ
214 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:30:34.69 ID:BDbiNYg/.net] >>203 Dapperは緩いORMでクエリは書く必要あるんです EntityFrameworkなら確かに悩む必要無い問題な気がします
215 名前:デフォルトの名無しさん [2018/08/26(日) 23:32:55.01 ID:acagJbyI.net] API抜かれるってどのシーンで警戒してるの?サーバー上でアプリ起動してるとき?
216 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 23:33:30.52 ID:8W/FdQms.net] 5chせんぶら
217 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 10:42:42.81 ID:YXkmN521.net] >>202 最終的にDapperも何らかのインスタンスをnewしないといけないのに IABだけ渡されても何作ればいいのか分からないだろ 素直に public List<T> SelectDAO<T>(string sql) where T : IAB とかに というかSelectDAOを呼び出した側はメンバの存在しないIABを使って何をすればいいのか
218 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:05:39.06 ID:97nSTlug.net] >>207 いやそういう問題じゃなくて、SQLを書くんだったらDAOの中で書くんだよ 外からSelectクエリを文字列で受け取るってそれ使う側がDBのテーブル構造を知ってないとできないだろ データストアの詳細を全く隠蔽できてない
219 名前:デフォルトの名無しさん [2018/08/27(月) 13:51:51.69 ID:eRxM3k20.net] Dapperの実装ってこんな大変だったのか
220 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 17:39:21.68 ID:dQ3pJlXI.net] >>211 1知識1DAOクラスが本来の姿という事でしょうか? 実装レベルでもうちょっと抽象化できるかと思ったのですが設計レベルでは好ましく無いとなれば深追いは不要ですね
221 名前:デフォルトの名無しさん [2018/08/27(月) 20:08:24.29 ID:LmPAdMN0.net] VS2017WindowsFormsAppの実行ファイルを作成したのですが、 実行ファイルをzip圧縮するとサイズが10分の1以下になります 小さくなりすぎな気がするのですが正常の範囲で問題ありませんでしょうか? または、実行ファイルが肥大?(余分な情報が含まれている等)していたりするのでしょうか? なにかVS上で出来ることはありますか?
222 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 20:15:33.37 ID:RlI7Tzg3.net] >>21
223 名前:4 使用しないのならデバッグ情報とか埋め込まれるマニフェストとか外せるけどそれは肥大するほどでもない どんな実行ファイルか見てみないと分からないし解凍しても動くのなら気にしなくてもいいのでは [] [ここ壊れてます]
224 名前:デフォルトの名無しさん [2018/08/27(月) 20:39:37.08 ID:liNpwcvg.net] プログラミング初心者です visual studio for mac2017をインストールしてC#を覚えたいんだけど、どうやって学習したらいいのか教えてください! 探してもなかなかいい日本語の学習動画やサイトがなくて、、、
225 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 20:46:49.73 ID:lvpUeXXJ.net] 未確認飛行が定番じゃないかね
226 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 21:10:56.77 ID:LmPAdMN0.net] >>215 ありがとうございます 1MBほどのファイルが80KBほどになるので、小さくなりすぎではないかと思いまして… 生成される実行ファイルが、プロジェクトのある時点から1MBほどに大きくなったような記憶もあります 読み込み差し替えした画像リソースが上手く外れていないのかなと想像したりしますが… もうちょっと色々自分で調査してみます
227 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 21:15:57.46 ID:RlI7Tzg3.net] >>216 念のため書いておくけどMac版はWinフォームやWPF作れないからな >>218 コード中心で1MBくらいになるのは数万行のものだから、そんな縮むのは間違いなく画像リソースだろうな BMP形式で入っているとかアイコンが多いとかならZIPでもかなり縮む
228 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:15:24.67 ID:SLuEHwvX.net] >>219 コードは5000行ほどですね。試しにプロジェクトを新規で作り直して中身を移し替えてみます エクスポートインポート的なのがあれば良いのですがVS標準ではないみたいなので 大変ですが手動でやるしかないですが
229 名前:デフォルトの名無しさん [2018/08/27(月) 22:26:04.85 ID:liNpwcvg.net] >>217 ありがとうございます!!!
230 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:36:37.03 ID:HUaFIhtM.net] >>217 あそこほんと神
231 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:34:18.00 ID:nPk8x20U.net] OSデフォルト環境だとsn.exeがインストールされてないのか 隔離環境で作ったアセンブリにストロングネームつけたい時ってみんなどうしてんだ?
232 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:53:32.54 ID:E9g9LiKW.net] >>217 >>222 未確認ってどちらかというと入門じゃなくて確認用途だと思うよ あれを見て判る人はすでにjavaなどの他の言語を習得してる
233 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:57:11.03 ID:rJOuuZ33.net] まあそうだね C#でプログラミング入門って正直キツいと思うし、そういうコンセプトのところは たぶんないんじゃないか
234 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:58:55.68 ID:m5aHtIH2.net] >>225 俺は「C#の絵本」でプログラミング入門した。 つまり、C#でプログラミング入門した
235 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:04:55.80 ID:5gce9PvO.net] プログラミングはDelphi6からだったなー \5,000でパッケージを買ったすぐ後に、無料版のDL提供が始まった思い出 高校生にとって\5,000は地味に痛かった……
236 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:10:26.77 ID:ym/+5T0Q.net] >>225 何がそんなにキツい? Windows Formsのぽとペタ以上に初心者に優しいのってなんだろ
237 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:11:23.06 ID:9uK3R3xF.net] Androidもjavaのコンパイル通すだけなら
238 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:36:01.05 ID:a3yKcaCh.net] 英語得意ではなくてプログラミング言語の経験が全くないのなら 本を買う方がいいような気もする・・
239 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 03:46:31.78 ID:CqD+kceR.net] 猫でも判るで十分じゃね
240 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:03:31.88 ID:CaCX57FK.net] 神サイトはどぼんでしょ あのサイトのコピペがC#する日本ITドカタを支えてる
241 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:14:31.08 ID:TOj+sTb1.net] そこもう情報が古くね
242 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:15:17.24 ID:psOOFlwe.net] >>228 細かいことよくわかんないけどなんとなくコピペで動くからいいやとVB的に使うならそれでいいけど、 言語を一から体系的に習得しようとするとC#はかなり大変だよ 継続的に進化してるから実感がないかもしれないが、今のC#はもはやメジャーな言語の中ではC++に次いでトップクラスに複雑な部類
243 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:27:46.49 ID:Xl5gotOf.net] 仕事でも趣味でも体系的に一から学ぶとかやっていたら何もできなくなる 自分の必要な部分以外勉強するのはもはや研究者
244 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:31:32.32 ID:fGWTaV2a.net] C#って、言語仕様で難し目なのはyield, dynamic, awaitくらいな気がする 複数ある実行環境や巨大なフレームワーク、コンパイル後のILの話まで含めたら複雑だと思う
245 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:39:40.35 ID:wSuYfii2.net] >>234 具体的に
246 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:10:00.14 ID:psOOFlwe.net] >>237 たとえば簡単なところでいうと、読み取り専用プロパティの定義には今何種類のバリエーションがあるか知ってる? int Hoge { get { return 5; } } int Hoge { get => 5; } int Hoge => 5; int Hoge { get; private set; } = 5; int Hoge { get; } = 5; これらにどういう違いがあってどういうときにどれを使うべきか初学者向けに説明できる?
247 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:12:12.91 ID:H5BH2HV+.net] >>238 どれでもいいじゃん まずは動けばいいんだよ バグる?そんなのバグったときに対応すればいい どうせ世の中のほとんどのアプリがバグだらけなんだし そしてそのバグ取り経験が学習にもなる
248 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:14:07.70 ID:5WHkkAct.net] C++やったことないから知らないどC++は基本的なことも複雑なイメージ C#は極めるほど複雑なイメージ
249 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:14:21.36 ID:5WHkkAct.net] 基本はかんたん
250 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:15:27.95 ID:5WHkkAct.net] >>238 の例なら初心者は一番上だけ知っとけばいい
251 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:20:49.83 ID:onl38Ff8.net] 複雑なことができると学習が困難 すべてを学習すること前提ならそうかもしれん
252 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:55:05.69 ID:8egnCxzp.net] >>236 >>125 でも質問させていただいたのですが、 yield, dynamic, await あたりは理解できているつもりであるものの volatile の役割がどうしても理解できません。 慣れている方にとっては当たり前のことなのかもしれませんが、 volatile がある場合とない場合で動作が変わるコードの例だけでも お教えいただけないでしょうか。 どうぞよろしくお願いいたします。
253 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:22:59.40 ID:MmXTTGRL.net] >>244 >volatile がある場合とない場合で動作が変わるコード 難しいんじゃないかなあ (1) 実行儒所を入れ替える (2) 変数(メモリ)に直接アクセスしない みたいな最適化がどういうケースでコンパイラによって行われるか、たぶん誰もよく知らないw だけでなく、古い記事だけど www.itmedia.co.jp/enterprise/articles/0503/23/news086_4.html ↑にあるように、CPUレベルの最適化はCPUに依存する
254 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:32:18.53 ID:sGx9mZW+.net] 使ったことなくてググったけどそもそものvolatileに対する理解がなんか違う気がする d.hatena.ne.jp/dotnetmemo/touch/20111023/1319380181
255 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:33:27.71 ID:d5vKjLdu.net] >>125 volitateは「この変数はマルチスレッドで使うよ」と明示することによってシングルスレッドの場合
256 名前:ノしか効果的ではないような実行速度の最適化技術を使わせないようにするだけであって、排他制御を自動で行うものではないのでは? [] [ここ壊れてます]
257 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:53:49.79 ID:8egnCxzp.net] >>245-247 皆さんレスどうもありがとうございます! >>245 > >volatile がある場合とない場合で動作が変わるコード > 難しいんじゃないかなあ ありがとうございます。 ということは逆に言えば、volatile が無いことによって想定外の最適化が行われて 不具合につながること自体が起こりにくいものだと考えてもいいのでしょうか。 ただ仮にそうだとしても、お作法的には複数のスレッドからアクセスされる可能性のある フィールドはすべてに volatile を付けるべきなのかなとも思うのですが、 CS0420 : volatile フィールドへの参照は、volatile として扱われません。 のような警告がうるさくてあまり volatile をつけたくないときもあるので悩んでしまいます。
258 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:54:59.71 ID:8egnCxzp.net] >>246 参考ページのご紹介どうもありがとうございます。 実はそのページも読んでみたのですが > ちなみに後者の記事では実際にvolatileをつけないと問題のあるコードが記載されている。 > 以下のコードをReleaseモードでビルドして、デバッグなしで実行すると終了しない。 > volatile をつける(static volatile bool complete = false;)と正しく終了する。 という記述に反して、私の環境(Win10, .NET Framework 4.7.1)では volatile がなくても終了してしまうようです。 そもそも私にはそのページのコードと >>125 のコードが本質的に同じものに見えてしまい、 > volatileに対する理解がなんか違う気がする とおっしゃることの真意が理解できていないのですが、 何かお気づきのことがあれば教えていただけないでしょうか。 >>247 レスありがとうございます。 つまり、volatite の有無で実行速度に差が出ることはあっても 計算結果が変わることはない、ということでしょうか。 そうであるなら気が楽なのですが、いくつかのページやここでの他の方のレスを読むと どうしても確信が持てずにいます。
259 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:45:02.14 ID:MmXTTGRL.net] >>248 確実である保証がないものに確実性の保証を与えるvolatileを「お作法」 と思う発想は100%間違っています