C#, C♯, C#相談室 Part93©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/04/22(土) 08:52:00.93ID:iVvswOrb0
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/08/21(月) 19:55:10.65ID:KmAQXiSua
C#のジェネリックって1時間で読める記事で網羅されるぐらいの内容しかないっすよ
2017/08/21(月) 20:02:09.15ID:vP5jpteT0
テンプレートテクニックとか全部忘れてOK
2017/08/21(月) 21:10:14.69ID:qdRqCzb30
プレートテクトニクス
76デフォルトの名無しさん (ワッチョイ da1b-KdCs)
垢版 |
2017/08/27(日) 02:29:03.34ID:/hywh0UG0
式テンプレートジェネリックでどー書くんだよ
77デフォルトの名無しさん (アウアウウー Sa39-B8PL)
垢版 |
2017/10/09(月) 21:40:27.74ID:dzl0TrLma
すみません。ちょっと急いでいます。

C#でクラスを宣言する際に、
class {...} とpublic class {...}
このふたつの違いが判りません。
教えてください。
78デフォルトの名無しさん (ワッチョイ dad2-B8PL)
垢版 |
2017/10/09(月) 21:54:29.58ID:rAF1hT8M0
お願いします。同じものですか?
2017/10/09(月) 21:56:31.06ID:28tAbNEV0
アクセス修飾子を省略したクラスは internal になる
public とか internal とかの意味については↓

アクセス修飾子 (C# プログラミング ガイド) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers
2017/10/09(月) 21:56:50.83ID:u67WqECL0
>>77
外部から見えるか見えないか
2017/10/09(月) 22:03:58.01ID:rAF1hT8M0
ありがとうごぜます。
internalですね。アセンブリ言語レベルの話のようなので
まだそこまで至ってないのでpublic, private, protectedだけ使います。
すみませんでした。
2017/10/09(月) 22:12:08.58ID:Y4203ffV0
「アセンブリ」ってみて「アセンブリ言語」って理解するのは先が思いやられるな。全然意味が違う話なのに
2017/10/09(月) 22:16:05.20ID:28tAbNEV0
>>81
上記のページで「アセンブリ」と言ってるのはアセンブリ言語のことではなくて
「exe」とか「dll」とかのファイル単位での機械語のまとまりのことだよ
2017/10/09(月) 22:41:05.37ID:rAF1hT8M0
ありがとう。
今自分でも調べていてなんか違うなーって思ってました。
2017/10/09(月) 23:04:42.97ID:/pZGRYTm0
bin

バイナリ・ファイル
2017/10/10(火) 00:40:47.02ID:pliWVB3X0
今となっては、いや初めから忘れてもいい話だったけど
ファイル単位の物理的なまとまりはモジュール(.netmodule)で
モジュールをまとめた論理的まとまりがアセンブリ(.dll/.exe)
Visual Studioが2002の初めから一貫してサポートしてないこのモジュールって単位をMSはどう使うつもりだったんだろう
2017/10/10(火) 21:13:43.71ID:9Raz+qz10
最終的に1つのライブラリにしたいものをC#とF#で部分ごとに書き分けるとかそういう例は見た事あるけど
(ものによってはF#のほうが書きやすいとか)
実際それが必要なユーザがどれだけいるのかって話な
2017/10/10(火) 23:25:11.21ID:I+aeGBiR0
C++/CLIとC#の組み合わせがある。

最終的な呼び出し元はネイティブと同じ口なんだけど、
dynamicやasync/awaitなどを使いたいため、
dllexport付近の薄皮一枚だけ C++/CLI、
残りは全部C#で記述して1つの.dllにってのに.netmoduleを使う。

C#とF#の組み合わせとか、ほとんど無意味に思えるが…
2017/10/11(水) 03:26:54.68ID:rqqSAVqsM
iron python も?
2017/10/18(水) 13:52:47.94ID:ufsScDVj0
event解除ってnullぶっこんでもいいのかしら?
何処見ても-=でしろってのばかりで全解除の適切なやり方載ってないんだけど
一応null代入で動いてるぽいけどちと不安
2017/10/18(水) 14:05:31.13ID:4p9Ry6Jxa
まいなすはそれだけ消す、nullはすべて消す
できわるいコードだとnull入れると落ちるw
2017/10/18(水) 14:18:32.71ID:ufsScDVj0
全解除ってそれなりに需要あると思うんだが何処も扱ってない不思議
+=って内から外へ処理出しする訳だから
インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
nullぶっこめばGC回収されるみたいだけど正しいやり方なのかな
2017/10/18(水) 15:17:21.27ID:8oWZ+6kpM
設計次第じゃないの
2017/10/18(水) 15:34:04.84ID:jnsT8t6ma
購読側じゃなく発行側が勝手に解除ってのがちょっと...
むしろどういう場面で必要になるのか想像できないな

> +=って内から外へ処理出しする訳だから
> インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
ここは何を言ってるのかよく分からない

まあ、イベントというかデリゲートのマルキチャストの仕組みが分かりづらいのはわかる
2017/10/18(水) 15:50:00.66ID:h6dEijxza
>>92
正しいというかとりあえず安全なのは何もしないの放り込んどく
それでも勝手に消されて困るのがあるかもしれんがw
2017/10/18(水) 16:11:03.50ID:ufsScDVj0
>>94
例えば非同期通信でデシリアライズ終わったらイベント投げて後は勝手に死ね、って場合
-=だと発行側で解除するのが困難でリークしちまう
最新VerC#ならTaskで後処理書けばいいけど、Unityだとつい最近まで3.5だったから
2017/10/18(水) 16:24:45.96ID:jnsT8t6ma
>>96
俺の理解不足だったらごめん

リークするのはイベントの購読側のオブジェクトLがイベントの購読を解除しないまま
Lを参照する変数がなくなった場合で、発行側のオブジェクトPのイベントに
Lのメソッドが登録されたままPへの参照がなくなってもそれはリークにならないと思うんですが
2017/10/18(水) 16:39:10.41ID:ufsScDVj0
>>97
そう思ってた時期が俺にもありました
しかし実際はリークしてOutofMemoryが出る
どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい
本当にそういう理屈かは知らんけどnullぶち込むと例外でなくなる
2017/10/18(水) 17:26:02.20ID:jNhOnQNR0
思い込みって怖いネー
2017/10/18(水) 17:46:05.16ID:GswCLlj60
>>98
>どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい

登録解除してないから購読側は発行側から参照されてて回収されない
その状態で購読側が発行側を参照してるんなら発行側も回収されないよね
2017/10/18(水) 19:19:26.31ID:j/PgXgnk0
循環参照しててもルートから到達不能なら回収されるよ
されないなら単に循環参照以外の参照が何かしら残ってるだけ

いいや解放されないね!とかいう思い込みに付き合う気はないから
口ごたえがしたければ、VSのメモリーアナライザーで
リークしているというオブジェクトの参照状態のスナップショットを撮って
ここに貼り付けてから続けるように
2017/10/18(水) 21:18:06.23ID:GswCLlj60
>>101
すまんすまん、他の言語と勘違いしてた。
2017/11/07(火) 14:20:16.62ID:7CEykIkZ0
WebBrowserコントロールを使うと、レジストリ編集しないと自動的にIE7相当になってしまうんですが、
レジストリ編集無しでIE11相当にするにはどうしたらいいでしょうか?

もしくは、dllファイル1つで済むなら、他のブラウザコンポーネントでもいいです。
2017/11/07(火) 14:42:48.60ID:uJ4GX7RNM
IEは他にはhtmlのmeta要素使うとか
レジストリっていってもHKCUなんだからアプリ起動時に書き込むだけのことだけど
2017/11/07(火) 18:40:38.64ID:MJK6I9RA0
>>103
CefSharpっていうChromiumの実装がNuGetにあるよ
AnyCPUに対応してないんで導入が若干手間だけど気合いでがんばれ
2017/11/08(水) 00:31:11.06ID:NuL34q9d0
>>103
CoInternetSetFeatureEnabled
2017/12/18(月) 07:59:20.53ID:mWvJQqvN0
#EntityFrameworkの質問ってここでよいですか?

EFCore+Sqliteで開発してるんですが、".db"ファイルのパス指定で困ってます。

コネクション作成時に、以下でdbパス指定をしています。
var connectionString = new SqliteConnectionStringBuilder { DataSource = @"./app.db" }.ToString();

この場合、理由がよく分かってないのですが、
Update-Databaseを実行した時(CreateDatabaseが発行される時)、プロジェクトフォルダからの相対パスになり、
SaveChangesを実行した時(Insert文が発行される時)、/bin/debugからの相対パスになります。

毎回相対パス指定を変えるのが面倒で、かつ絶対パス指定はしたくないもので。
何か良い方法はありませんでしょうか。
2017/12/18(月) 13:46:10.03ID:325qmzymM
ここじゃないと思うの
2017/12/18(月) 14:56:45.39ID:dTBoNCZ50
>>107
で、app.dbはどこに有るのよ、
2017/12/18(月) 14:57:20.68ID:E4FIT7xPa
俺ならexeパス取得して絶対パス作ってそれ使うけど、
絶対パスいやならカレントフォルダ変更したら?
2017/12/18(月) 23:30:30.75ID:mWvJQqvN0
>>109
プロジェクトフォルダにできます。
ただ、プログラム実行時は別のパス見てるからDBないエラーになります。

>>110
あー、それいいかもです。
やってみます。
2017/12/31(日) 15:13:16.63ID:n7dS7ECy0
個々の人ってWinFormとWPFどっちで作ってる?
2017/12/31(日) 15:13:40.84ID:K0nOGJob0
WPF
2017/12/31(日) 16:15:17.15ID:jcdX0HHma
何度聞かれてもformだ
2017/12/31(日) 16:16:35.61ID:PdI3PgJiM
オレも2年前からWPFにした。
2017/12/31(日) 16:35:43.42ID:GvxCaHuK0
新規は基本的にWPFだけど、使い捨てのツールはFormsのことも多い。
2017/12/31(日) 16:54:40.12ID:Jm0z8SXaF
昔はVSが何かっつと即堕ちして使いもんにならんかったが
今はまともになったんかねWPF
2017/12/31(日) 17:32:53.36ID:n7dS7ECy0
WPFって技術資料があんまないから、つっかかりにくいんだよなあ
2017/12/31(日) 18:07:24.15ID:jSVu2Yi+0
>>118
日本語が変だな
外国人?
2017/12/31(日) 18:22:11.56ID:OKQGXBiEx
>>119
あれだ外人からみれば
そうみえんじゃねw
2017/12/31(日) 20:17:21.07ID:jSVu2Yi+0
つっかかりにくい→つかえやすいorつっかえやすい
それとも
つっかかりにくい→とりつきにくいorとっつきにくい

あんまない→あまりないorあんまりない
2017/12/31(日) 20:22:19.59ID:TCYSbVmxa
読解力ないな
外国人?
2017/12/31(日) 20:26:45.27ID:sT88mvz00
読解力が無かったら修正例は書けないと思う
2017/12/31(日) 21:26:10.60ID:mh0j3eXv0
どこかの田舎もんが書いた文章なんだろ
2018/01/01(月) 08:43:08.79ID:qva7Cn1y0
そんな事にも突っ込まないといけないほど余裕がないんだろうな
2018/01/08(月) 21:07:22.93ID:ff9XOb220
ILMergeについて質問です

例えば自作アプリ X.EXE に外部ライブラリ A.DLL と B.DLL を結合して X2.EXE を作ったとします
この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?
2018/01/08(月) 21:23:20.13ID:/QyX6ETP0
>>126
それはILMerge関係なくA.DLL と B.DLL のライセンスの問題です
結合が禁止されていなければ添付して配布するのと同じになります
どんなライセンスかによって違うので
【License】ライセンス総合【利用許諾】
https://mevius.5ch.net/test/read.cgi/tech/1266247461/
へどうぞ
2018/01/08(月) 21:33:00.91ID:7hYpzMEE0
>>126
> この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?
各々のライセンスを確認するしかない
2018/01/08(月) 22:13:04.36ID:ff9XOb220
>>127-128
レスありがとうございます
2018/01/31(水) 23:46:33.39ID:3zSQiFnB0
ラムダ式から右辺の情報を取得する事は出来ますか?

.net MVC のソースコードを見ていて思ったのだけど、たとえば razor の Html.LabelFor メソッドは第一引数に
m => m.name などと書いて、引数 m で示すクラスインスタンスの name プロパティの DisplayName 属性の値を
ラベルとして表示していたりします。

ということは、ラムダ式 m => model.name から name プロパティの属性情報を取得しているのだと思うのですが、
どうやってるのかさっぱり分からず。
調べるべきキーワードだけでもいいので、ヒントをいただけませんか。
2018/02/01(木) 01:19:13.10ID:7ACR6glp0
ラムダ式を受け取るメソッドの引数を
Func<String>の代わりにExpression<Func<String>>にしたりする
キーワードは式ツリー
2018/02/02(金) 00:27:05.13ID:eoTWLp2s0
>>131
ありがとー。
軽く見てみましたが、Expression ってよく分からないですね。。
式ツリーでも、もっと調べてみます。
2018/02/13(火) 16:59:47.00ID:KbLCHvlc0
サイズ、位置が固定されているウィンドウを外部プログラムから移動、サイズ変更する方法を教えてください
2018/02/13(火) 20:22:55.89ID:ElvL/+ZbM
とりあえず一般的には
FindWindowやEnumWindowsで目的のウィンドウのウィンドウハンドルを手に入れて
SetWindowPosする
>>133のウィンドウがこれでできるかどうかはそのプログラムの作り次第
2018/02/13(火) 20:56:39.50ID:KbLCHvlc0
>>134
ありがとうございます
それで移動、サイズ変更できないウィンドウをどうにかできないかなと思い質問してみました
ユーザーが移動サイズ変更できないウィンドウでも強引にしてしまうプログラムがあるらしいので、どうしてるのかな?と
2018/02/13(火) 21:00:42.72ID:00bUqpHu0
>>135
とりあえず直接のC#の話でなくWinAPIなんだからそっちで調べた方がいいと思うよ
2018/02/13(火) 21:21:31.71ID:KbLCHvlc0
>>136
ありがとうございます
2018/02/16(金) 06:01:32.86ID:W1XJdyx10
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
2018/04/09(月) 14:21:53.70ID:hXBdpr6O0
厳密に言うとC#の話じゃないんだけど
TcpClientでコネクション使い回しというか
開けっ放しでデータ送り切るって出来ない?
flushしてもデータ残っててCloseしないと全部送られない
2018/04/09(月) 15:36:40.77ID:Cpp6LEO80
ソースで説明してくれ
2018/04/09(月) 15:51:30.50ID:hXBdpr6O0
そんな複雑な話じゃないんだ
GetStream()でストリーム取ってWrite()するだろ
でもClose()しないとケツのいくばくかはいつまで経っても送られない
断続的に送りたいから、いちいちClose()してからConnect()やり直すとかしないで済む方法あるか知りたい
2018/04/09(月) 15:59:29.12ID:uvdwBq6N0
NoDelay=true
2018/04/09(月) 16:03:49.46ID:hXBdpr6O0
おおサンクスやってみる
144デフォルトの名無しさん (ワッチョイ ffe7-UPLz)
垢版 |
2018/04/16(月) 21:16:34.15ID:f86xegYk0
質問です。

非同期実行について勉強中です。

以下のサイトの内容なんですが、

https://ufcpp.wordpress.com/2012/11/12/asyncawait%E3%81%A8%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E5%88%B6%E5%BE%A1/

ページ中ほどにある
"スレッド プール実行"

"一方、内側は、スレッド プール上での実行になりますが、スレッド プール上のコンテキストではawaitしてもスレッド プール上のどこかで実行されるだけで、決してUIスレッドには戻らなくなります。"
の意味が理解できません。プール上のどこかで何が実行されるのでしょうか?


また、その下の”問題となる書き方の例”

”Task.Runの中のawaitでは、単一スレッド実行にはならないので、lockが必要になることがあります。”

理解が出来ませんでした。

2連続someTask()は同時に実行されるという意味でしょうか?
2018/04/16(月) 21:51:32.37ID:zRE5gkIia
スレッドは使い捨ての領域だから、
その中で遅延実行しても戻り値は受け取れないよ
だって戻る領域が数秒後も存在しているか分からないからね
って意味だと思う
2018/04/16(月) 23:04:11.81ID:qlfABgAK0
マルチスレッドなんて、素人がやるものじゃない。
Ruby を作った、Matz でさえ、何十年もやっていないのに

OS・CPU が今、どのプロセスのどのスレッドの、どの実行コードを実行しているのか、
君のプロセスのスレッドから、わかるわけないでしょ

同期処理じゃないのに。
バラバラに、無関係に動いているのに

逆に言えば、バラバラに動くスレッドの、
現在実行中のコードがわかるのなら、それは同期処理になる
2018/04/16(月) 23:28:22.82ID:pnvSaCZFa
これがシングルスレッドおじさん再登場の瞬間であった
2018/04/17(火) 06:32:51.54ID:/3sDS4fX0
どうもありがとう
2018/04/17(火) 08:18:31.78ID:iJwyhGM3M
シングルスレッドだけで出来る仕事って限られてないか。通信なんか絡んだらマルチスレッド必須でしょう。私の現場は.net3.5なんでback|ground work|er使ってるよ。
2018/04/17(火) 08:24:21.80ID:AgNOdAZLM
>>149
taskって4.0からだっけ?
2018/04/17(火) 10:03:57.21ID:iJwyhGM3M
>>150
確かそうです。
taskとか使えると楽なんですが4.0強制もできない案件なんで。
2018/04/17(火) 10:50:32.95ID:EhGIAhyrd
どうしても.net3.5を使わないといけないんだったらRxで処理するわん
2018/04/17(火) 11:51:31.97ID:iJwyhGM3M
おっ!
いいこと教えてもらった。
Rxってsilverlightだけじゃないんだ。
2018/04/17(火) 12:18:07.14ID:xGjbcgxza
そんなの使えるなら.NET4だって使えるでしょw
3.5が使えて4が使えないプラットフォームは存在しないと思うけど
2018/04/17(火) 12:48:49.14ID:JQ78IAVca
そういう問題じゃないんだよ・・・
2018/04/17(火) 13:03:19.02ID:iJwyhGM3M
お客様のPCがWindows7ならデフォルトで3.5が入ってるでしょう。4.0にしてから使ってくださいとは言いずらい。
2018/04/17(火) 13:07:10.43ID:rojjHsw+0
ちょっと前までUnityも3.5止まりだったから多少はね?
2018/04/17(火) 16:37:52.80ID:joazaAE7M
Rxってなんぞや!!
2018/04/17(火) 17:17:34.43ID:JQ78IAVca
gugure
2018/04/17(火) 19:00:52.03ID:F4BOoGzu0
ググれは正論だけど、せっかく話題になったんだからここの住民の意見も聞いてみたい。使ってる人の感想とか。
2018/04/17(火) 19:14:49.95ID:joazaAE7M
せや!Rxについて詳しく
2018/04/17(火) 19:54:15.01ID:xGjbcgxza
全然関係ないけど、receiveの略が何でRxなのか昔から結構謎
2018/04/17(火) 20:38:22.07ID:F4BOoGzu0
それ組み込みの世界だね。送信ポートはTxだ。スレチだね。
2018/04/18(水) 14:53:40.81ID:ur62Feqwa
インストールされている証明書の読み取り、エクスポートをやりたいんだけどさ
ググるといろいろ出てきてX509とかってのを使うと良いとある
まだ実装とか全然なんだけど、この情報だけだと不安なのでだれかやったことのある人いない?

X509Cartificate.Exportはバイトデータを吐き出してそのままファイルに保存できるるっぽいけど、秘密キーを設定したいとかあったりしてモヤモヤしてる
2018/05/03(木) 18:58:35.37ID:+FWBwd0JM
ワッチョイなしスレが1000行ったからこっちをage
2018/05/03(木) 18:59:21.23ID:+FWBwd0JM
ageられてなかった…
2018/05/04(金) 20:04:32.00ID:hRV05sGM0
windowformアプリケーションで

form1 ディスプレイの解像度等を入力する。入力したデータをもとにform2に表示する長方形の大きさ(rx,ry)を算出
form2 form1で算出した(rx,ry)をもとに長方形を表示

ってしたいんだけど

A. rx,ryをpublicで定義してform2.csから参照する
B. form1のrx,ryを求める計算式をクラスにしてform2からインスタンス生成して求める

のどちらがお作法的に正しいんでしょう?
2018/05/04(金) 20:12:02.30ID:h17LifXxa
データとUIを分離するとして、データ保持と計算用のクラス、formは入力のみ、表示のみって感じになるのかな
でも、まぁそんなのAでもBでもいいだろ

関係ないが解像度ぐらい自動で取得してくれると楽
2018/05/04(金) 20:14:46.22ID:QSaueu9Z0
なんとなく、こういうのを"お作法"と呼ぶマにはいいイメージがない
2018/05/04(金) 20:20:22.68ID:hRV05sGM0
>>168
ありがとうございます。
解像度は自動取得なのでディスプレイのoサイズでした。
2018/05/04(金) 20:22:53.75ID:hRV05sGM0
>>169
すいません。
プログラミング初めて勉強なので、なるべくへんなコーディングしないように可読性高くと考えてまして、
普通はどう描くんだろうなというところが気になって仕方ない。
public変数作りすぎると、後でどこかで変に触るとわけわからんことになるのかなと極力使わないように心がけてます。
2018/05/04(金) 20:37:07.58ID:HEa1U9rI0
何かフリーソフトを作ってみたくて勉強しているところなのですが、GUI?を学ぶ上で良い本があれば教えていただきたいです
2018/05/04(金) 20:55:12.49ID:L0LZvRGB0
>>171
フォームは入力の受付と出力の描画だけをする
内部で使うデータはモデル側で持つ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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