Герберт Шилдт - 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
— перечисление, в котором определяются значения, обозначающие различные типы членов. К их числу относятся следующие.
Интервал:
Закладка: