0

私はここでプログラミング用語に行き詰まり、混乱しており、Common Type SystemページからこれらのいくつかのMSDN理論文を実際に正しく表現する(書く)方法について考えをまとめることができません。

誰かがこれについて私を助けてくれますか、私はこれを理解したいです! そして、誰かがコードを書いてこの問題についてコメントしてくれるとしたら、それは素晴らしいことであり、称賛に値するでしょう!

//これはテキストです (「構造」の段落から取得したものです): https://msdn.microsoft.com/en-us/library/zcx1eb1e(v=vs.110).aspx#

「値の型ごとに、共通言語ランタイムは対応するボックス化された型を提供します。これは、値の型と同じ状態と動作を持つクラスです。値の型のインスタンスは、値型を受け入れるメソッドに渡されるときにボックス化されます。 System.Object 型のパラメーター. 参照渡しパラメーターとして値型を受け入れるメソッド呼び出しから制御が戻ると、ボックス化が解除されます (つまり、クラスのインスタンスから値型のインスタンスに変換されます)。言語では、ボックス化された型が必要な場合に特別な構文を使用する必要があります。他の言語では、必要に応じてボックス化された型が自動的に使用されます。値の型を定義すると、ボックス化された型とボックス化されていない型の両方が定義されます。

よろしくお願いします。

4

2 に答える 2

0

と値のobject型は異なる方法で格納されます。Anobjectは、そのオブジェクトのバイナリ表現を含むヒープ内のメモリへのポインタです。スタックは、ポインターと値の型を格納するために割り当てられたメモリです。integerしたがって、関数にはorへのポインターがありませんbool。実際の値のコピーが渡されます。

しかし、次のような方法がある場合:

string GetString(object o)
{
    return o.ToString();
}

そのメソッドは、値の型を渡した場合でも、メモリ内の場所へのポインターであるオブジェクトを想定しています。そのため、フレームワークは、intその値への参照 (ポインター) を関数に渡すことができるように、それを含むヒープに格納されたオブジェクトを作成する必要があります。それがボクシングです。

ボクシングは暗黙的です。intを に変換するために何らかの変換関数を呼び出す必要はありませんobject

そのオブジェクトを取得して値型としてキャストすると、ボックス化解除が発生します。例えば、

object x = 5;   //Boxes the value to create an object with a pointer
var y = (int)x; //Unboxes the value, creating an int on the stack.

ヒープに格納され参照されているオブジェクトをボックス化解除するxと、検査され、その値が取得されます。ボックス化解除は明示的です。何かをobject値型に変換するときは、変換先の型を指定する必要があります。

于 2016-05-05T01:29:30.540 に答える