Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

7. Выражения 151

7.1 Классы выражений 151

7.1.1 Значения выражений 152

7.2 Статическая и динамическая привязка 152

7.2.1 Время привязки 153

7.2.2 Динамическая привязка 153

7.2.3 Типы составных выражений 154

7.3 Операторы 154

7.3.1 Приоритет и ассоциативность операторов 155

7.3.2 Перегрузка операторов 156

7.3.3 Разрешение перегрузки унарных операторов 157

7.3.4 Разрешение перегрузки бинарных операторов 157

7.3.5 Пользовательские операторы-кандидаты 158

7.3.6 Числовое расширение 158

7.3.6.1 Числовое расширение унарных операторов 159

7.3.6.2 Числовое расширение бинарных операторов 159

7.3.7 Операторы с нулификацией 160

7.4 Поиск членов 160

7.4.1 Базовые типы 162

7.5 Функции-члены 162

7.5.1 Списки аргументов 165

7.5.1.1 Соответствующие параметры 166

7.5.1.2 Вычисление списков аргументов во время выполнения 167

7.5.2 Вывод типа 169

7.5.2.1 Первый этап 170

7.5.2.2 Второй этап 170

7.5.2.3 Типы ввода 170

7.5.2.4 Типы вывода 170

7.5.2.5 Зависимость 170

7.5.2.6 Вывод типа вывода 171

7.5.2.7 Вывод явных типов параметров 171

7.5.2.8 Точный вывод 171

7.5.2.9 Вывод нижних границ 171

7.5.2.10 Вывод по верхним границам 172

7.5.2.11 Фиксирование 173

7.5.2.12 Выведенный тип возвращаемого значения 173

7.5.2.13 Вывод типа при преобразовании групп методов 174

7.5.2.14 Поиск наиболее подходящего общего типа для набора выражений 175

7.5.3 Разрешение перегрузки 175

7.5.3.1 Применимая функция-член 175

7.5.3.2 Более подходящая функция-член 176

7.5.3.3 Лучшее преобразование из выражения 177

7.5.3.4 Лучшее преобразование из типа 178

7.5.3.5 Лучшая цель для преобразования 178

7.5.3.6 Перегрузка в универсальных классах 178

7.5.4 Проверка динамического разрешения перегрузки во время компиляции 179

7.5.5 Вызов функции-члена 179

7.5.5.1 Вызов в упакованных экземплярах 180

7.6 Первичные выражения 181

7.6.1 Литералы 181

7.6.2 Простые имена 181

7.6.2.1 Инвариантность значения в блоках 183

7.6.3 Выражения со скобками 184

7.6.4 Доступ к члену 184

7.6.4.1 Идентичные простые имена и имена типов 186

7.6.4.2 Грамматическая неоднозначность 187

7.6.5 Выражения вызова 188

7.6.5.1 Вызовы методов 188

7.6.5.2 Вызовы методов расширения 190

7.6.5.3 Вызовы делегатов 192

7.6.6 Метод доступа к элементу 193

7.6.6.1 Доступ к массиву 193

7.6.6.2 Доступ к индексатору 194

7.6.7 Доступ this 195

7.6.8 Доступ base 196

7.6.9 Постфиксные операторы инкремента и декремента 196

7.6.10 Оператор new 197

7.6.10.1 Выражения создания объектов 198

7.6.10.2 Инициализаторы объектов 199

7.6.10.3 Инициализаторы коллекции 201

7.6.10.4 Выражения создания массива 203

7.6.10.5 Выражения создания делегата 205

7.6.10.6 Выражения создания анонимных объектов 206

7.6.11 Оператор typeof 208

7.6.12 Операторы checked и unchecked 211

7.6.13 Выражения значения по умолчанию 213

7.6.14 Выражения анонимного метода 214

7.7 Унарные операторы 214

7.7.1 Унарный оператор «плюс» 214

7.7.2 Унарный оператор «минус» 214

7.7.3 Оператор логического отрицания 215

7.7.4 Оператор побитового дополнения 215

7.7.5 Префиксные операторы инкремента и декремента 216

7.7.6 Выражения приведения типа 217

7.8 Арифметические операторы 217

7.8.1 Оператор произведения 218

7.8.2 Оператор деления 219

7.8.3 Оператор остатка 220

7.8.4 Оператор сложения 221

7.8.5 Оператор вычитания 223

7.9 Операторы сдвига 225

7.10 Операторы отношения и проверки типа 226

7.10.1 Операторы сравнения целых чисел 227

7.10.2 Операторы сравнения чисел с плавающей запятой 227

7.10.3 Операторы сравнения десятичных чисел 228

7.10.4 Логические операторы равенства 228

7.10.5 Операторы сравнения значений перечисления 229

7.10.6 Операторы равенства значений ссылочного типа 229

7.10.7 Операторы равенства строк 231

7.10.8 Операторы равенства делегатов 231

7.10.9 Операторы равенства и значение null 232

7.10.10 Оператор is 232

7.10.11 Оператор as 232

7.11 Логические операторы 233

7.11.1 Логические операторы для целых чисел 234

7.11.2 Логические операторы для перечислений 235

7.11.3 Логические операторы 235

7.11.4 Обнуляемые логические операторы 235

7.12 Условные логические операторы 236

7.12.1 Логические условные операторы 236

7.12.2 Пользовательские условные логические операторы 237

7.13 Оператор слияния с null 237

7.14 Условный оператор 238

7.15 Выражения анонимных функций 239

7.15.1 Сигнатуры анонимных функций 241

7.15.2 Тела анонимных функций 241

7.15.3 Разрешение перегрузки 242

7.15.4 Анонимные функции и динамическая привязка 243

7.15.5 Внешние переменные 243

7.15.5.1 Захваченные внешние переменные 243

7.15.5.2 Создание экземпляров локальных переменных 244

7.15.6 Вычисление выражений анонимных функций 246

7.16 Выражения запросов 246

7.16.1 Неоднозначность в выражениях запросов 247

7.16.2 Перевод выражений запросов 248

7.16.2.1 Предложения select и groupby с продолжениями 248

7.16.2.2 Явные типы переменных диапазона 249

7.16.2.3 Выражения вырожденных запросов 249

7.16.2.4 Предложения from, let, where, join и orderby 250

7.16.2.5 Предложения select 253

7.16.2.6 Предложения groupby 254

7.16.2.7 Прозрачные идентификаторы 254

7.16.3 Шаблон выражения запроса 256

7.17 Операторы присваивания 257

7.17.1 Простое присваивание 258

7.17.2 Сложное присваивание 260

7.17.3 Присваивание событий 261

7.18 Выражение 261

7.19 Константные выражения 262

7.20 Логические выражения 263

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]