問題タブ [unboxing]
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.
.net - 構造体の配列を同じ構造体の別の配列に割り当てる
Vb.netで、構造体の配列を同じ構造体の別の配列に割り当てようとしています
ifoの変更がinfo2に反映されると、この割り当てはrefによって発生します。
情報の変更がinfo2に反映されたり、その逆が行われたりしたくないのですが、割り当て後、どうすればこれを達成できますか?
java - Android でのボクシングとアンボクシング
私はAndroidアプリケーションを開発しています。
私は次のインターフェースを持っています:
で定義されたテーブルごとにenum Table
、そのテーブルを表すオブジェクトになります。
私の問題は parameter についてObject item
です。このメソッドのいずれかを呼び出すたびに、各アイテムをアンボックスする必要がありますが、これが Android で非常に遅くなるかどうかはわかりません。
より良い解決策を知っていますか?SQLiteDatabase オブジェクトを相互に共有する必要があるため、テーブルごとに DBAdapter を作成したくありません。
アップデート:
これらのメソッドに渡す必要があるオブジェクトの例を次に示します。
ありがとう。
c# - 列挙型をアンボックスすると奇妙な結果が得られるのはなぜですか?
次のことを考慮してください。
2つのこと::
- 箱を開けるのはなぜ
StringComparison
ですか?これは、基になるタイプがであるためだと思いますがInt32
、それでも奇妙だと思います。 - なぜ
nullableEnum
nullの値を持つのですか?
私が理解しているように、ボックス化された値型からの唯一の有効なアンボックス化は、その型またはnull許容型です。int
にボックスを解除できる場合Enum
、null許容値に同じことが当てはまらないのはなぜですか?同様に、5の代わりにボックス化StringComparison.OrdinalIgnoreCase
した場合、それはnullableInt
nullになりますが、nullableEnum
そうではありません。
c# - クラスの一部として宣言されている場合、ValueType はボックス化されますか?
このクラスを考えると:
「MyField」メンバーは、複数のスレッドからアクセスできるため、マネージドヒープに確実に存在する必要があるため、スレッドスタックにはないと思いますが、使用されるたびにボックス化およびボックス化解除されることを意味しますか?
前もって感謝します
c# - ジェネリック医薬品によるボクシングと開開
整数のコレクションを作成する.NET1.0の方法(たとえば)は次のとおりです。
これを使用することのペナルティは、ボクシングとアンボクシングによる型の安全性とパフォーマンスの欠如です。
.NET 2.0の方法は、ジェネリックを使用することです。
(私の理解では)ボクシングの代償は、ヒープ上にオブジェクトを作成し、スタックに割り当てられた整数を新しいオブジェクトにコピーし、その逆を行う必要があることです。
ジェネリックの使用はこれをどのように克服しますか?スタックに割り当てられた整数はスタックに残り、ヒープからポイントされますか(スコープから外れるとどうなるかという理由で、これは当てはまらないと思います)?スタックのどこかにコピーする必要があるようです。
本当に何が起こっているのですか?
.net - 列挙型が System.Enum から派生し、同時に整数であるというのはどうしてですか?
編集:下部にコメント。また、この.
これが私を混乱させているものです。私の理解では、このような列挙型がある場合...
...私が本質的に行ったことは、2 つの定義済みの値で呼び出される値の型を定義することです。この型は、参照型(値型では通常実行できないもの (少なくとも C# では実行できないが、この場合は許可されている))から派生し、値との間で前後にキャストする機能を備えています。Animal
Dog
Cat
System.Enum
int
上記の列挙型について説明した方法が真である場合、次のコードが をスローすると予想されますInvalidCastException
。
通常、値の型を正確な型以外のものとしてボックス化解除することはできませんSystem.Object
。では、上記はどのように可能ですか?Animal
型が(に変換できるint
だけでなく)であり、同時に( に変換できるだけでなく) であるかのようです。多重継承ですか?どういうわけか(私が可能だとは思っていなかったもの)から継承していますか?int
Enum
Enum
System.Enum
System.Int32
編集:上記のいずれにもなりません。次のコードは、これを(私が思うに)決定的に示しています。
上記の出力:
列挙に関する MSDN ドキュメントと C# 仕様の両方で、 「基になる型」という用語が使用されています。しかし、これが何を意味するのかはわかりませんし、列挙型以外のものを参照して使用されているのを聞いたこともありません。「基になるタイプ」とは実際にはどういう意味ですか?
それで、これは CLR から特別な扱いを受けるもう 1 つのケースですか?
私のお金はそうです...しかし、答え/説明がいいでしょう。
更新: Damien_The_Unbelieverは、この質問に真に答えるために参照を提供しました。説明は、列挙型に関するセクションの CLI 仕様のパーティション II にあります。
バインドの目的で (たとえば、メソッド定義を呼び出すために使用されるメソッド参照からメソッド定義を見つけるため)、列挙型はその基になる型とは異なる必要があります。コードの検証と実行を含む他のすべての目的のために、ボックス化されていない列挙型は、その基になる型と自由に相互変換します。列挙型は、対応するボックス化されたインスタンス型にボックス化できますが、この型は基になる型のボックス化された型と同じではないため、ボックス化によって列挙型の元の型が失われることはありません。
編集 (また?!) : ちょっと待って、実際、最初にそれを正しく読んだかどうかはわかりません。特殊なボックス化解除動作自体を 100% 説明していない可能性があります (ただし、この問題に多くの光を当てるため、ダミアンの回答は受け入れられたままにしています)。これは引き続き調べてみます…
別の編集:男、その後yodaj007の答えは別のループに私を投げました。int
どういうわけか、列挙型は;とまったく同じではありません。それでも、キャストなしint
で列挙型変数に割り当てることができますか? ぶっ?
これは最終的にHans's answerによって照らされていると思います。それが私がそれを受け入れた理由です。(ごめんなさい、ダミアン!)
c# - ボクシング/アンボクシング-値型のみ?Ref.types-キャスト?
MSDNから、ボクシング/アンボクシングは値型をオブジェクトとして扱うためのものであると読みました。しかし、ArrayListについて読むと、ボクシングも行うことがわかります。したがって、ArrayListは値型と参照型をオブジェクトとして保持するため、私はかなり混乱しています。また、以下は用語の観点から開開ではなく、ただキャストしているだけですか?
c# - BoxとUnBoxはどういう意味ですか?
重複の可能性:
C#でボクシングとアンボクシングが必要なのはなぜですか?
ボクシングとアンボクシングとは何ですか?トレードオフは何ですか?
C#では、doesitは「BoxandUnBox」とはどういう意味ですか?
これは、私がテキストを作成したMSDNからの抜粋です。
しかし、この便利さには代償が伴います。ArrayListに追加される参照または値の型は、暗黙的にObjectにアップキャストされます。項目が値型の場合、リストに追加するときにボックス化し、取得するときにボックス化を解除する必要があります。キャスティングとボクシングおよびアンボクシングの両方の操作により、パフォーマンスが低下します。大規模なコレクションを反復処理する必要があるシナリオでは、ボックス化とボックス化解除の効果が非常に重要になる可能性があります。
ありがとう!
c# - 「out」パラメーターに値の型を渡すと、変数がボックス化されますか?
ボックス化とボックス化解除は、パフォーマンスの点で比較的高価であることを認識しています。私が疑問に思っているのは:
メソッドのout
パラメーターに値の型を渡すと、変数のボックス化/ボックス化解除が発生しますか (したがって、パフォーマンスが低下します)? コンパイラはこれを最適化できますか?
c# - C#/。NEtでは、動的型はオブジェクトよりも少ないスペースで済みますか?
ユーザーが処理する変数を指定できるコンソールアプリケーションがあります。これらの変数には、string、double、およびlongの3つのフレーバーがあります(doubleおよびlongは、最も一般的に使用されるタイプです)。ユーザーは好きな変数を好きな順序で指定できるので、私のシステムはそれを処理できなければなりません。この目的のために、私のアプリケーションでは、これらをオブジェクトとして保存し、必要に応じてキャスト/アンキャストしていました。例えば:
私の理解では、ボックス化されたオブジェクトは、標準の値型よりも少し多くのメモリ(約12バイト)を使用します。
私の質問は、これらの値を格納するために動的キーワードを使用する方が効率的でしょうか?それはボクシング/アンボクシングの問題を回避するかもしれません、そしてそれがより効率的であるならば、これはパフォーマンスにどのように影響しますか?
編集
いくつかのコンテキストを提供し、「これを心配するのに十分なRAMを使用していることを確認してください」を防ぐために、最悪の場合、心配するデータポイントは420,000,000個あります(60変数* 7,000,000レコード)。これは、各変数(いくつかのブール値などを含む)について私が保持している他のデータの束に追加されます。したがって、メモリの削減は大きな影響を及ぼします。