[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2ch.scのread.cgiへ]
Update time : 12/26 14:53 / Filesize : 130 KB / Number-of Response : 563
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part98



1 名前:デフォルトの名無しさん mailto:sage [2024/06/29(土) 19:18:41.95 ID:NohAfdfx0.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

■Visual Studio 2022 Community(無償の統合開発環境)等はこちら
www.visualstudio.com/downloads/

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

■前スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

246 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 06:57:26.47 ID:xj9X4IbW0.net]
作ってないやろ
買収してるだけ

247 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 08:17:45.85 ID:d6I1DTY60.net]
PSはMSが作ってるが

248 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 09:42:40.38 ID:WomMb93i0.net]
Windowsに標準搭載されてる.NET Frameworkと今の.NETの時点で互換性ないのに
なんで.NETアプリであるPowerShellが叩かれるのか

249 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 12:31:10.08 ID:zYOmJNRT0.net]
標準搭載されてるPowerShellは.NETアプリじゃなくて.NET Frameworkアプリだからね

250 名前:デフォルトの名無しさん (ワッチョイ 2344-/DxF) mailto:sage [2024/12/16(月) 13:18:44.44 ID:ZxGHnTET0.net]
>>245
MSの社内政治に敗れたチームのプロダクトはそうなりがち
社内政治うまくやってると微妙なやつも長生きする

251 名前:デフォルトの名無しさん (スププ Sd8a-omYb) mailto:sage [2024/12/16(月) 13:27:42.05 ID:HTBCdLEid.net]
frameworkってなんでまだ存在するの?

252 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 15:54:22.92 ID:d6I1DTY60.net]
.NETがFrameworkと互換性無くて捨てられないから

253 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 19:05:15.35 ID:HTBCdLEid.net]
互換性ないってことは、.NETとframeworkの2つのアプリを動かしたら、GCもそれぞれで動き始めるの?

254 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 21:44:01.92 ID:dTKITl7UM.net]
>>253
GCはアプリ(プロセス)毎じゃないの



255 名前:デフォルトの名無しさん mailto:sage [2024/12/19(木) 20:41:55.41 ID:KU+lpcLj0.net]
PowerShellはWindowsにシステムワイドにインストールされた .NET Framework が存在するという前提で成立していたのに、
.NETでは.NET自体をアプリにバンドルするか、必要に応じて特定のバージョンを追加で入れるかになって完全に破綻しちゃったんだよね
一般的な.NETアプリならバンドルは可搬性が向上するから好ましいことだけど、
PowerShellの場合はシステムワイドにインストールされたいろんなモジュールと連携しなきゃいけないから.NETバンドルはありえない
完全に詰んでる

256 名前:デフォルトの名無しさん mailto:sage [2024/12/20(金) 08:54:32.70 ID:6dsqio680.net]
だからPowerShell Coreは標準装備じゃなくて追加装備

257 名前:デフォルトの名無しさん mailto:sage [2024/12/20(金) 10:14:37.03 ID:PANCPXf30.net]
Windowsにそもそも入ってないなら追加インストールでいいんだけどね。問題は5が入っていること。
それによって「なぜ元々入っているのにわざわざ追加するのか」という当然の疑問を解消するコストが生じる。
開発者の好みだけでサポート期間も互換性も劣るゲテモノをゴリ押しするのは極めて困難だし、
そもそもPS書いて飯食ってるタイプのエンジニアでは最新に拘る人はそもそも少ないだろうね

258 名前:デフォルトの名無しさん mailto:sage [2024/12/20(金) 13:01:10.12 ID:9RxE8mFw0.net]
はいそろそろC#の話題でよろ

259 名前:デフォルトの名無しさん [2024/12/20(金) 15:29:33.49 ID:raronLtC0.net]
JAIST、「並行量子通信プロトコル」の完全な自動形式検証を実現
news.mynavi.jp/techplus/article/20241220-3090485/

260 名前:デフォルトの名無しさん mailto:sage [2024/12/20(金) 17:50:29.82 ID:0SGDMmeR0.net]
>>258
なんかある?

261 名前:デフォルトの名無しさん (ワッチョイ 6a79-qWVo) mailto:sage [2024/12/20(金) 20:02:54.65 ID:7538eGNC0.net]
またペンギンやら飛べない鳥だとかの話がしたいのかい?
それともPowshellの付属物の話がしたいのかい?
どっちなんだい?

262 名前:デフォルトの名無しさん [2024/12/21(土) 10:56:38.14 ID:bIHzWCsda.net]
>>257
>それによって「なぜ元々入っているのにわざわざ追加するのか」という当然の疑問を解消するコストが生じる。
>開発者の好みだけでサポート期間も互換性も劣るゲテモノをゴリ押しするのは極めて困難だし、

ほんそれ
5が全部入りにしておくのが正解だっただろうな

263 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 11:18:40.67 ID:gj7hxYFQM.net]
PS for sysetmみたいなのを最小セットで入れておけば良かった

264 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 11:42:21.51 ID:4NNdAFL10.net]
終わらないPS談義



265 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 17:53:08.76 ID:BdmznDtW0.net]
>>264
お前がC#の話題振ってくれりゃ乗るよ
早くしろよ

266 名前:デフォルトの名無しさん (ワッチョイ be10-Xxs2) mailto:sage [2024/12/21(土) 18:15:03.35 ID:4NNdAFL10.net]
いや知らんがw
俺がC#の話題にしろ言うたわけじゃないしw

267 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 21:57:55.88 ID:i5j/m89y0.net]
今関わってるプロジェクトがスペース2つでインデントしててちょっと面食らってしまったんだけどこれ珍しくないもの?
今まで携わってきた中で一件も遭遇したことなかった

268 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 22:11:41.26 ID:lUhayCnC0.net]
過去に深いネストを大量生産する人がエラくなっちゃって、そういうルールになってしまったんじゃないかと妄想しちゃうなw

269 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 23:25:41.77 ID:BdmznDtW0.net]
今時スペース2個は珍しいな、C#とかではあんまりない気がする
昔々はどの言語でもタブを使っていいかとか、スペースで代用するなら2個か4個かで論争があったらしい
JSは2個が主流だった気がするけど今はどうだろ

270 名前:デフォルトの名無しさん mailto:sage [2024/12/21(土) 23:39:03.76 ID:L6mtJxlH0.net]
jsonは2だったり4だったりまちまちだけどね

271 名前:デフォルトの名無しさん [2024/12/22(日) 00:09:01.63 ID:tw4BvM7X0.net]
タブのが合理的
Goみたいな標準フォーマッタがあるのが理想だけどC#はそう言う文化はないね

272 名前:デフォルトの名無しさん (ワッチョイ df79-0Q8V) mailto:sage [2024/12/22(日) 02:26:26.71 ID:/fc7feyD0.net]
俺はスペース2個のが視線移動減って楽だと感じてるからかなり昔から2個派だよ
>>268みたいな日本人特有の右倣えのお仕着せルールに甘んず昔から超効率化してるやつらは世の中に沢山いるんだよ
勉強になったな

273 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 03:54:49.07 ID:f4R4W69d0.net]
TABに統一してるけど
表示上は半角スペース2から4個で用途で変えてる

274 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 05:02:43.67 ID:SvMpALOcd.net]
{}は
if(){
}
の方が好き
普通は
if()
{
}
これ?



275 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 05:44:22.67 ID:96LlHbpn0.net]
逆、最初の頃は上が大多数
ブログやら初心者講座やらで下の書き方が主流担ってきてる感じ

276 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 06:21:31.74 ID:I7bhR46i0.net]
スペース2個インデントって言うと、XMLやHTMLを思い浮かべるな

277 名前:デフォルトの名無しさん [2024/12/22(日) 07:48:19.66 ID:dFQQq0VB0.net]
>>275
違うぞ
上のはJavaやJavaScript界隈でのデファクト

下はMicrosoft系のC#とかのデファクト

公式が出してるコーディング規約がそうなってるだけ

278 名前:デフォルトの名無しさん [2024/12/22(日) 07:50:46.11 ID:dFQQq0VB0.net]
>>276
例えばC#というかasp.net系だとrazor構文でhtmlと一緒にC#のコード埋め込む
そうするとインデントは2の方が見やすい

279 名前:デフォルトの名無しさん [2024/12/22(日) 07:53:26.28 ID:dFQQq0VB0.net]
>>271
C#はチェーンメソッドのドットを縦に綺麗に並べる文化が有るんでタブだと都合が悪い
2でも4でも良いけどスペースがデファクト

280 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 08:13:40.94 ID:96LlHbpn0.net]
>>277
いやだから
C#が出る前というか出始めの頃で
Cプラプラ使い達が多かった時さ

281 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 08:20:56.74 ID:96LlHbpn0.net]
当時、というか関数書くときって
hoge(){
…}

て書くのが一般的やったん

んでDelphiが出てきたらこの{}をBegin…Endで囲むから
hoge()
Begin

End

ここらへんはVBやVBAとかにも反映されて
その後C#で出した際にって感じかな

282 名前:デフォルトの名無しさん (ワッチョイ 5f95-EHcm) [2024/12/22(日) 09:15:42.08 ID:tw4BvM7X0.net]
>>279
タブをインデントで使ってスペースをアライメントで使えば理論上ズレないよ
Goのフォーマッタはこれに従ってるからタブ幅は任意に設定できる

prettierみたいな途中で強制的に折り返すフォーマッタとは相性が悪いけど

283 名前:デフォルトの名無しさん (ワッチョイ 5f95-EHcm) [2024/12/22(日) 09:22:40.24 ID:tw4BvM7X0.net]
Indent with tabs, align with spaces

https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces

これね
これが理想だけどエンジニアのレベルが高くないとこのルールを守るのは難しいからスペースにしてるのが大半
ただしGoは強制フォーマッタでこれを解決してる

個人プロジェクトなら最初から好きなタブ幅にすればいいからタブにするメリットもあまりないし
気分でタブ幅変えれるのは結構メリットあるけどね

284 名前:デフォルトの名無しさん (ワッチョイ b310-3P54) mailto:sage [2024/12/22(日) 09:27:48.67 ID:I7bhR46i0.net]
俺はずっと>>274の前者でインデントはタブだなぁ
なおタブの幅はスペース4個分



285 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 11:59:15.10 ID:US35TJKc0.net]
「自転車置き場の屋根の色」現象発生中

286 名前:デフォルトの名無しさん (スッップ Sdaf-3P54) mailto:sage [2024/12/22(日) 13:03:56.05 ID:ci/BAnbad.net]
この手の話は職場のルールで決まるから個人がどうこうは関係ないよな
ただ自分のツールなんかは好きにしろだが
カッコ、演算子、型と変数の宣言の間の空白などもめる話題はいくらでもある

287 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 16:36:51.22 ID:J7cuP3Nu0.net]
>>285
「原子力発電所の建設」について議論したいなら付き合うよ、それで議題は?

288 名前:デフォルトの名無しさん [2024/12/22(日) 17:09:33.96 ID:dFQQq0VB0.net]
まあreshaperでテーム共有設定使うだけだしな

289 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 19:48:07.14 ID:US35TJKc0.net]
>>287
では失礼して
Unity製ゲームのMOD開発なんかでリフレクション使いまくるのもなんかスマートじゃないから、
aelij氏のIgnoresAccessChecksToGeneratorを魔改造させてもらってフィールド含めて全パブリック&readonly解除でゲームのコードに全アクセス出来るようになってめっちゃ捗るようになったのだけど、
欲が出て標準ライブラリにも手を出したくなってやってみたらmscorlibなんかはReferenceAssemblyだからプライベートフィールドはそもそもdll内に含まれてないから書き換えられないんだよね。
ランタイム時の実体dllを決め打って渡せばstring.m_firstCharとかList<T>._sizeとかも全てアクセスできるようにはなるんだけど決め打ち渡しもスマートじゃないからどうにか自動で解決をしたい。
ILSpyやmono.cecilにはランタイム時の実体dllを特定するコードあるんだけどbuildアクションから同じ事するのって可能だろうか?

290 名前:デフォルトの名無しさん (ワッチョイ e376-ZNoy) mailto:sage [2024/12/22(日) 19:55:36.15 ID:zKZ5mRgv0.net]
はい

291 名前:デフォルトの名無しさん (ワッチョイ 7b8b-vY+B) mailto:sage [2024/12/22(日) 20:10:00.61 ID:US35TJKc0.net]
へー
なんだかもうゲームよりMOD開発、MOD開発より開発環境開発の方が長くなっちゃってますわ

292 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 20:35:36.44 ID:96LlHbpn0.net]
だって、ここ
別にゲーム開発やないし

プログラムやで

293 名前:デフォルトの名無しさん mailto:sage [2024/12/22(日) 20:50:51.80 ID:F7NwxYJ7M.net]
いまだにmonoで簡単にいじられまくりゲームあるのか

294 名前:デフォルトの名無しさん mailto:sage [2024/12/23(月) 00:10:04.98 ID:XKMn6iMr0.net]
>>289
日本語がややこしいけど
①標準ライブラリのPrivate含む全フィールドにリフレクションを使わずにアクセスして書き換えたりしたい
んで、
②実体DLLを決め打ちで渡せばアクセスできるってところまでできてる
あとは
③実体DLL取得を自動化したい
④なおかつビルドプロセスに組み込みたい
ってことか
MOD開発とか知らんけど面白そうじゃん



295 名前:デフォルトの名無しさん mailto:sage [2024/12/23(月) 00:36:21.82 ID:XKMn6iMr0.net]
いまいち細かい要件がよくわからんけどAppDomain.CurrentDomain.GetAssemblies()で現在ロードされているすべてのアセンブリが取得できるらしいが、これ試した?
駄目だったならどういうところがダメだったのか教えてくれ

296 名前:デフォルトの名無しさん mailto:sage [2024/12/23(月) 17:33:16.62 ID:HWay8A+S0.net]
>>295
要するにIgnoresAccessChecksToGeneratorの話でMSBuild内のコードとして動くものだからそれやってもMSBuildがロードしてるものが返されるだけとなる
ILSpyなんかもtypeof(object)などから解決してるので上記の理屈でそのまま移植はできない

297 名前:デフォルトの名無しさん mailto:sage [2024/12/23(月) 17:42:25.10 ID:HWay8A+S0.net]
>>293
マルチメインじゃなくmodフレンドリーなゲームならil2cpp化せずそのまま出してるゲームも普通に多いよ
改変やチート防止のためなら難読化含めてやったところでそこまで難易度上がらないからそれ目的ならRustみたいにカーネルドライバ付けるしかない

298 名前:デフォルトの名無しさん mailto:sage [2024/12/24(火) 18:58:01.04 ID:9YLK2p020.net]
個人開発の局所的な用途のマイナーツールの話が原発の建設並の重大事なのか
ちょっと難しすぎてわかんねえな

299 名前:デフォルトの名無しさん mailto:sage [2024/12/24(火) 19:41:54.52 ID:RgkKZ0Pj0.net]
原発ってただの湯沸かし器じゃん
燃料がちょっとヤバイってだけで高尚なC#のプログラムと比較すんなよ

300 名前:デフォルトの名無しさん mailto:sage [2024/12/25(水) 08:00:53.24 ID:vP0zyznod.net]
C#だってただの道具
しかもC#だけじゃお湯も沸かせない
高尚とかちゃんちゃらおかしい

301 名前:デフォルトの名無しさん mailto:sage [2024/12/25(水) 08:26:32.01 ID:ML8x6ihA0.net]
ツールは手段であって目的はアクセシビリティバイパスだから言語レベルのスケールの話な
実際これ求めてる人は少なくないからUnsafeAccessorが実装された訳で
てかリフレクションの方が文字列で指定してる分よっぽど危険だと思うんだけどな

302 名前:デフォルトの名無しさん mailto:sage [2024/12/25(水) 21:07:50.83 ID:G9TljzDw0.net]
エロがビデオを進化させてきようにチートがソフトウェアを進化させるんだよ
湯沸かししかできない原発野郎は難しいなら黙ってろ

303 名前:デフォルトの名無しさん mailto:sage [2024/12/25(水) 21:35:48.64 ID:7oEpQVAc0.net]
煽りたいだけのやつが居着いちゃってるのか、このスレ

304 名前:デフォルトの名無しさん mailto:sage [2024/12/25(水) 21:39:40.34 ID:WXVFxdaX0.net]
いつものことだよあぼーんしときな



305 名前:デフォルトの名無しさん mailto:sage [2024/12/25(水) 21:44:21.01 ID:WWJbrOfz0.net]
だぁ~から
ドーンおじはコテ付けろや

306 名前:デフォルトの名無しさん mailto:sage [2025/01/01(水) 16:01:04.94 ID:nGCOTvnw0.net]
Enum.IsDefined(enumType, intValue)ってボックス化する?

AIに聞いたら最初は「ボックス化しない」とか言われたんだけど、第2引数がobject型として受け取ることを指摘したら「ボックス化するかもしれません」みたいな曖昧な返答されてよく分からなくなってきた

307 名前:デフォルトの名無しさん mailto:sage [2025/01/01(水) 16:03:34.19 ID:zfs+VkVC0.net]
object型ならするよ
.NETのバージョンにもよるけどgeneric版の方が型がコンパイル時解決されるからパフォーマンスは良い

308 名前:デフォルトの名無しさん mailto:sage [2025/01/01(水) 16:07:11.80 ID:nGCOTvnw0.net]
だよね ありがとう

309 名前:デフォルトの名無しさん mailto:sage [2025/01/01(水) 16:23:43.79 ID:nGCOTvnw0.net]
確かにジェネリクスでstruct制約付けたらボックス化回避できそう
ありがとう

public TEnum ConvertToEnum<TStruct, TEnum>(TStruct value)
where TStruct : struct
where TEnum : Enum
{
if (!Enum.IsDefined(typeof(TEnum), value))
throw new ArgumentException();

return Unsafe.As<TStruct, TEnum>(ref value);
}

310 名前:デフォルトの名無しさん [2025/01/01(水) 22:57:38.89 ID:tBHA6FMH0.net]
JetbrainsやILSpyでIL見てboxあるかどうかみればいいんじゃね

311 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 11:32:40.83 ID:jXb+sjQI0.net]
ハック的なことなんだけどインスタンスのオブジェクトヘッダに埋め込まれるクラスハンドルへのポインタ?をインスタンス無しで得る方法って無いかな
typeof(MyClass)ってすると正にそのポインタが「mov rcx, 7FFB716DE758 -> call clrのtype取得関数」って感じのアセンブラが生成される訳だけど、その7FFB716DE758を得たいんだよね
インスタンスがあればUnsafeライブラリ用いて簡単に得られるのだけど

312 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 11:34:05.08 ID:jXb+sjQI0.net]
文章修正してたら日本語おかしくなったけどもし知ってる方いたらヒントでも何でも教えていただきたい

313 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 12:00:57.31 ID:ejyfLYzx0.net]
GetTypeで得られるものとは違うわけ?

314 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 12:51:25.22 ID:jXb+sjQI0.net]
>>313
GetTypeやtypeofで得られるものはあくまでもType型のマネージドインスタンスだから全く違う
だけど逆アセをするとtypeof()時には即値でハンドルへのポインタ?がアセンブラコードとして埋め込まれてるので内部的にはめちゃくちゃ簡単に得る方法があるはずなんだよね



315 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 14:52:24.28 ID:jXb+sjQI0.net]
一応自己解決だけどGetTypeやtypeofで得られたTypeインスタンスから「type.TypeHandle.Value」で希望のものは得られた
本来即値で得られるはずなのに冗長でもやもやはするが

316 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 15:09:15.71 ID:gpRv5mHv0.net]
ChatGPTに聞いたら同じ答えが返ってきたけどRuntimeTypeHandle.Valueは環境によってメソッドテーブルへのポインタじゃなくEETypeへのポインタや実装依存のメタデータへのポインタになる場合もあるから自分で確認しろよとのこと

317 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 06:49:44.36 ID:LNgv56j/0.net]
そらJITなんだから・・・

318 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 10:13:37.11 ID:m26c//aC0.net]
いやJITは関係ないぞ

319 名前:デフォルトの名無しさん (ワッチョイ 9a8b-IJXt) mailto:sage [2025/02/01(土) 11:06:41.29 ID:dQW8A9nv0.net]
JITだろうが何だろうがconst intなんかは即値で埋め込まれるしね
だからクラス名.TypeHandleValueみたいなconst持っててくれたら嬉しいんだけど需要ほぼゼロすぎるか

320 名前:デフォルトの名無しさん (ワッチョイ 1a9d-natb) mailto:sage [2025/02/01(土) 12:12:47.05 ID:m26c//aC0.net]
ん?即値で得られない理由の話だったか
そっちならJIT関係あるわな

321 名前:デフォルトの名無しさん (ワッチョイ 9a8b-IJXt) mailto:sage [2025/02/01(土) 12:17:46.65 ID:dQW8A9nv0.net]
いや関係ないよ
なぜなら逆アセすれば分かるけど思いっきりレジスタ長以下のconst同様の挙動を見せてるからね
typeof時にね

322 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 12:48:59.04 ID:MtSj47O+0.net]
逆アセw

323 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 12:53:04.51 ID:LNgv56j/0.net]
アドレスとかプロセス起動のたびに変わることは無いんだっけ?

324 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 12:59:03.20 ID:dQW8A9nv0.net]
>>323
.NETの場合は当然変わるしネイティブでも設定次第では変わり得る
でもそもそもC#やJavaは実行時にその都度機械語を組み立てて行く訳だから、であればその都度埋め込めばいいだけの話



325 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 13:11:42.17 ID:LNgv56j/0.net]
なら結局、ユーザークラスじゃ都度変わりうるってことじゃ?

326 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 15:14:32.83 ID:XDtywhx90.net]
>>321
それはJITやAOT後のものを見てるからでしょ
JIT/AOT時に異なる相対アドレスに配置できる余地を残すためにC#/ILの段階では固定しない

327 名前:デフォルトの名無しさん mailto:sage [2025/02/02(日) 01:00:15.78 ID:U03i5Xdj0.net]
ILの段階で定数になるなら決め撃ちで問題ないだろ

328 名前:デフォルトの名無しさん (ワッチョイ 7f10-cJwu) mailto:sage [2025/02/02(日) 06:57:31.12 ID:VLFyjNJe0.net]
ユーザークラスがILの段階で決め打ちになるわけないだろ

329 名前:デフォルトの名無しさん mailto:sage [2025/02/02(日) 10:55:04.54 ID:NGhOMzti0.net]
ユーザークラスだろうが何だろうが別に関係ないし
IL段階で定数になる必要もなくて事実として実行時に機械語になるタイミングで定数化されるんだよ
プログラマがその定数にアクセスする手段がないだけで

330 名前:デフォルトの名無しさん mailto:sage [2025/02/02(日) 11:18:20.90 ID:RNSPFW0b0.net]
実行時にならんと決まらんものは定数じゃねぇ

331 名前:デフォルトの名無しさん mailto:sage [2025/02/02(日) 12:43:09.18 ID:NGhOMzti0.net]
定数ってか再三言ってるけど即値だな

332 名前:デフォルトの名無しさん mailto:sage [2025/02/03(月) 22:15:38.62 ID:EtXs2rHFM.net]
インスタンスの型の厳密なチェック typeof (X) == x.GetType() やジェネリック型のチェック typeof (T) == typeof (X) はJITで最適化されるから、
質問者のケースがもしこれらに該当するなら変なハックは必要ない

333 名前:デフォルトの名無しさん mailto:sage [2025/04/14(月) 17:39:25.74 ID:XKwEHxpo0.net]
Task<T>を返す非同期メソッドをUIスレッドで呼び出して結果を取得したいのですがどうすればいいのでしょうか?
ConfigureAwait(false)の後やTask.Runでスレッドプール上?で実行されてる
コード内からメソッドをUIスレッドで呼んで結果を取得したいのです

334 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 05:53:28.46 ID:HaWtxdw70.net]
イマイチ質問が把握できないがこういうことか?
UIスレッドでTaskScheduler.FromCurrentSynchronizationContext();してTaskSchedulerを確保しておく
UIスレッドで実行したいメソッドは上記TaskSchedulerを使ってStartするTaskとして実行する

public Form1()
{
  this.Button1.Click += ExecuteAsync;
}
async void ExecuteAsync(object? sender, EventArgs e)
{
  var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
  await Task.Run(async () => {
    using var logger = new Logger("Task");
    var task = Task.Factory.StartNew<Task>(() => SetTextAsync(), CancellationToken.None, CreationOptions.None, scheduler);
    await task;
    await task.Result;
  });
}
async Task SetTextAsync() {
  await Task.Delay(1000);
  this.Text = DateTime.Now.ToString("HH:mm:ss");
}



335 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 05:58:12.67 ID:HaWtxdw70.net]
あ、TaskCreationOptionsのTaskが抜けてる…
async Task SetTextAsync()の代わりにasync Task<string> GetTextAsync()だったら
StartNew<Task<string>>にしてvar text = await task.Resultすればいい

336 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 07:31:16.54 ID:QZV5gxIh0.net]
ああ、ありがとうごいます
それっぽいです
要はスレッドプールなどで実行されてるメソッドから
途中でダイアログなどを出してユーザのアクションの結果で更に処理を
進めるかキャンセルするかを決定したかったにです

同期コンテキストは調べたのですがこのPostなんたらじゃできないなと..
TaskSchedulerの方から攻めるのですね

ありがとうございます

337 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 07:41:21.34 ID:QZV5gxIh0.net]
ボタンなど押して非同期メソッドを呼び出す
この時、非同期メソッドには介入が必要な時に呼び出される非同期コールバックを渡せるようにする

呼び出し側で、非同期コールバックとして
ダイアログなどをだしたりする
ダイアログの表示などはUIスレッド実行したかった

こんな感じでした

338 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 15:31:47.59 ID:yzNZC+ym0.net]
BOOL TestFunc(DWORD dwType, LPBYTE pBuffer, LPDWORD pcbBufSize);
dwType:欲しいデータのタイプコード
pBuffer:要求したデータを入れるバッファへのポインタ
pcbBufSize:pBufferが指すバッファのサイズ

例えば↑のような関数をエクスポートしてるアンマネージDLLがあって
DllImportする時のプロトタイプ宣言ってどう書いたらいいんでしょ?

339 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 15:33:52.84 ID:yzNZC+ym0.net]
LPDWORDはref uintでいいのかなと思うけど
LPBYTEとか、それこそLPVOIDだのハンドル系受け取る引数なんかはどう宣言したものかよく解らなくて

340 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 19:05:55.86 ID:HaWtxdw70.net]
典型的にはこう
bool TestFunc(uint dwType, byte[] pBuffer, out uint pcbBufSize);
ref/outで宣言すると使いやすいけどNULLを渡せなくなるってのが問題になったりすることもある
ケースバイケースなので一概には言えない
ポインタが絡むなら誰がメモリ確保して誰がどうやって解放するのかを把握してないといけない場合もある

341 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 19:58:01.06 ID:VD2CYluqM.net]
第三引数は普通はoutじゃないきがするけど

342 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 20:27:15.14 ID:qW3EbLcWM.net]
outだと呼び出し元からバッファサイズを渡せないな

343 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 20:47:35.76 ID:JiAmFx7+0.net]
refじゃあかんの?

344 名前:デフォルトの名無しさん mailto:sage [2025/04/16(水) 20:48:46.57 ID:yzNZC+ym0.net]
>>340
おぉ、ありがとう
ちょっとそれ元に弄ってみるます



345 名前:デフォルトの名無しさん [2025/04/20(日) 10:42:31.48 ID:T4EZ0xEH0.net]
refとかout使うと機械語的にはゴミラッパーが生成される
ついでにboolも実はネイティブ型ではないので同様にゴミが生成される
多少可読性や安全性を犠牲にして良いなら
int TestFunc(uint dwType, byte* pBuffer, uint* pcbBufSize)とすればC/C++と遜色ない機械語になる
戻り値はintなので != 0としてbool判定をする手間がかかるけどね

ついでに.NETCore系統で且つ内部でIOなどを行わずに計算量が少なく割とすぐ戻る事が確定している場合は[DllImport("native.dll"), SuppressGCTransition]とすると尚良し

346 名前:デフォルトの名無しさん [2025/04/20(日) 10:47:34.35 ID:T4EZ0xEH0.net]
もしネイティブ側の戻り値がBOOLではなくboolならC#側はbyteにすればいい
boolって実は結構罠だからな






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<130KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef