Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_for_Beginners.doc
Скачиваний:
28
Добавлен:
23.11.2019
Размер:
2.4 Mб
Скачать

Использование встроенных типов данных

Встроенные типы данных используются в программах C# несколькими способами.

Как переменные.

int answer = 42;

string greeting = "Hello, World!";

Как константы.

const int speedLimit = 55;

const double pi = 3.14159265358979323846264338327950;

Как возвращаемые значения и параметры.

----

Можно также определять собственные типы данных, используя Классы, Перечисления или Структуры.

Преобразование типов данных

Преобразование между типами данных можно сделать неявно, в этом случае преобразование автоматически выполняет компилятор, или явно с помощью приведения, в этом случае принудительное преобразование выполняет программист, учитывая риск возможной потери данных.

Пример.

--------

Value and Reference Types

Unlike some programming languages you might be familiar with, C# has two varieties of data types: value and reference. It's important to know the difference if performance is important to your application, or if you are interested in how C# manages data and memory.

When a variable is declared using one of the basic, built-in data types or a user defined structure, it is a value type. An exception is the string data type, which is a reference type.

A value type stores its contents in memory allocated on the stack. For example, in this case the value 42 is stored in an area of memory called the stack.:

int x = 42;

When the variable x goes out of scope because the method in which it was defined has finished executing, the value is discarded from the stack.

Using the stack is efficient, but the limited lifetime of value types makes them less suited for sharing data between different classes.

In contrast, a reference type, such as an instance of a class or an array, is allocated in a different area of memory called the heap. In the example below, the space required for the ten integers that make up the array is allocated on the heap.

int[] numbers = new int[10];

This memory isn't returned to the heap when a method finishes; it's only reclaimed when C#'s garbage collection system determines it is no longer needed. There is a greater overhead in declaring reference types, but they have the advantage of being accessible from other classes.

Типы значений и ссылочные типы

В отличие от некоторых языков программирования, C# имеет две разновидности типов данных: для значения и для ссылки. Если производительность приложения имеет существенное значение или есть заинтересованность в том, как C# управляет данными и памятью, важно знать различия между этими типами.

Если в объявлении переменной используется один из основных встроенных типов данных или определенная пользователем структура данных, значит мы имеем дело с типом значения. Исключение составляет тип данных string, который является ссылочным типом.

Тип значения хранит свое содержимое в памяти, выделенной в стеке. Например, значение 42 в таком случае хранится в области памяти, называемой стеком.

int x = 42;

При выходе из области действия переменной x в связи с завершением выполнения метода, в котором она была объявлена, значение удаляется из стека.

Использование стека является эффективным, но ограниченное время существования типов значений делает их менее подходящими при совместном использовании данных различными классами.

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

int[] numbers = new int[10];

Эта память не возвращается к куче при завершении метода, она освобождается только, когда система сборки мусора C# определит, что она больше не нужна. Объявление ссылочных типов увеличивает расход ресурсов, но их преимущество заключается в том, что они могут быть доступны из других классов.

Boxing and Unboxing

Boxing is name given to the process whereby a value type is converted into a reference type. When you box a variable, you are creating a reference variable that points to a new copy on the heap. You will encounter unboxing when you use classes designed for use with objects: for example, using an ArrayList to store integers. When you store an integer in the ArrayList, it's boxed. When you retrieve an integer, it must be unboxed.

System.Collections.ArrayList list =

new System.Collections.ArrayList(); // list is a reference type

int n = 67; // n is a value type

list.Add(n); // n is boxed

n = (int)list[0]; // list[0] is unboxed

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]