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
226 名前:デフォルトの名無しさん (ワッチョイ 6714-oAsD) mailto:sage [2024/12/13(金) 01:16:53.76 ID:sFncMVeV0.net] >>203 インターフェース分離の原則は「クラスが必要としないメソッドを実装しない」ってだけ ペンギンのような飛べない鳥が IFlyable を実装しないのは正しい あとは「飛べる鳥」をインターフェースで分かるようにしてやればいい isを使う羽目になったのは飛べるかどうかわからない IBirdをListにしてるから --- interface IBird { string Name { get; } } interface IFlyable : IBird { void Fly(); } // ペンギンは飛べない class Penguin : IBird { public string Name => "Penguin"; } // ワシは飛べる class Eagle : IFlyable { public string Name => "Eagle"; public void Fly() => Console.WriteLine($"{Name} is flying!"); } // 飛べる鳥だけを扱うリストを作る List<IFlyable> flyableBirds = new List<IFlyable> { new Eagle() }; foreach (var bird in flyableBirds) { bird.Fly(); // 明示的に飛べる鳥しか扱わない }
227 名前:デフォルトの名無しさん (ワッチョイ e701-5/pq) mailto:sage [2024/12/13(金) 01:54:21.75 ID:aJRVKPMX0.net] こいつら病気なんか
228 名前:デフォルトの名無しさん (ワッチョイ df2b-2fXw) mailto:sage [2024/12/13(金) 01:55:37.37 ID:0Vp4NoOf0.net] だね
229 名前:デフォルトの名無しさん mailto:sage [2024/12/13(金) 06:18:42.75 ID:ooVm180t0.net] SOLIDにしても所詮理想論であって現場に即してるわけじゃないしなぁ
230 名前:デフォルトの名無しさん mailto:sage [2024/12/13(金) 07:39:08.04 ID:WeveN3pQM.net] せやな
231 名前:デフォルトの名無しさん [2024/12/13(金) 17:30:15.58 ID:LAtQrsJV0.net] サイコパスの脳の違いを発見。一般の人に比べ線条体が大きいことが判明 karapaia.com/archives/52313287.html
232 名前:デフォルトの名無しさん (スププ Sdff-AHQg) mailto:sage [2024/12/13(金) 20:28:57.37 ID:DLDRNjlrd.net] 関数型がいいんだね!
233 名前:デフォルトの名無しさん mailto:sage [2024/12/14(土) 09:23:37.03 ID:9hmM95L70.net] 後から増えた「道具を使う」には何かいい感じにデフォルト実装つけとけば既存のクラスには影響しないんじゃない
234 名前:デフォルトの名無しさん mailto:sage [2024/12/14(土) 12:26:32.43 ID:vNNE6Utb0.net] それを派生というのでは?
235 名前:デフォルトの名無しさん [2024/12/14(土) 12:52:03.62 ID:/3oGIJ400.net] C# 8 からはインターフェースのデフォルト実装が使える
236 名前:デフォルトの名無しさん mailto:sage [2024/12/14(土) 14:27:07.29 ID:TQJHLK8K0.net] Win10や11のOS付属のpowershell5.1でインラインで書けるC#ってバージョンちょっと古くね できれば新しいRoslynのC#をpowershellから使いたいのだが なんか昔の記事しか見つからん
237 名前:デフォルトの名無しさん mailto:sage [2024/12/14(土) 15:05:36.28 ID:uE892PPx0.net] どうせ別に入れる必要があるならPowerShell 7入れれば良くね
238 名前:デフォルトの名無しさん [2024/12/14(土) 16:09:38.02 ID:SXm2TFHi0.net] >>236 起動時に出て来るメッセージすら読めないのか
239 名前:デフォルトの名無しさん mailto:sage [2024/12/15(日) 03:52:31.32 ID:c6iml+qS0.net] >>238 お前はこれでも読んどけ https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.4 Roslyn単体で使うだけならビルドツール拾ってくるだけだが Powershell上げるとなると仕様も大幅に変わってたりして無理だし俺が出した要件の解にもなってない
240 名前:デフォルトの名無しさん [2024/12/15(日) 04:43:36.26 ID:OuaeEhke0.net] >>239 馬鹿が必死に調べただけの浅い知識で言い訳してる
241 名前:デフォルトの名無しさん mailto:sage [2024/12/15(日) 09:22:53.93 ID:6s9C3wLNM.net] 今のところ互換性の為に残してあるんだろう それを変えちゃうと問題が起こる可能性があるしMS側のメンテがめんどうなので 変えたい人は7とセットで入れろということなんだろう
242 名前:デフォルトの名無しさん mailto:sage [2024/12/15(日) 13:32:12.27 ID:1H80RXIX0.net] >>239 バカの相手はしなくていいわ その情報はありがたいが
243 名前:デフォルトの名無しさん mailto:sage [2024/12/16(月) 00:02:44.03 ID:jraeIOUM0.net] PowerShellは完全に袋小路だからもう諦めた方がいい 6以降は事実上Azure専用
244 名前:デフォルトの名無しさん (ワッチョイ db8e-Dyog) [2024/12/16(月) 03:32:32.19 ID:B9vFRMjT0.net] >>242 うわっ 自分の言い訳コメントに自作自演で恥ずかしい馬鹿発見
245 名前:デフォルトの名無しさん [2024/12/16(月) 04:36:14.08 ID:M2IkaScH0.net] なんで作っては捨ててくスタイルなんかなMicrosoftは
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の段階では固定しない