Справочник по C# Герберт Шилдт ббк 32. 973. 26018 75 Ш57 удк 681 07 Издательский дом "Вильямс" Зав редакцией
Скачать 5.05 Mb.
|
Глава 19 Пространство имен System Глава 19. Пространство имен System 503 та глава посвящена пространству имен System , которое занимает наивысший уровень в библиотеке C#. Оно содержит классы, структуры, интерфейсы и перечисления, которые наиболее часто употребляются в C#-программах или считаются важной составляющей среды .NET Framework. Таким образом, пространство имен System определяет ядро библиотеки C#. Пространство имен System также содержит множество вложенных пространств имен, предназначенных для поддержки таких подсистем, как System.Net . Некоторые из них описаны ниже в этой книге. Однако в этой главе рассматриваются только члены самого пространства имен System Члены пространства имен System Помимо большого количества классов исключений, пространство имен System со держит следующие классы: Activator AppDomain AppDomainSetup Array AssemblyLoadEventArgs Attribute AttributeUsageAttribute BitConverter Buffer CharEnumerator CLSCompliantAttribute Console ContextBoundObject ContextStaticAttribute Convert DBNull Delegate Enum Environment EventArgs Exception FlagsAttribute GC LoaderOptimizationAttribute LocalDataStoreSlot MarshalByRefObject Math MTAThreadAttribute MulticastDelegate NonSerializedAttribute Object ObsoleteAttribute OperatingSystem ParamArrayAttribute Random ResolveEventArgs SerializableAttribute STAThreadAttribute String ThreadStaticAttribute TimeZone Type UnhandledExceptionEventArgs Uri OriBuilder ValueType Version WeakReference В пространстве имен System определены такие структуры ArgIterator Boolean Byte Char DateTime Decimal Double Guid Int16 Int32 Int64 IntPtr RuntimeArgumentHandle RuntimeFieldHandle RuntimeMethodHandle RuntimeTypeHandle SByte Single TimeSpan TypedReference UInt16 UInt32 UInt64 UintPtr Void В пространстве имен System определены следующие интерфейсы: IAppDomainSetup IAsyncResult ICloneable IComparable IConvertible ICustomFormatter IDisposable IFormatProvider IFormattable IServiceProvider Э 504 Часть II. Библиотека C# В пространстве имен System определены такие делегаты: AssemblyLoadEventHandler AsyncCallback CrossAppDomainDelegate EventHandler ResolveEventHandler UnhandledExceptionEventHandler В пространстве имен System определены следующие перечисления: AttributeTargets DayOfWeek Environment.SpecialFolder LoaderOptimization PlatformID TypeCode UriHostNameType UriPartial Как видно по приведенным выше таблицам, пространство имен System отличается довольно большим объемом, и все его составляющие невозможно детально рассмотреть в одной главе. Более того, хотя некоторые члены System в общем случае применимы к среде .NET Framework, но C#-программистами они обычно не используются. Следует также отметить, что некоторые классы пространства имен System (например, Type , Exception и Attribute ) рассмотрены в части I или в других разделах настоящей книги. А поскольку класс System String , в котором определяется C#-тип string , представляет собой очень большую и важную тему, его описание приводится в главе 20 (как тесно связанное с темой форматирования). Поэтому в настоящей главе описаны только те члены пространства имен System , которые пользуются повышенным вниманием у C#-программистов и не упоминаются в других разделах книги. Класс Math В классе Math определены такие стандартные математические операции, как извлечение квадратного корня, вычисление синуса, косинуса и логарифмов. Методы, определенные в классе Math , перечислены в табл. 19.1.Все углы задаются в радианах. Обратите внимание на то, что все методы, определенные в классе Math , являются static - методами. Поэтому для их использования не нужно создавать объект класса Math , а значит, нет необходимости и в конструкторах класса Math В классе Math также определены следующие два поля: public const double E public const double PI где E — значение основания натурального логарифма, известное как е, a PI — значение иррационального числа π. Math является sealed -классом, т.е. он не может иметь производных классов. Таблица 19.1. Методы, определенные в классе Math Метод Описание public static double Abs( double v ) Возвращает абсолютную величину параметра v public static float Abs ( float v ) Возвращает абсолютную величину параметра v public static decimal Abs( decimal v ) Возвращает абсолютную величину параметра v public static int Abs( int v ) Возвращает абсолютную величину параметра v public static short Abs( short v ) Возвращает абсолютную величину параметра v public static long Abs( long v ) Возвращает абсолютную величину параметра v public static sbyte Abs( sbyte v ) Возвращает абсолютную величину параметра v Глава 19. Пространство имен System 505 Продолжение табл. 19.1. Метод Описание public static double Acos( double v ) Возвращает арккосинус параметра v . Значение v должно находиться в диапазоне между -1 и 1 public static double Asin( double v ) Возвращает арксинус параметра v . Значение v должно находиться в диапазоне между -1 и 1 public static double Atan( double v ) Возвращает арктангенс параметра v public static double Atan2( double y , double x ) Возвращает арктангенс частного y/x public static double Ceiling( double v ) Возвращает наименьшее целое (представленное в виде значения с плавающей точкой), которое не меньше параметра v . Например, при v , равном 1.02, метод Ceiling() возвратит 2.0. А при v , равном -1.02, метод Ceiling() возвратит -1 public static double Cos( double v ) Возвращает косинус параметра v public static double Cosh( double v ) Возвращает гиперболический косинус параметра v public static double Exp( double v ) Возвращает основание натурального логарифма е , возведенное в степень v public static double Floor( double v ) Возвращает наибольшее целое (представленное в виде значения с плавающей точкой), которое не больше параметра v . Например, при v , равном 1.02, метод Floor() возвратит 1.0. А при v , равном -1.02, метод Floor() возвратит -2 public static double IEEERemainder( double dividend , double divisor ) Возвращает остаток от деления dividend/divisor public static double Log( double v ) Возвращает натуральный логарифм для параметра v public static double Log( double v , double base ) Возвращает логарифм для параметра v по основанию base public static double Log10( double v ) Возвращает логарифм для параметра v по основанию 10 public static double Max( double v1 , double v2 ) Возвращает большее из значений v1 и v2 public static float Max( float v1 , float v2 ) Возвращает большее из значений v1 и v2 public static decimal Max( decimal v1 , decimal v2 ) Возвращает большее из значений v1 и v2 public static int Max( int v1 , int v2 ) Возвращает большее из значений v1 и v2 public static short Max( short v1 , short v2 ) Возвращает большее из значений v1 и v2 public static long Max( long v1 , long v2 ) Возвращает большее из значений v1 и v2 506 Часть II. Библиотека C# Продолжение табл. 19.1. Метод Описание public static uint Max( uint v1 , uint v2 ) Возвращает большее из значений v1 и v2 public static ushort Max( ushort v1 , ushort v2 ) Возвращает большее из значений v1 и v2 public static ulong Max( ulong v1 , ulong v2 ) Возвращает большее из значений v1 и v2 public static byte Max( byte v1 , byte v2 ) Возвращает большее из значений v1 и v2 public static sbyte Max( sbyte v1 , sbyte v2 ) Возвращает большее из значений v1 и v2 public static double Min( double v1 , double v2 ) Возвращает меньшее из значений v1 и v2 public static float Min( float v1 , float v2 ) Возвращает меньшее из значений v1 и v2 public static decimal Min( decimal v1 , decimal v2 ) Возвращает меньшее из значений v1 и v2 public static int Min( int v1 , int v2 ) Возвращает меньшее из значений v1 и v2 public static short Min( short v1 , short v2 ) Возвращает меньшее из значений v1 и v2 public static long Min( long v1 , long v2 ) Возвращает меньшее из значений v1 и v2 public static uint Min( uint v1 , uint v2 ) Возвращает меньшее из значений v1 и v2 public static ushort Min( ushort v1 , ushort v2 ) Возвращает меньшее из значений v1 и v2 public static ulong Min( ulong v1 , ulong v2 ) Возвращает меньшее из значений v1 и v2 public static byte Min( byte v1 , byte v2 ) Возвращает меньшее из значений v1 и v2 public static sbyte Min( sbyte v1 , sbyte v2 ) Возвращает меньшее из значений v1 и v2 public static double Pow( double base , double exp ) Возвращает значение base , возведенное в степень exp(baseexp) public static double Round( double v ) Возвращает значение v , округленное до ближайшего целого числа public static decimal Round( decimal v ) Возвращает значение v , округленное до ближайшего целого числа Глава 19. Пространство имен System 507 Окончание табл. 19.1 Метод Описание public static double Round( double v , int frac ) Возвращает значение v , округленное до числа, количество цифр дробной части которого равно значению параметра frac public static decimal Round( decimal v , int frac ) Возвращает значение v , округленное до числа, количество цифр дробной части которого равно значению параметра frac public static int Sign( double v ) Возвращает -1, если значение v меньше нуля, 0, если v равно нулю, и 1, если v больше нуля public static int Sign( float v ) Возвращает -1, если значение v меньше нуля, 0, если v равно нулю, и 1, если v больше нуля public static int Sign( decimal v ) Возвращает -1, если значение v меньше нуля, 0, если v равно нулю, и 1, если v больше нуля public static int Sign( int v ) Возвращает -1, если значение v меньше нуля, 0, если v равно нулю, и 1, если v больше нуля public static int Sign( short v ) Возвращает -1, если значение v меньше нуля, 0, если v равно нулю, и 1, если v больше нуля public static int Sign( long v ) Возвращает -1, если значение v меньше нуля, 0, если v равно нулю, и 1, если v больше нуля public static int Sign( sbyte v ) Возвращает -1, если значение v меньше нуля, 0, если v равно нулю, и 1, если v больше нуля public static double Sin( double v ) Возвращает синус параметра v public static double Sinh( double v ) Возвращает гиперболический синус параметра v public static double Sqrt( double v ) Возвращает квадратный корень параметра v public static double Tan( double v ) Возвращает тангенс параметра v public static double Tanh( double v ) Возвращает гиперболический тангенс параметра v Рассмотрим пример программы, в которой используется метод Sqrt() , позволяющий применить теорему Пифагора. Здесь вычисляется длина гипотенузы по заданным длинам двух остальных сторон (катетов) прямоугольного треугольника. // Реализация теоремы Пифагора. using System; class Pythagorean { public static void Main() { double s1; double s2; double hypot; string str; Console.WriteLine("Введите длину первого катета: "); str = Console.ReadLine(); s1 = Double.Parse(str); 508 Часть II. Библиотека C# Console.WriteLine("Введите длину второго катета: "); str = Console.ReadLine(); s2 = Double.Parse(str); hypot = Math.Sqrt(s1*s1 + s2*s2); Console.WriteLine("Гипотенуза равна " + hypot); } } Результаты выполнения этой программы таковы: Введите длину первого катета: 3 Введите длину второго катета: 4 Гипотенуза равна 5 Теперь рассмотрим пример программы, в которой используется метод Pow() для вычисления объема начального капиталовложения, необходимого для достижения желаемой будущей стоимости при заданных годовом показателе ожидаемого дохода и количестве лет. Формула вычисления объема начального капиталовложения имеет следующий вид: InitialInvestment = FutureValue / (1 + InterestRate) Years Поскольку метод Pow() принимает аргументы типа double , процентная ставка и количество лет представляются в виде double -значений. Для значений будущей стоимости и объема начального капиталовложения используется тип decimal /* Вычисление объема начального капиталовложения, необходимого для достижения известной будущей стоимости при заданных годовом показателе ожидаемого дохода и количестве лет. */ using System; class IntialInvestment { public static void Main() { decimal InitInvest; // начальное капиталовложение decimal FutVal; // будущая стоимость double NumYears; // количество лет double IntRate; // годовой показатель // ожидаемого дохода string str; Console.Write("Введите значение будущей стоимости: "); str = Console.ReadLine(); try { FutVal = Decimal.Parse(str); } catch(FormatException exc) { Console.WriteLine(exc.Message); return; } Console.Write( "Введите процентную ставку (например, 0.085): "); str = Console.ReadLine(); try { Глава 19. Пространство имен System 509 IntRate = Double.Parse(str); } catch(FormatException exc) { Console.WriteLine(exc.Message); return; } Console.Write("Введите количество лет: "); str = Console.ReadLine(); try { NumYears = Double.Parse(str); } catch(FormatException exc) { Console.WriteLine(exc.Message); return; } InitInvest = FutVal / (decimal) Math.Pow(IntRate+1.0, NumYears); Console.WriteLine( "Требуемый объем начального капиталовложения: {0:C}", InitInvest); } } Результаты выполнения этой программы таковы: Введите значение будущей стоимости: 10000 Введите процентную ставку (например, 0.085): 0.07 Введите количество лет: 10 Требуемый объем начального капиталовложения: $5,083.49 Структуры типов значений Структуры типов значений были представлены в главе 14 в связи с их использованием для преобразования строк, которые содержат числовые значения, удобные для восприятия человеком, в эквивалентные двоичные величины. Здесь же они рассматриваются более подробно. Структуры типов значений лежат в основе C#-типов значений. Используя члены, определенные этими структурами, можно выполнять операции, разрешенные для определенных типов значений. Ниже показаны .NET-имена структур и их эквиваленты в виде ключевых слов C#: .NET-имя структуры C#-имя .NET-имя структуры C#-имя Boolean bool Char char Decimal decimal Double double Single float Int16 short Int32 int Int64 long UInt16 ushort UInt32 uint UInt64 ulong Byte byte SByte sbyte Все эти структуры рассматриваются в следующих разделах. 510 Часть II. Библиотека C# На заметку Некоторые методы, определенные в структурах типов значений, принимают параметры типа IFormatProvider или NumberStyles . Тип IFormatProvider кратко описан ниже в этой главе, Tun NumberStyles представляет собой перечисление, принадлежащее пространству имен System.Globalization . Тема форматирования раскрыта в главе 20 |