2016-04-07 19 views
1

私はいくつかの値の種類を入れなければならないさまざまな理由から、メモリに敏感なコードを書いています。さらに、いくつかのウォーミングアップの後、純粋な新しいヒープ割り当てを0にする必要があります。Nの値をboxedした後、私のアルゴリズムはストレージを必要としませんが、これらの値は頻繁に更新する必要があります。ヒープ上にすでに作成されたボックスを再利用できるようにしたいと思います。箱を再利用するには?

次のコードは、ボックスが再利用されないことを示しています(なぜそうではないのでしょうか)。私はそれぞれの箱を再利用できる技術はありますか?

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     object x = 42; 
     object y = x; 
     x = 43; 
     bool isSameBox = Object.ReferenceEquals(x, y); 
     Console.WriteLine("Same box? {0}.", isSameBox); 
    } 
} 

// Output: "Same box? False." 
+0

ボクシングは、値型(つまりint)を参照型にしません。クラスを使用して値の型を格納し、それを再利用することができます。 – Eric

答えて

0

私の解決策は、再利用可能なボックスとして明示的な参照型を導入することでした。

public class ReusableBox<T> where T : struct 
{ 
    public T Value { get; set; } 

    public ReusableBox() 
    { 

    } 

    public ReusableBox(T value) 
    { 
     this.Value = value; 
    } 

    public static implicit operator T(ReusableBox<T> box) 
    { 
     return box.Value; 
    } 

    public static implicit operator ReusableBox<T>(T value) 
    { 
     return new ReusableBox<T>(value); 
    } 
}