Герберт Шилдт - 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: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
В некоторых случаях оператор asможет служить удобной альтернативой оператору is. В качестве примера рассмотрим следующую программу, в которой оператор is используется для предотвращения неправильного приведения типов.
// Использовать оператор is для предотвращения неправильного приведения типов.
using System;
class A { }
class В : A { }
class CheckCast {
static void Main() {
A a = new A();
В b = new В();
// Проверить, можно ли привести а к типу В.
if (a is В) // если да, то выполнить приведение типов
b = (В)a;
else // если нет, то пропустить приведение типов
b = null;
if (b == null)
Console.WriteLine("Приведение типов b = (В) HE допустимо.");
else
Console.WriteLine("Приведение типов b = (В) допустимо.");
}
}
Эта программа дает следующий результат.
Приведение типов b = (В) НЕ допустимо.
Как следует из результата выполнения приведенной выше программы, тип объекта а не совместим с типом В, и поэтому его приведение к типу В не допустимо и предотвращается в условном операторе if. Но такую проверку приходится выполнять в два этапа. Сначала требуется убедиться в обоснованности операции приведения типов, а затем выполнить ее. Оба этапа могут быть объединены в один с помощью оператора as, как демонстрирует приведенная ниже программа.
// Продемонстрировать применение оператора as.
using System;
class A {}
class В : A {}
class CheckCast {
static void Main() {
A a = new A();
В b = new В();
b = a as В; // выполнить приведение типов, если это возможно
if(b==null)
Console.WriteLine("Приведение типов b = (В) НЕ допустимо.");
else
Console.WriteLine("Приведение типов b = (В) допустимо.");
}
}
Эта программа дает прежний результат.
Приведение типов b = (В) НЕ допустимо.
В данном варианте программы в одном и том же операторе asсначала проверяется обоснованность операции приведения типов, а затем выполняется сама операция приведения типов, если она допустима.
Несмотря на всю свою полезность, операторы asи isпроверяют лишь совместимость двух типов. Но зачастую требуется информация о самом типе. Для этой цели в C# предусмотрен оператор typeof. Он извлекает объект класса System.Туредля заданного типа. С помощью этого объекта можно определить характеристики конкретного типа данных. Ниже приведена общая форма оператора typeof:
typeof(тип)
где тип обозначает получаемый тип. Информация, описывающая тип, инкапсулируется в возвращаемом объекте класса Туре.
Получив объект класса Туредля заданного типа, можно извлечь информацию о нем, используя различные свойства, поля и методы, определенные в классе Туре. Класс Туредовольно обширен и содержит немало членов, поэтому его рассмотрение придется отложить до следующего раздела, посвященного рефлексии. Но в качестве краткого введения в этот класс ниже приведена программа, в которой используются три его свойства: FullName, IsClassи IsAbstract. Для получения полного имени типа служит свойство FullName. Свойство IsClassвозвращает логическое значение true, если тип относится к классу. А свойство IsAbstractвозвращает логическое значение true, если класс является абстрактным.
// Продемонстрировать применение оператора typeof.
using System;
using System.IO;
class UseTypeof {
static void Main() {
Type t = typeof(StreamReader);
Console.WriteLine(t.FullName);
if (t.IsClass)
Console.WriteLine("Относится к классу.");
if (t.IsAbstract)
Console.WriteLine("Является абстрактным классом.");
else
Console.WriteLine("Является конкретным классом.");
}
}
Эта программа дает следующий результат.
System.10.StreamReader
Относится к классу.
Является конкретным классом.
В данной программе сначала извлекается объект класса Туре, описывающий тип StreamReader. Затем выводится полное имя этого типа данных и определяется его принадлежность к классу, а далее — к абстрактному или конкретному классу.
Рефлексия
Рефлексия — это средство, позволяющее получать сведения о типе данных. Термин рефлексия, или отражение, происходит от принципа действия этого средства: объект класса Туреотражает базовый тип, который он представляет. Для получения информации о типе данных объекту класса Туределаются запросы, а он возвращает (отражает) обратно информацию, связанную с определяемым типом. Рефлексия является эффективным механизмом, поскольку она позволяет выявлять и использовать возможности типов данных, известные только во время выполнения.
Многие классы, поддерживающие рефлексию, входят в состав прикладного интерфейса .NET Reflection API, относящегося к пространству имен System.Reflection. Поэтому для применения рефлексии в код программы обычно вводится следующая строка.
using System.Reflection;
Класс System.Туресоставляет ядро подсистемы рефлексии, поскольку он инкапсулирует тип данных. Он содержит многие свойства и методы, которыми можно пользоваться для получения информации о типе данных во время выполнения. Класс Туреявляется производным от абстрактного класса System.Reflection.MemberInfо.
В классе MemberInfоопределены приведенные ниже свойства, доступные только для чтения.
Свойство - Описание
Type DeclaringType- Тип класса или интерфейса, в котором объявляется отражаемый член
MemberTypes MemberType- Тип члена. Это значение обозначает, является ли член полем, методом, свойством, событием или конструктором
int MetadataToken- Значение, связанное к конкретными метаданными
Module Module- Объект типа Module, представляющий модуль (исполняемый файл), в котором находится отражаемый тип
string Name- Имя типа
Type ReflectedType- Тип отражаемого объекта
Следует иметь в виду, что свойство MemberTypeвозвращает тип MemberTypes— перечисление, в котором определяются значения, обозначающие различные типы членов. К их числу относятся следующие.
Интервал:
Закладка: