問題タブ [boxing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
7 に答える
3236 参照

c# - インターフェイスへのキャストはボクシングの変換ですか?

私はインターフェースIEntityを持っています

そして、私はこのインターフェースを実装するクラスEmployeeを持っています

今、私が次のコードを持っている場合

それがボクシングの変換ではない場合、キャストはどのように機能しますか?

0 投票する
7 に答える
40654 参照

java - Integerとintを比較すると、JavaでNullPointerExceptionがスローされるのはなぜですか?

この状況を観察することは私にとって非常に混乱しました:

したがって、ボクシング操作が最初に実行され(つまり、Javaがからint値を抽出しようとするnull)、比較操作の優先度が低いと思うので、例外がスローされます。

問題は、なぜJavaでこのように実装されているのかということです。なぜボクシングは参照を比較するよりも優先度が高いのですか?nullまたは、なぜ彼らはボクシングの前に検証を実装しなかったのですか?

現時点では、がラップされたプリミティブでスローされ、実際のオブジェクトタイプNullPointerExceptionでスローされない場合、一貫性がないように見えます。

0 投票する
5 に答える
773 参照

c# - ボックス化とアンボックス化、出力が両方とも「System.Object」ではないのはなぜですか?

私は次のコードを取得しました:

出力は次のとおりです。

なぜ両方ではないのSystem.Objectですか?

0 投票する
3 に答える
296 参照

.net - パラメーターの型としてインターフェイスを使用するよりも、一般的な制約を優先する必要がありますか?

この簡単な関数を考えてみましょう:

ここで、このメソッドに を渡すと、intボックス化されます。したがって、上記のメソッドを次のように定義した方がよいのではないでしょうか。

このように一般的な制約を使用すると、上記のコードとまったく同じ機能を実現できますが、ボックス化が不要であるという利点が追加されます ( の呼び出しIsPositive<int>は type のパラメーターを受け入れるためint)。

上記のコード例は明らかに無意味です。しかし、私のより広い質問は、値型の潜在的なボックス化を回避するために、後者の方法でメソッドを定義することは常に意味があるのではないでしょうか?

答えは「はい、しかし、より多くの入力が必要であり、多くの場合、メソッドがいくつかを受け入れる場合など、値の型に遭遇する可能性は非常に低い」と思われますIEnumerable<T>。しかし、現時点で私を逃れているこれらのアプローチの間に大きな違いがあるかどうか疑問に思っています.

0 投票する
6 に答える
3088 参照

c# - C#のvarキーワードはボクシングを引き起こしますか?

上司varは、アプリの動作が遅くなったり遅くなったりするため、使用を禁止しています。

本当?

0 投票する
1 に答える
601 参照

c# - ボックスの内容を知らずにuint/intをアンボックス化する

私はobject o箱入りであることが知られているintまたはuint

ボックスに何が入っているのかわかりません。気になるのは、intまたはに強制したい4バイトがあることだけですuint。これは、unchecked(ボックスではなく)値があるコンテキストで正常に機能します。

注:デフォルトでは、C#のすべてがチェックされていません。リテラルを処理していて、コンパイラーが本当に自分自身を足で撃ちたいかどうかを知りたいので、チェックされていないコンテキストはここでのみ必要です。

問題は、ボックス内の内容がわからないことです(4バイト以外)が、間違ったタイプにボックスを解除しようとすると、ランタイムがそうしますInvalidCastException。私はこれが妥当な実行時の動作であることを知っていますが、この場合、私は自分が何をしているのかを知っており、「チェックされていないボックスから外す」必要があります。そのようなものは存在しますか?

再試行できることはわかっているcatchので、それは答えとしてカウントされません。

0 投票する
3 に答える
1135 参照

java - Javaで整数値をFloatラッパーに割り当てる

以下の作品

しかし、以下はそうではありません:

3 を float に自動的にプロモートし (拡大変換では明示的なキャストが必要ないため)、次に Boxed を Float 型にすべきではありませんか?

Khalid Mogul の Java book で読んだルールのせいですか?

拡大コンバージョンの後にボクシング コンバージョンを続けることはできません

0 投票する
2 に答える
1234 参照

c# - ((IEnumerable)source).OfType の違いは何ですか() および IEnumerable としてのソース

((IEnumerable)source).OfType<T>()とはどう違いますかsource as IEnumerable<T>

私には似ているように見えますが、違います!

sourceのタイプIEnumerable<T>ですが、 としてボックス化されていobjectます。

編集

ここにいくつかのコードがあります:

別の場所で PagedList のインスタンスを作成します

マップされたリストをオブジェクトにキャストする必要がある理由を誰かに教えてもらえれば、本当に感謝しています:)

MapAndCreateSubList メソッドと Map デリゲートは次のとおりです。

0 投票する
2 に答える
2303 参照

c# - 関数の戻り値として宣言されたときに、C# 構造体がボックス化されることはありますか?

簡単な質問ですが、Stack Overflow で決定的な答えが見つかりませんでした。

C#構造体 (値型)は、関数から返されたときに、その大きさに関係なく、常にスタックにコピーされますか? 確信が持てない理由は、MSIL 以外の一部の命令セット (x86 など) では、通常、戻り値がプロセッサ レジスタに収まる必要があり、スタックが直接関与しないためです。

もしそうなら、(期待される) 値の戻り値の型のためにCLRスタックのスペースを事前に割り当てているのは呼び出しサイトですか?

[編集: 回答の要約:] 元の質問の意図からすると、答えはノーです。CLRは、戻り値として送信するためだけに構造体を (黙って) ボックス化することはありません。

0 投票する
3 に答える
7563 参照

c# - Nullableのボクシング/アンボクシングの動作はどうですか可能?

今日の初めに何かが起こったので、頭をかいてしまいました。

タイプの任意の変数をNullable<T>に割り当てることができますnull。例えば:

object最初は、からへの暗黙の変換をなんらかの方法で定義しないと、これがどのように可能になるかわかりませんでしたNullable<T>

しかし、上記の演算子は明らかに存在しません。存在するかのように、少なくともコンパイル時には、次の演算子も合法である必要があります(そうではありません)。

Nullable<T>次に、この型は、次のように、インスタンス化できない任意の参照型への暗黙的な変換を定義できる可能性があることに気付きました。

ただし、これは次に何が起こったのかを説明していません。HasValueプロパティがfalse任意のNullable<T>値の場合、その値は次のようにボックス化されnullます。

さらに、HasValuetrue場合、値は:Tではなくボックスで囲まれます。T?

しかし、これNullable<T>はからへのカスタムの暗黙的な変換があることを意味しているようですobject

これは、すべてのタイプの基本クラスのように明らかに当てはまるわけではなく、object基本タイプとの間のユーザー定義の暗黙的な変換は違法です(そうあるべきです)。

他の値型と同じようにobject x = i;ボックス化する必要があるようです。そうすると、 (をスローするのではなく)と同じ結果が得られます。ix.GetType()typeof(int?)NullReferenceException

少し掘り下げてみたところ、確かに、この動作はNullable<T>タイプに固有であり、C#とVB.NETの両方の仕様で特別に定義されており、ユーザー定義struct(C#)またはStructure(VB.NET )では再現できません。 )。

これが私がまだ混乱している理由です。

この特定のボクシングとアンボクシングの動作は、手動で実装することは不可能のようです。これは、C#とVB.NETの両方が型に特別な処理を与えるためにのみ機能しNullable<T>ます。

  1. Nullable<T>この特別な扱いを受けていない場所に、別のCLIベースの言語が存在する可能性は理論的にはありませんか?したがって、Nullable<T>タイプは異なる言語で異なる動作を示しませんか?

  2. C#とVB.NETはどのようにしてこの動作を実現しますか?CLRでサポートされていますか?(つまり、CLRでは、C#とVB.NET自体が禁止している場合でも、型がボックス化された方法を何らかの形で「オーバーライド」することができますか?)

  3. (C#またはVB.NETで)aをボックス化することも可能ですか?Nullable<T>object