Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на вопросы_2003.doc
Скачиваний:
7
Добавлен:
16.04.2019
Размер:
275.46 Кб
Скачать

8. Типы данных в .Net Framework.

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

Значение Ссылка Указатель

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

int x = 5; объявляет переменную - целую со знаком, размером 32 бита, с именем x и начальным значением, равным 5.

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

Переменные-указатели. Переменные-указатели допускают выполнение арифметических операций над ними, ссылки -- нет.

Предопределенные типы:

bool 1 true или false.

sbyte 1 Целое со знаком.

byte 1 Целое без знака.

short 2 Кортокое целое со знаком.

ushort 2 Короткое целое без знака.

int 4 Целое со знаком.

uint 4 Целое без знака.

long 8 Длинное целое со знаком.

ulong 8 Длинное целое без знака.

char 2 Символ юникода (unicode character).

Float 4 Число с плавающей точкой одинарной

double8 Число с плавающей точкой двойной точности

decimal16 Числовой тип данных, который обычно используется в финансовых

object 8+ Элементарный базовый тип как для переменных-значений, так и для переменных-ссылок

string 20+ Непрерывная последовательность символов в юникоде (unicode characters).

9. Переменные типа ссылки. Пример использования.

Обычно при передаче параметров в функцию, передается копия данного объекта, но бывает ситуация когда необходимо передать не копию а сам объект.

Таким образом внутри метода меняется не копия объекта а сам объект.

Передача параметра по ссылке происходит черех ключевое слово ref

Рассмотрим пример

namespace ConsoleApplication3

{ class Program

{ static void Main(string[] args)

{ int a = 5;

Console.WriteLine(Inc(a));

Console.WriteLine(a);

Console.WriteLine(Inc2(ref a));

Console.WriteLine(a);

}

static private int Inc(int a)

{ return a+=1; }

static private int Inc2(ref int a)

{ return a+=1; }

} }

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

и после вызова а=6

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

10. Инициализация переменных, констант. Специальные символы при инициализации строк.

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

 В C# (Csharp) используется два метода обеспечения гарантии инициализации переменных:

-- переменные, которые являются полями класса или структуры, если не инициализированы явно, то по умолчанию обнуляются в момент создания;

-- переменные, локальные по отношению к методу, должны быть явно инициализированы, до появления любого оператора в котором используется значение переменной.

Константы должны инициализировать сразу после объявления. Примеры.

C#

class Calendar1

{ public const int months = 12; }

В этом примере константа months всегда имеет значение 12, и ее значение не может быть изменено даже самим классом. 

Несколько констант одного типа можно объявить одновременно

class Calendar2

{ const int months = 12, weeks = 52, days = 365; }

Используемое для инициализации константы выражение может ссылаться на другую константу, если при этом не создается циклическая ссылка.

class Calendar3

{ const int months = 12;

const int weeks = 52;

const int days = 365;

const double daysPerWeek = (double) days / (double) weeks;

const double daysPerMonth = (double) days / (double) months;}

Константы могут быть отмечены модификаторами publicprivateprotectedinternal или protectedinternal. Эти модификаторы доступа определяют порядок доступа к константе для пользователей класса.

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

int birthstones = Calendar.months;