- •Конспект лекций по курсу «Сети эвм» Часть 2 Сурков д.А.
- •Сравнительная характеристика технологий .Net и Java
- •Общее для Java и .Net.
- •Управление памятью в .Net
- •Процедурные типы данных (делегаты)
- •Динамические массивы
- •Многозадачность
- •1: Добавление в очередь ThreadPool нового делегата, который будет запускаться в отдельном потоке (из пула свободного потока). Делегат отработал – поток обратно в пул.
- •Исключительные ситуации
- •Шаблоны в с# (появились недавно в .Net 2.0)
- •В с# в шаблонах введено понятие итератора.
- •Массивы
- •Метод Get в SystemArray
- •Средства удалённого вызова .Net Remoting
- •Пользовательские атрибуты
- •Inherited – будем ли создавать атрибут для наследника.
- •Защищённые информационные системы. Технология “Эльбрус”
- •Защищенная файловая система
Массивы
Объявление массивов:
int[ ] intArr;
object[ ] objArr;
Массивы на уровне .Net представляются в виде объектов, которые наследуются от класса SystemArray. Это ссылочный класс, который является универсальным и предназначен для представления массивов разных видов, которые могут начинаться не с нуля. В этом классе много свойств и методов:
BinarySearch; // двоичный поиск делением объекта пополам
Sort // сортировка
Rank // размерность (сколько измерений)
LowerBound // минимальное значение индекса для соответствующего
// измерения
MaxBound // макс значение индекса
В C# массивы отсчитываются всегда от 0 ( поэтому LowerBound ==0)
Виды массивов:
-
Одномерные
|
|
|
|
|
-
Многомерные
-
Ступенчатые – одномерный массив, который содержит ссылки на другие массивы.
Объявления:
-
Одномерный int[ ] intArr;
-
Двумерный int[ , ] dim2Arr = new int [3,6]
-
Ступенчатый int [ ][ ] jaggedArr = new int[6]
{
new int[4], new int[2],
new int[6], null, null, null;
}
Метод Get в SystemArray
В массивы встроены функции двоичного поиска и сортировки. При обращении к элементам массива всегда происходит проверка на выход за границы диапазона. Операция взятия элемента массива транслируется в ассемблерную инструкцию языка IL, которая считается безопасной. При динамической компиляции компилятор вместо этой инструкции вставляет нужный код проверки выхода за диапазон. Если в аппаратуре есть проверка на выход за диапазон, то есть процессорная инструкция. При обращении за границу массива будет исключительная ситуация.
При выполнении бинарного поиска и сортировки (эти функции внесены в саму платформу) внутри функций проверка на диапазон может быть отменена.
Есть оператор fixed, внутри него можно оперировать понятием адреса (указателя):
int[ ] arr;
fixed
{
int* p=&arr[0]; // это необязательный код, и если есть fixed-секция, то
*(p+2)=5; // этот модуль помечается как небезопасный
}
Этот небезопасный код используется очень редко.
Любой прикладной код бывает:
1) managed ( управляемый) и unmanaged
2) безопасный/небезопасный ( safe/unsafe)
Управляемый код – код на языке IL (программа представлена в промежуточном языке) и удовлетворяет требованиям.
Неуправляемый – берёт код в родных инструкциях процессора. Этот код небезопасный, может обращаться к ОС.
( из управляемого кода можно вызвать неуправляемый код и наоборот)
Безопасный код не оперирует понятием указателя (не использует адресную арифметику).
Небезопасный код использует адресную арифметику, может быть управляемым.
managed (IL) safe (p)
unmanaged (ASM) unsafe (*p)
C# позволяет писать managed программы safe и unsafe (т.е. 1 и 2).
С++/CLI: 1,2,3.
Delphi: 1,2,3.