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

■ このスレッドは過去ログ倉庫に格納されています
2018/08/05(日) 19:55:44.50ID:tZmoj8I+
「どんなにくだらない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/
■コードを貼る場合は↓を使いましょう。
http://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
http://referencesource.microsoft.com/
2018/08/24(金) 13:47:23.02ID:7bl9vxOR
未来から来てる可能性だってあるじゃないか
2018/08/24(金) 16:00:43.60ID:ILYVISJ2
状態を持たせずに純粋関数にした方が
バグが減って保守やテストがしやすいってことじゃろ

Mathクラスみたいに
2018/08/24(金) 16:28:08.95ID:cHge5Sdm
メソッドを全部staticにしたらいいんじゃね
もちろんstaticな変数は持たない
utilクラスみたいなもんだと思えば
2018/08/24(金) 16:41:00.57ID:qtcVVPQQ
それやるならstatic classってのがc#にはあったような
2018/08/24(金) 17:06:07.87ID:7htaPF/P
メソッドやクラスをstaticにしたところで他のクラスのインスタンスへの依存は防げないだろ
計算処理クラスなんてものが生み出されるようなレベルの現場だと、
ヘタにstatic強制なんかしたらstaticフィールドに状態持たせるバカが増えて余計に酷い状況になりそう
2018/08/24(金) 17:54:49.70ID:g1+rhs2E
>>143
それ書いた人はもう居ないです
いつもイライラして椅子蹴ってくる正社員リーダーとは恐怖でこちらから話せません
2018/08/24(金) 17:56:51.04ID:q0UJEScu
Utilクラスってゴミ箱になりがちだから嫌いだわ。
計算処理クラスはなんとなく気持ちはわかるが。
delegateでは微妙に表現力が足りないから特定のinterface実装したクラスを受けるようにして、その引数と型を渡せばネットワーク上のどこかでインスタンスが起こされて実行されるようにした、みたいなケースじゃないの?
テストではないけど、ジョブスケジューラがdll名と引数をキューから拾って、appdomain切って動的にそのクラスを実装したdllを読み込んで実行してくれる、みたいなのは作ったことある。
2018/08/24(金) 18:01:21.93ID:g1+rhs2E
>>149
処理をクラスにするって古い考えなのでしょうか

自分はDDD的な知識のクラスを構成するクラスも作りますが、そんなものは作らんのが流行りなのかと気になります
2018/08/24(金) 18:44:47.51ID:h3eX92xO
>>134
>>136
ありがとうございます。やってみます
2018/08/24(金) 19:20:46.35ID:s18ZTF9u
>>150
マジで底辺のリーダーってこんなんがほとんどなの?こええ
2018/08/24(金) 19:36:31.86ID:n2aXOJxU
staticなナントカUtilクラスはJavaドカが好むよねー
staticなのに内部でインフラ異存しまくっててキレそうになるよ
2018/08/24(金) 22:32:41.02ID:KbP5R+D4
失礼します。
ASP.NET MVC又はASP.NET MVC CoreのRazorビューから匿名型がサポートされない理由を説明してくださる方居ますか?
2018/08/24(金) 22:36:20.82ID:usF07bpd
>>156
これのこと?
https://stackoverflow.com/questions/5120317/dynamic-anonymous-type-in-razor-causes-runtimebinderexception
2018/08/25(土) 00:04:54.82ID:K7SavMc/
>>157
はい。
.frameworkがpoorなのでサポート出来ない事が私には理解できません。
こちらのurlの記事では普通にプロパティで取得出来ているように見えますが…
http://architect-wat.hatenablog.jp/entry/20130501/1367415654
2018/08/25(土) 09:58:42.90ID:uF3Ar+0r
>>158
匿名型なんて使わなきゃいい
2018/08/25(土) 19:34:07.64ID:ZJ6IWHAy
c#アプリって簡単に逆コンパイルで簡単にソース見れちゃうじゃん?
例えばAPIキーとかハードコーディングしてもしてなくても抜き出せてしまうけどどうすんの?
2018/08/25(土) 19:41:36.20ID:ajbZjNWE
>>160
リバースエンジニアリングはどのくらいの労力がかかるかだけの違いで解析できないものなんかないから諦めろ
2018/08/25(土) 19:57:01.93ID:Z58Bgt4H
>>160
ハッシュ値使うねん
2018/08/25(土) 20:08:24.14ID:6fvgv2wi
>>162
ハッシュからAPIキーは復元できないでしょ
2018/08/25(土) 20:21:29.85ID:nj06+sqx
>>160
環境変数
2018/08/25(土) 20:50:49.58ID:J4BiRy9W
200週くらい周回遅れの話題だ
2018/08/25(土) 21:51:49.34ID:uGtRYhlb
>>163
間接的に別なのから取得するとか
2018/08/25(土) 21:53:27.00ID:Y3DnwOBx
>>165
結論はどうなってるの?
どうしようもない?
2018/08/25(土) 21:53:40.13ID:Y3DnwOBx
>>166
どういうこと?
2018/08/26(日) 09:06:38.21ID:mvt+Dc+2
>>159
問題はEFで匿名型が簡単に作られてしまうのが問題ですね。
結局expandoobjectに変換するか、ViewModelを毎回作るしか無さそうですね。
2018/08/26(日) 09:44:13.36ID:O9adGcKd
>>167
要件による
サーバーからもらうとか
2018/08/26(日) 12:36:40.81ID:KYhaaDP0
>>161
まあそうだけど

>>164
ふむふむ

>>170
まあそれだね
てかそれやってるんだけど超めんどい
2018/08/26(日) 12:41:52.49ID:d3emHXQQ
>>170
サーバーから貰うときの認証は?
2018/08/26(日) 12:45:24.17ID:MAg8NxfR
>>172
認証のパスワードなどの手続を登録した人に別途配布
2018/08/26(日) 12:48:09.71ID:mLZLsxB6
サーバーから受け取るようにしたとしてもクライアントが丸見えなら同じ方法でサーバーからキー抜けるだろ
ちゃんとやるなら、開発者だけが知ってる秘密鍵でシリアルキー作ってクライアントごとに払い出すようにする
そしてサーバー側でシリアルキーに基づいてクライアントを識別し、クライアント単位でクォータや権限の制御をする
漏れる前提で他のクライアントに影響が出ないように設計するのが基本的な戦略だよ
2018/08/26(日) 12:55:18.75ID:IHY0+SV3
どうでもいいけど、もともとの質問の趣旨は
ネイティブコードと同程度の秘匿性でバイナリにデータを隠せるかじゃないの?

それは無理、で終わりだと思うけど。
2018/08/26(日) 12:56:47.03ID:g9QDbTAC
APIキーって5chのAPIみたいなの想像してたけど違うの?
それだとクライアント毎に払い出しても誰か一人のがばれたら使用権貰えちゃうけど
2018/08/26(日) 12:57:13.81ID:mLZLsxB6
>>175
APIキーを抜くくらいならネイティブでも難しくないよ
2018/08/26(日) 13:13:33.45ID:mLZLsxB6
>>176
それで困るのは5chではなくブラウザの開発者だろ?
5chにとっては、特定のクライアント(この場合は開発者単位な)からの不正な大量投稿があれば、
そのクライアント(開発者)を丸ごとBANしてしまえばいい。他のクライアント(開発者)には影響しない。それを防ぐ責任はあくまでクライアントの開発者にある。
ユーザー単位で払い出すにしろ開発者単位て払い出すにしろ、個別に払い出すことで責任をAPIキーを払い出された側に転嫁できるんだよ。
2018/08/26(日) 13:14:28.64ID:fHWcXfSA
>>178
なるほど
2018/08/26(日) 13:22:20.16ID:KYhaaDP0
ソースコード丸見えだから、APIキーがどこにあるかわかるよね

そうやって海賊版作れてしまうわけだ
2018/08/26(日) 14:46:35.94ID:VBsyc88B
流石にAPIキーを普通に文字列で書くアホはnativeでも居ないだろ。
難読化する。
ソースコードが丸見えだとしても問題無い気はする。どーせnativeでも逆アセンブルするんだし。

カジュアルな対策なら、c#には逆コンパイルされないILコード使って復号ロジック書くべきかと思うな。

ちゃんとやるならドングルかライセンスサーバのどっちかじゃねえかな。
2018/08/26(日) 16:44:19.57ID:Aux3ZmsD
nativeと同程度の隠匿で良いならそこだけnativeにすれば良いだけやん
2018/08/26(日) 16:46:40.21ID:UH8BRHfz
oauthのキーなら速攻でばれるし文字列でそのまま書くな。難読かしても意味ねぇし。やるだけ無駄。
184デフォルトの名無しさん
垢版 |
2018/08/26(日) 16:48:17.70ID:7VY92v0a
DBのパスワードとかソースに直書きしてるわ
ハッシュにしてもどこで復号すればいいのか
2018/08/26(日) 17:33:04.42ID:Lq+jppE1
自前でやるだけのセキュリティのスキルがあるとこは珍しい
素直にASP.NET Identity + IdentityServerでOIDC使っとくのが懸命な判断
2018/08/26(日) 17:45:57.13ID:6lhNHki6
こういう大事な部分を手軽で強固なセキュリティとしてなんでMSは用意しておかないんだ?
2018/08/26(日) 17:47:36.13ID:vKa62JvF
はい意味不明
OIDCってアプリ側がユーザーの認証認可をする仕組みだぞ?
それをどうクライアントアプリのAPIキーの隠蔽に使うのか教えてくれ
2018/08/26(日) 17:47:37.20ID:86UvKUWS
>>186
もうすでにC#関係なくなっているが手軽で強固なやり方ってどんなことよ?
2018/08/26(日) 17:49:20.77ID:vKa62JvF
>>186
本質的に不可能だからだよ
見られたくないならクライアントに埋め込まずにサーバーに持ってプロキシせよってこと
2018/08/26(日) 17:49:59.20ID:6lhNHki6
まあそれよりもソースを復元できるのが問題だわな
2018/08/26(日) 17:50:52.91ID:O9adGcKd
>>172
マシンに固定したいならMACアドレスとかHDDのシリアル番号とかで特定
ユーザーに固定するなら登録されたパスワードを定期的に入力とか
2018/08/26(日) 17:51:50.11ID:86UvKUWS
>>190
中間言語形式だけでなくスクリプト言語も否定する気かw
2018/08/26(日) 17:54:18.49ID:Lq+jppE1
>>187
チュートリアルもやったことないのかよ…
2018/08/26(日) 17:56:14.36ID:vKa62JvF
>>193
だから何のことを言ってるんだ
アプリ本体がユーザーの手元にあるのに認証認可もクソもないわ
2018/08/26(日) 17:57:02.40ID:6lhNHki6
>>192
サーバー型はビジネスロジックがサーバー内にあるからそこで防げるけど、c#アプリは無理じゃん
2018/08/26(日) 18:00:17.07ID:O9adGcKd
>>186
それなりには用意してる
お前らが使わねーだけ
https://docs.microsoft.com/ja-jp/windows/uwp/security/intro-to-secure-windows-app-development
2018/08/26(日) 18:02:46.79ID:6lhNHki6
>>196
UWPじゃなくFormアプリでおねがい
2018/08/26(日) 18:04:53.73ID:vKa62JvF
>>196
これユーザーが入力した認証情報を安全に保持するのと、サーバー側のリソースに関するユーザーの認証認可をする話だよね
開発者の機密情報を安全にクライアントに持たせるのとは全く別の問題だよ(そしてそれは原理的に不可能)
199198
垢版 |
2018/08/26(日) 18:15:55.92ID:vKa62JvF
もちろんクライアント側で復号する必要がなくて、単にデータストアをクライアント側に置きたいだけなら、サーバー側で暗号化すればいいだけだよ
原理的に不可能なのはクライアント側でも機密情報を復号して使う必要がある場合の話ね
2018/08/26(日) 18:22:46.80ID:wR7TFJf0
こんな解説しないと分からないってのが信じられん
2018/08/26(日) 18:40:28.29ID:O9adGcKd
>>198
だから「それなり」って書いてあるだろ
202デフォルトの名無しさん
垢版 |
2018/08/26(日) 23:06:54.05ID:BDbiNYg/
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に対する型オーナーが無効です。
と怒られます。
}
}
2018/08/26(日) 23:10:18.71ID:iDr2keD8
>>202
いやSQLを隠蔽するのがDAOなのにSQL渡したらダメだろ…
204デフォルトの名無しさん
垢版 |
2018/08/26(日) 23:12:59.95ID:hANAm2gW
ようするにdaoなんか使わずに
odbc使いなさいということ
2018/08/26(日) 23:15:38.55ID:qu/vhMXg
>>204
ODBCだなんて何十年前の話だよ…
2018/08/26(日) 23:26:06.62ID:HvpvLn4I
>>202
戻す値をList<dynamics>にすることで解決します。
マジオススメ
2018/08/26(日) 23:30:34.69ID:BDbiNYg/
>>203
Dapperは緩いORMでクエリは書く必要あるんです

EntityFrameworkなら確かに悩む必要無い問題な気がします
208デフォルトの名無しさん
垢版 |
2018/08/26(日) 23:32:55.01ID:acagJbyI
API抜かれるってどのシーンで警戒してるの?サーバー上でアプリ起動してるとき?
2018/08/26(日) 23:33:30.52ID:8W/FdQms
5chせんぶら
2018/08/27(月) 10:42:42.81ID:YXkmN521
>>202
最終的にDapperも何らかのインスタンスをnewしないといけないのに
IABだけ渡されても何作ればいいのか分からないだろ
素直に
public List<T> SelectDAO<T>(string sql) where T : IAB
とかに
というかSelectDAOを呼び出した側はメンバの存在しないIABを使って何をすればいいのか
2018/08/27(月) 13:05:39.06ID:97nSTlug
>>207
いやそういう問題じゃなくて、SQLを書くんだったらDAOの中で書くんだよ
外からSelectクエリを文字列で受け取るってそれ使う側がDBのテーブル構造を知ってないとできないだろ
データストアの詳細を全く隠蔽できてない
212デフォルトの名無しさん
垢版 |
2018/08/27(月) 13:51:51.69ID:eRxM3k20
Dapperの実装ってこんな大変だったのか
2018/08/27(月) 17:39:21.68ID:dQ3pJlXI
>>211
1知識1DAOクラスが本来の姿という事でしょうか?

実装レベルでもうちょっと抽象化できるかと思ったのですが設計レベルでは好ましく無いとなれば深追いは不要ですね
214デフォルトの名無しさん
垢版 |
2018/08/27(月) 20:08:24.29ID:LmPAdMN0
VS2017WindowsFormsAppの実行ファイルを作成したのですが、
実行ファイルをzip圧縮するとサイズが10分の1以下になります
小さくなりすぎな気がするのですが正常の範囲で問題ありませんでしょうか?

または、実行ファイルが肥大?(余分な情報が含まれている等)していたりするのでしょうか?
なにかVS上で出来ることはありますか?
2018/08/27(月) 20:15:33.37ID:RlI7Tzg3
>>214
使用しないのならデバッグ情報とか埋め込まれるマニフェストとか外せるけどそれは肥大するほどでもない
どんな実行ファイルか見てみないと分からないし解凍しても動くのなら気にしなくてもいいのでは
216デフォルトの名無しさん
垢版 |
2018/08/27(月) 20:39:37.08ID:liNpwcvg
プログラミング初心者です
visual studio for mac2017をインストールしてC#を覚えたいんだけど、どうやって学習したらいいのか教えてください!
探してもなかなかいい日本語の学習動画やサイトがなくて、、、
2018/08/27(月) 20:46:49.73ID:lvpUeXXJ
未確認飛行が定番じゃないかね
2018/08/27(月) 21:10:56.77ID:LmPAdMN0
>>215
ありがとうございます
1MBほどのファイルが80KBほどになるので、小さくなりすぎではないかと思いまして…
生成される実行ファイルが、プロジェクトのある時点から1MBほどに大きくなったような記憶もあります
読み込み差し替えした画像リソースが上手く外れていないのかなと想像したりしますが…
もうちょっと色々自分で調査してみます
2018/08/27(月) 21:15:57.46ID:RlI7Tzg3
>>216
念のため書いておくけどMac版はWinフォームやWPF作れないからな
>>218
コード中心で1MBくらいになるのは数万行のものだから、そんな縮むのは間違いなく画像リソースだろうな
BMP形式で入っているとかアイコンが多いとかならZIPでもかなり縮む
2018/08/27(月) 22:15:24.67ID:SLuEHwvX
>>219
コードは5000行ほどですね。試しにプロジェクトを新規で作り直して中身を移し替えてみます
エクスポートインポート的なのがあれば良いのですがVS標準ではないみたいなので
大変ですが手動でやるしかないですが
221デフォルトの名無しさん
垢版 |
2018/08/27(月) 22:26:04.85ID:liNpwcvg
>>217
ありがとうございます!!!
2018/08/27(月) 22:36:37.03ID:HUaFIhtM
>>217
あそこほんと神
2018/08/27(月) 23:34:18.00ID:nPk8x20U
OSデフォルト環境だとsn.exeがインストールされてないのか
隔離環境で作ったアセンブリにストロングネームつけたい時ってみんなどうしてんだ?
2018/08/27(月) 23:53:32.54ID:E9g9LiKW
>>217
>>222
未確認ってどちらかというと入門じゃなくて確認用途だと思うよ
あれを見て判る人はすでにjavaなどの他の言語を習得してる
2018/08/27(月) 23:57:11.03ID:rJOuuZ33
まあそうだね
C#でプログラミング入門って正直キツいと思うし、そういうコンセプトのところは
たぶんないんじゃないか
2018/08/27(月) 23:58:55.68ID:m5aHtIH2
>>225
俺は「C#の絵本」でプログラミング入門した。
つまり、C#でプログラミング入門した
2018/08/28(火) 00:04:55.80ID:5gce9PvO
プログラミングはDelphi6からだったなー
\5,000でパッケージを買ったすぐ後に、無料版のDL提供が始まった思い出
高校生にとって\5,000は地味に痛かった……
2018/08/28(火) 00:10:26.77ID:ym/+5T0Q
>>225
何がそんなにキツい?
Windows Formsのぽとペタ以上に初心者に優しいのってなんだろ
2018/08/28(火) 00:11:23.06ID:9uK3R3xF
Androidもjavaのコンパイル通すだけなら
2018/08/28(火) 00:36:01.05ID:a3yKcaCh
英語得意ではなくてプログラミング言語の経験が全くないのなら
本を買う方がいいような気もする・・
2018/08/28(火) 03:46:31.78ID:CqD+kceR
猫でも判るで十分じゃね
2018/08/28(火) 07:03:31.88ID:CaCX57FK
神サイトはどぼんでしょ

