Приложение может создавать много объектов в памяти (используя
new).
Бывает так, что приложение когда запущено может использовать не все объекты, которые создались в памяти.
То есть мы выделили память для объекта, а объект не используем.
И получается что наше приложение использует много памяти хотя по хорошему приложение может использовать меньше памяти.
Для решения используется класс
Lazy<T>
Класс Lazy<T>
Класс
Lazy<T> делает так чтобы объект с типом
T в памяти не создавался.
Объект с типом
T будет создан в памяти, когда мы вызовем любой метод.
Это означает, что когда мы будем использовать объект
T то только тогда он будет создан в памяти.
В
Lazy<T> чтобы вызвать метод для
T то нужно написать так:
Пример:
C#
class Book
{
protected string Name;
protected int Price;
public void SetBook(string name, int price)
{
Name = name;
Price = price;
}
}
class Program
{
static void Main(string[] args)
{
// создаем объект Lazy<Book>
Lazy<Book> book1 = new Lazy<Book>();
// Взывываем метод SetBook класса Book
book1.Value.SetBook("Путешествие по Италии", 50);
// Объяснение:
// 1) сначала выделится память для Book вот так new Book
// 2) потом вызовется метод SetBook
}
}
C#
using System;
namespace ConsoleApplication1
{
class Book
{
protected string Name;
protected int Price;
public void SetBook(string name, int price)
{
Name = name;
Price = price;
}
public void ShowBook()
{
Console.WriteLine("Книга " + Name + " , стоимость " + Price + " рублей");
}
}
class Program
{
static void Main(string[] args)
{
// // создаем объект Lazy<Book>
// Внимание! память для Book не выделится
Lazy<Book> book1 = new Lazy<Book>();
// Чтобы вызывать метод нужно написать Value а потом название метода
book1.Value.SetBook("Путешествие по Италии", 50);
// Как только мы взывали метод SetBook тогда:
// 1) сначала выделится память для Book вот так new Book
// 2) потом вызовется метод SetBook
// на экране увидим "Книга Путешествие по Италии , стоимость 50 рублей"
book1.Value.ShowBook();
}
}
}
C#
using System;
namespace ConsoleApplication1
{
class Book
{
public string Name;
public int Price;
public void ShowBook()
{
Console.WriteLine("Книга " + Name + " , стоимость " + Price + " рублей");
}
}
class Program
{
static void Main(string[] args)
{
// создаем объект Lazy<Book> используя конструктор с делегатом
// Внимание! память для Book не выделится
Lazy<Book> book1 = new Lazy<Book>(() => new Book() { Name = "Путешествие по Италии", Price = 50 });
// Чтобы вызывать метод нужно написать Value а потом название метода
book1.Value.ShowBook();
// Как только мы взывали метод ShowBook тогда:
// 1) сначала для создания объекта T в памяти вызовется делегат:
// () => new Book() { Name = "Путешествие по Италии", Price = 50 }
// 2) а потом вызовется метод ShowBook
}
}
}