Checked и unchecked 7 страница
7.9 Операторы отношения и проверки типа Операторы ==,!=, <, >, <=, >=, is и as называются операторами отношения и проверки типа. выражение отношения: выражение равенства: Оператор is описывается в разделе §7.9.10, а оператор as — в разделе §7.9.11. Операторы ==,!=, <, >, <= и >= являются операторами сравнения. Для операции вида x op y, где op является оператором сравнения, чтобы выбрать конкретную реализацию оператора, применяется разрешение перегрузки (§7.2.4). Операнды преобразуются в типы параметров выбранного оператора, а тип результата является типом возвращаемого значения этого оператора. Стандартные операторы сравнения описываются в следующих разделах. Все стандартные операторы сравнения возвращают результат с типом bool, как показано в следующей таблице.
7.9.1 Операторы сравнения целых чисел К стандартным операторам сравнения целых чисел относятся: bool operator ==(int x, int y); bool operator!=(int x, int y); bool operator <(int x, int y); bool operator >(int x, int y); bool operator <=(int x, int y); bool operator >=(int x, int y); Каждый из этих операторов сравнивает числовые значения двух целых операндов и возвращает значение bool, которое указывает, является ли соответствующее отношение истинным или ложным. 7.9.2 Операторы сравнения чисел с плавающей запятой К стандартным операторам сравнения чисел с;плавающей запятой относятся: bool operator ==(float x, float y); bool operator!=(float x, float y); bool operator <(float x, float y); bool operator >(float x, float y); bool operator <=(float x, float y); bool operator >=(float x, float y); Эти операторы сравнивают операнды в соответствии с правилами из стандарта IEEE 754. · Если какой-либо из операторов не является числом, то результатом всех операторов является false, за исключением оператора!=, для которого результатом является true. Для любых двух операндов x!= y всегда дает такой же результат, что и!(x == y). Однако когда один или оба операнда не являются числами, операторы <, >, <=, и >= не дают такие же результаты, как логическое отрицание обратного оператора. Например, если x или y не является числом, то x < y имеет значение false, однако!(x >= y) имеет значение true. · Когда оба операнда являются числами, значения двух операндов с плавающей запятой в операторах сравниваются в соответствии со следующим порядком –∞ < –макс. <... < –мин. < –0.0 == +0.0 < +мин. <... < +макс. < +∞ где мин. и макс. являются самым малым и самым большим положительными значениями, которые можно представить в данном формате с плавающей запятой. Главным результатом такого порядка является следующее. o Отрицательные и положительные нулевые значения считаются равными. o Отрицательное бесконечное значение считается меньше всех остальных значений, но равным другому отрицательному бесконечному значению. o Положительное бесконечное значение считается больше всех остальных значений, но равным другому положительному бесконечному значению. 7.9.3 Операторы сравнения десятичных чисел К стандартным операторам сравнения десятичных чисел относятся: bool operator ==(decimal x, decimal y); bool operator!=(decimal x, decimal y); bool operator <(decimal x, decimal y); bool operator >(decimal x, decimal y); bool operator <=(decimal x, decimal y); bool operator >=(decimal x, decimal y); Каждый из этих операторов сравнивает числовые значения двух десятичных операндов и возвращает значение bool, которое указывает, является ли соответствующее отношение истинным или ложным. Каждый оператор сравнения десятичных чисел эквивалентен соответствующему оператору отношения или равенства типа System.Decimal. 7.9.4 Логические операторы равенства К стандартным логическим операторам равенства относятся: bool operator ==(bool x, bool y); bool operator!=(bool x, bool y); Результат == равен true, если оба значения x и y имеют значение true или оба имеют значение false. В противном случае, результат равен false. Результат!== равен false, если оба значения x и y имеют значение true или оба имеют значение false. В противном случае результат равен true. Если операнды имеют тип bool, оператор!= дает такой же результат, как и оператор ^. 7.9.5 Операторы сравнения значений перечисления Каждый тип перечисления неявно предоставляет следующие стандартные операторы сравнения: bool operator ==(E x, E y); bool operator!=(E x, E y); bool operator <(E x, E y); bool operator >(E x, E y); bool operator <=(E x, E y); bool operator >=(E x, E y); Результат вычисления x op y, где x и y являются выражениями с типом перечисления E базового типа U, а op является одним из операторов сравнения, в точности равен значению ((U)x) op ((U)y). Другими словами, операторы сравнения значений типа перечисления просто сравнивают базовые целые значения двух операндов. 7.9.6 Операторы равенства значений ссылочного типа К стандартным операторам равенства значений ссылочного типа относятся: bool operator ==(object x, object y); bool operator!=(object x, object y); Операторы возвращают результат сравнения двух ссылок на идентичность. Поскольку стандартные операторы равенства значений ссылочного типа принимают операнды типов object, они применимы ко всем типам, в которых не объявляются применимые члены operator == и operator!=. И наоборот, любые применимые пользовательские операторы равенства скрывают стандартные операторы равенства значений ссылочного типа.
|