Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
using (obj) {
// использовать объект obj
}
using (тип obj = инициализатор) {
// использовать объект obj
}
где obj является выражением, в результате вычисления которого должен быть получен объект, реализующий интерфейс System.IDisposable
. Этот объект определяет переменную, которая будет использоваться в блоке оператора using
. В первой форме объект объявляется вне оператора using
, а во второй форме — в этом операторе. По завершении блока оператора using
для объекта obj вызывается метод Dispose()
, определенный в интерфейсе System.IDisposable
. Таким образом, оператор using
предоставляет средства, необходимые для автоматической утилизации объектов, когда они больше не нужны. Не следует, однако, забывать, что оператор using
применяется только к объектам, реализующим интерфейс System.IDisposable
.
В приведенном ниже примере демонстрируются обе формы оператора using
.
// Продемонстрировать применение оператора using.
using System;
using System.IO;
class UsingDemo {
static void Main() {
try {
StreamReader sr = new StreamReader("test.txt");
// Использовать объект в операторе using,
using(sr) {
// ...
}
} catch(IOException exc) {
// ...
}
try {
// Создать объект класса StreamReader в операторе using,
using(StreamReader sr2 = new StreamReader("test.txt")) {
// ...
}
} catch(IOException exc) {
// ...
}
}
}
В данном примере интерфейс IDisposable
реализуется в классе StreamReader
(посредством его базового класса TextReader
). Поэтому он может использоваться в операторе using
. По завершении этого оператора автоматически вызывается метод Dispose()
для переменной потока, закрывая тем самым поток.
Как следует из приведенного выше примера, оператор using
особенно полезен для работы с файлами, поскольку файл автоматически закрывается по завершении блока этого оператора, даже если он и завершается исключением. Таким образом, закрытие файла с помощью оператора using
зачастую упрощает код обработки файлов. Разумеется, применение оператора using
не ограничивается только работой с файлами. В среде .NET Framework имеется немало других ресурсов, реализующих интерфейс IDisposable
. И всеми этими ресурсами можно управлять с помощью оператора using
.
Ключевое слово extern
находит два основных применения. Каждое из них рассматривается далее по порядку.
В первом своем применении ключевое слово extern
было доступно с момента создания С#. Оно обозначает, что метод предоставляется в неуправляемом коде, который не является составной частью программы. Иными словами, метод предоставляется внешним кодом.
Для того чтобы объявить метод как внешний, достаточно указать в самом начале его объявления модификатор extern
. Таким образом, общая форма объявления внешнего метода выглядит следующим образом.
extern возвращаемый_тип имя_метода (список_аргументов) ;
Обратите внимание на отсутствие фигурных скобок.
В данном варианте ключевое слово extern
нередко применяется вместе с атрибутом DllImport
, обозначающим библиотеку DLL, в которой содержится внешний метод. Атрибут DllImport
принадлежит пространству имен System.Runtime.InteropServices
. Он допускает несколько вариантов, но, как правило, достаточно указать лишь имя библиотеки DLL, в которой содержится внешний метод. Вообще говоря, внешние методы следует программировать на С. (Если же это делается на C++, то имя внешнего метода может быть изменено в библиотеке DLL путем дополнительного оформления типов.)
Для того чтобы стало понятнее, как пользоваться внешними методами, обратимся к примеру конкретной программы, состоящей из двух файлов. Ниже приведен исходный код С из первого файла ExtMeth.с
, где определяется метод AbsMax()
.
#include
int __declspec(dllexport) AbsMax(int a, int b) {
return abs(a) < abs(b) ? abs(b) : abs(a);
}
В методе AbsMax()
сравниваются абсолютные значения двух его параметров и возвращается самое большое из них. Обратите внимание на обозначение __declspec(dllexport)
. Это специальное расширение языка С для программных средств корпорации Microsoft. Оно уведомляет компилятор о необходимости экспортировать метод AbsMax()
из библиотеки DLL, в которой он содержится. Для компилирования файла ExtMeth.с
в командной строке указывается следующее.
CL /LD /MD ExtMeth.с
В итоге создается библиотечный файл DLL — ExtMeth .dll
.
Далее следует программа на С#, в которой применяется внешний метод AbsMax()
.
using System;
using System.Runtime.InteropServices;
class ExternMeth {
// Здесь объявляется внешний метод.
[DllImport("ExtMeth.dll")]
public extern static int AbsMax(int a, int b);
static void Main() {
// Использовать внешний метод,
int max = AbsMax(-10, -20);
Console.WriteLine(max);
}
}
Обратите внимание на использование атрибута DllImport
в приведенной выше программе. Он уведомляет компилятор о наличии библиотеки DLL, содержащей внешний метод AbsMax()
. В данном случае это файл ExtMeth.dll
, созданный во время компиляции файла с исходным текстом метода AbsMax()
на С. В результате выполнения данной программы на экран, как и ожидалось, выводится значение 20.
Во втором применении ключевое слово extern
предоставляет псевдоним для внешней сборки, что полезно в тех случаях, когда в состав программы включаются две отдельные сборки с одним и тем же именем элемента. Так, если в сборке test1
содержится класс MyClass
, а в сборке test2
класс с таким же именем, то при обращении к классу по этому имени в одной и той же программе может возникнуть конфликт.
Для разрешения подобного конфликта необходимо создать псевдоним каждой сборки. Это делается в два этапа. На первом этапе нужно указать псевдонимы, используя параметр компилятора /г, как в приведенном ниже примере.
/г:Asm1=test1 /г:Asm2=test2
А на втором этапе необходимо ввести операторы с ключевым словом extern
, в которых делается ссылка на указанные выше псевдонимы. Ниже приведена форма такого оператора для создания псевдонима сборки.
Интервал:
Закладка: