2016-04-07 21 views
1

Çeşitli nedenlerden dolayı bazı değer türlerini kaydetmem gereken bazı bellek duyarlı kodlar yazıyorum. Üstelik, biraz ısındıktan sonra, 0 olması için net yeni yığın ayırmalara ihtiyacım var. N değerlerini kutladıktan sonra, algoritmamın daha fazla depolama alanına ihtiyacı yoktur, ancak bu değerler sık ​​sık güncellenmelidir. Yığında zaten oluşturulmuş kutuları yeniden kullanabilmek istiyorum.Kutu nasıl yeniden kullanılır?

Aşağıdaki kod, kutuların yeniden kullanılmadığını önermektedir (neden olduğunu düşünemiyorum). Her kutuyu yeniden kullanabileceğim farklı bir teknik var mı?

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

Boks, değer tipini (yani int) referans tipine göre yapmayın. Değer türünü saklamak ve yeniden kullanmak için bir sınıf kullanabilirsiniz. – Eric

cevap

0

Çözümüm, yeniden kullanılabilir kutu olarak açık bir başvuru türü tanıtmaktı.

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); 
    } 
}