Книга: Программирование мобильных устройств на платформе .NET Compact Framework

"Структуры" и .NET Compact Framework

"Структуры" и .NET Compact Framework

Во многих случаях, если вы хотите инкапсулировать некоторые простые данные, то для локальных переменных внутри функций гораздо эффективнее использовать не объекты, а структуры. Структура — это просто удобный способ сгруппировать в одном пакете взаимосвязанные данные, а не передавать их в виде отдельных переменных.

Структуры обладают более простыми свойствами по сравнению с объектами, но могут "упаковываться" в объекты и передаваться внутри программы так же, как они, если в этом возникает необходимость. Использование структур предоставляет определенные удобства и может привести к некоторому увеличению производительности (по сравнению с вариантом, когда используются объекты), но поскольку они выглядят, а во многих случаях и действуют подобно объектам и могут заключаться в объекты-оболочки, необходимо тщательно взвешивать, когда их следует использовать, чтобы избежать дополнительных накладных расходов и не создать лишнего мусора. В сомнительных случаях тестируйте алгоритмы, используя как отдельные переменные (например, базовые типы, подобные int, string, double), так и структуры, чтобы сравнить производительность приложения в обоих случаях и убедиться в том, что она остается примерно одинаковой.

Более подробную информацию по этому вопросу вы можете получить, обратившись к разделам справочной документации .NET Compact Framework, посвященным типам значений ("value types") и структурам ("struct"). Ниже приводится пример с объявлениями структуры и класса:

//Примечание. В VB.NET это был бы тип (type), а не структура (struct)
//Это структура
struct MyRect_Type {
 public int x;
 public int у;
}
//Это класс
class MyRect_Class {
 public int x;
 public int у;
}
//Код примера
class TestClass {
 public void foo() {
 //Требуется распределять как объект
 MyRect_Class myRectClass = new MyRect_Class();
 myRectClass.x = 1;
 myRectClass.y = 2;
 //Этот оператор распределяет новый объект
 myRectClass = new MyRect_Class();
 //Можно объявить как скалярный тип
 MyRect_Type myRectType;
 myRectType.x = 1;
 myRectType.y = 2;
 //Этот оператор обнуляет значения в структуре, но не
 //распределяет память для нового объекта!
 myRectType = new MyRect_Type();
}

Оглавление книги


Генерация: 1.073. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз