2016-04-07 2 views
1

Я пишу код, чувствительный к памяти, где по разным причинам я должен указывать некоторые типы значений. Более того, после некоторой разминки мне нужно, чтобы чистые новые распределения кучи были равны 0. После того, как я ввел значения N, мой алгоритм не нуждается в большем количестве памяти, но эти значения должны часто обновляться. Я хотел бы иметь возможность повторно использовать ящики, уже созданные в куче.Как использовать коробку?

Следующий код предполагает, что ящики не используются повторно (я могу себе представить, почему нет). Есть ли другой метод, когда я могу повторно использовать каждую коробку?

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); 
    } 
} 
Смежные вопросы