あのサイトのコピペがC#する日本ITドカタを支えてる
2018/08/28(火) 07:14:31.08ID:TOj+sTb1
そこもう情報が古くね
2018/08/28(火) 12:15:17.24ID:psOOFlwe
>>228
細かいことよくわかんないけどなんとなくコピペで動くからいいやとVB的に使うならそれでいいけど、
言語を一から体系的に習得しようとするとC#はかなり大変だよ
継続的に進化してるから実感がないかもしれないが、今のC#はもはやメジャーな言語の中ではC++に次いでトップクラスに複雑な部類
2018/08/28(火) 12:27:46.49ID:Xl5gotOf
仕事でも趣味でも体系的に一から学ぶとかやっていたら何もできなくなる
自分の必要な部分以外勉強するのはもはや研究者
2018/08/28(火) 12:31:32.32ID:fGWTaV2a
C#って、言語仕様で難し目なのはyield, dynamic, awaitくらいな気がする
複数ある実行環境や巨大なフレームワーク、コンパイル後のILの話まで含めたら複雑だと思う
2018/08/28(火) 12:39:40.35ID:wSuYfii2
>>234
具体的に
2018/08/28(火) 13:10:00.14ID:psOOFlwe
>>237
たとえば簡単なところでいうと、読み取り専用プロパティの定義には今何種類のバリエーションがあるか知ってる?
int Hoge { get { return 5; } }
int Hoge { get => 5; }
int Hoge => 5;
int Hoge { get; private set; } = 5;
int Hoge { get; } = 5;
これらにどういう違いがあってどういうときにどれを使うべきか初学者向けに説明できる?
2018/08/28(火) 13:12:12.91ID:H5BH2HV+
>>238
どれでもいいじゃん
まずは動けばいいんだよ
バグる?そんなのバグったときに対応すればいい
どうせ世の中のほとんどのアプリがバグだらけなんだし
そしてそのバグ取り経験が学習にもなる
2018/08/28(火) 13:14:07.70ID:5WHkkAct
C++やったことないから知らないどC++は基本的なことも複雑なイメージ
C#は極めるほど複雑なイメージ
2018/08/28(火) 13:14:21.36ID:5WHkkAct
基本はかんたん
2018/08/28(火) 13:15:27.95ID:5WHkkAct
>>238の例なら初心者は一番上だけ知っとけばいい
2018/08/28(火) 13:20:49.83ID:onl38Ff8
複雑なことができると学習が困難
すべてを学習すること前提ならそうかもしれん
2018/08/28(火) 13:55:05.69ID:8egnCxzp
>>236
>>125 でも質問させていただいたのですが、
yield, dynamic, await あたりは理解できているつもりであるものの
volatile の役割がどうしても理解できません。

慣れている方にとっては当たり前のことなのかもしれませんが、
volatile がある場合とない場合で動作が変わるコードの例だけでも
お教えいただけないでしょうか。

どうぞよろしくお願いいたします。
2018/08/28(火) 14:22:59.40ID:MmXTTGRL
>>244
>volatile がある場合とない場合で動作が変わるコード
難しいんじゃないかなあ

(1) 実行儒所を入れ替える
(2) 変数(メモリ)に直接アクセスしない

みたいな最適化がどういうケースでコンパイラによって行われるか、たぶん誰もよく知らないw

だけでなく、古い記事だけど
http://www.itmedia.co.jp/enterprise/articles/0503/23/news086_4.html
↑にあるように、CPUレベルの最適化はCPUに依存する
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況