| 
 
 
            
            
              | Руководство по программированию на C#
 
 |  
              | Компиляция на двух языках из MSDN Visual Studio
 
 |  
              | 
 
 
 |  
              | Методическое пособие для занятий по информатике на физфаке ЮФУ
 
 |  
              | 
 
 
 |  
              | Фомин Г.В.
 
 |  
              | 
 
 
 |  
              | 
 
 
 |       
 
  Оглавление
            Оглавление 2
 
 C# Programming Guide 9
 
 Inside a C# Program 9
 
 Hello World -- Your First Program 9
 
 Руководство по программированию на C# 9
 
 Структура программы C# 9
 
 Hello World – Создаем первую программу 9
 
 General Structure of a C# Program 12
 
 Общая структура программы на C# 12
 
 Main() and Command Line Arguments 13
 
 Overview 13
 
 Main() и аргументы командной строки 13
 
 Общие сведения 13
 
 Command-Line Arguments 14
 
 How to: Display Command Line Arguments 18
 
 Отображение аргументов командной строки 19
 
 How to: Access Command-Line Arguments Using foreach 20
 
 Доступ к аргументам командной строки с помощью оператора "foreach" 20
 
 Main() Return Values 21
 
 Значения, возвращаемые методом Main() 21
 
 Types 24
 
 Data Types Overview 24
 
 Типы 24
 
 Общие сведения о типах данных 24
 
 Casting 25
 
 Приведение 26
 
 Boxing and Unboxing 27
 
 Упаковка-преобразование и распаковка-преобразование 27
 
 How to: Convert a byte Array to an int 32
 
 Преобразование массива байтов в значение типа "int" 32
 
 How to: Convert a string to an int 34
 
 Преобразование строки в значение типа "int" 34
 
 How to: Convert Hexadecimal Strings 36
 
 Преобразование шестнадцатеричных строк 36
 
 Arrays 38
 
 Array Overview 38
 
 Массивы 38
 
 Общие сведения о массивах 38
 
 Arrays as Objects 39
 
 Массивы как объекты 39
 
 Single-Dimensional Arrays 40
 
 Одномерные массив 40
 
 Multidimensional Arrays 41
 
 Многомерные массивы 41
 
 Jagged Arrays 42
 
 Массивы массивов 42
 
 Using foreach with Arrays 45
 
 Использование оператора foreach с массивами 45
 
 Passing Arrays as Parameters 46
 
 Передача массивов в качестве параметров 46
 
 Passing Arrays Using ref and out 50
 
 Передача массивов при помощи параметров ref и out 50
 
 Implicitly Typed Arrays 53
 
 Неявно типизированные массивы 53
 
 Strings 55
 
 Using Strings 55
 
 Строки 55
 
 Использование строк 55
 
 How to: Parse Strings Using the Split Method 63
 
 Анализ строк с помощью метода разделения 63
 
 How to: Search Strings Using String Methods 64
 
 Навигация по содержимому строки с помощью строковых методов 64
 
 How to: Search Strings Using Regular Expressions 65
 
 Анализ строк с помощью регулярных выражений 66
 
 How to: Join Multiple Strings 68
 
 Объединение нескольких строк 69
 
 How to: Modify String Contents 70
 
 Изменение содержимого строки 70
 
 How to: Determine Whether a String Contains a Numeric Value 71
 
 Определение наличия числового значения в строке 71
 
 Encoding Base Types 73
 
 Базовые типы кодировки 74
 
 Formatting Types 76
 
 Formatting Overview 76
 
 Типы форматирования 76
 
 Общие сведения о форматировании 76
 
 Composite Formatting 82
 
 Составное форматирование 82
 
 Numeric Format Strings 88
 
 Строки числовых форматов 88
 
 .NET Framework Regular Expressions 112
 
 Регулярные выражения в .NET Framework 112
 
 Regular Expressions as a Language 113
 
 Регулярные выражения как язык 113
 
 Character Escapes 114
 
 Escape-знаки 114
 
 How to: Perform String Manipulations by Using Basic String Operations 116
 
 Example 116
 
 Выполнение действия со строками с помощью основных строковых операций 116
 
 Пример 116
 
 Parsing Strings 120
 
 Parsing Numeric Strings 120
 
 Разбор строк 120
 
 Разбор числовых строк 120
 
 Statements, Expressions, and Operators 123
 
 Statements 123
 
 Операторы и выражения 123
 
 Операторы 123
 
 Expressions 124
 
 Выражения 124
 
 Operators 126
 
 Операторы 126
 
 Anonymous Functions 130
 
 Анонимные функции 130
 
 Overloadable Operators 143
 
 Перегружаемые операторы 143
 
 Conversion Operators 144
 
 Операторы преобразования 144
 
 How to: Use Operator Overloading to Create a Complex Number Class 154
 
 Перегрузка операторов для реализации класса комплексных чисел 154
 
 Guidelines for Overloading Equals() and Operator == 155
 
 Правила переопределения метода Equals и оператора равенства (==) 155
 
 Objects, Classes and Structs 162
 
 Overview 162
 
 Объекты, классы и структуры 162
 
 Общие сведения 164
 
 Члены 164
 
 Доступность 164
 
 Наследование 165
 
 Интерфейсы 165
 
 Универсальные типы 165
 
 Статические типы 165
 
 Вложенные типы 165
 
 Разделяемый класс 165
 
 Инициализаторы объектов 165
 
 Анонимные типы 165
 
 Методы расширения 165
 
 Неявно типизированные локальные переменные 165
 
 Objects 166
 
 Объекты 166
 
 Classes 169
 
 Классы 170
 
 Structs 175
 
 Структуры 175
 
 Inheritance 180
 
 Наследование 180
 
 Interfaces 212
 
 Интерфейсы 212
 
 Members 225
 
 Члены 226
 
 Methods 227
 
 Методы 228
 
 Constructors 243
 
 Конструкторы 243
 
 Fields 273
 
 Поля 273
 
 Constants 275
 
 Константы 275
 
 Nested Types 275
 
 Вложенные типы 276
 
 Access Modifiers 277
 
 Модификаторы доступа 277
 
 Partial Classes and Methods 279
 
 Разделяемые классы и методы 280
 
 Static Classes and Static Class Members 289
 
 Статические классы и члены статических классов 289
 
 How to: Know the Difference Between Passing a Struct and Passing a Class Reference to a Method 296
 
 Определение различия между передачей структуры и ссылки класса в метод 296
 
 Anonymous Types 297
 
 Анонимные типы 297
 
 Extension Methods 302
 
 Методы расширения 302
 
 Implicitly Typed Local Variables 305
 
 Неявно типизированные локальные переменные 305
 
 Properties 309
 
 Example 309
 
 Свойства 309
 
 Пример 309
 
 Output 310
 
 Properties Overview 310
 
 Результат 310
 
 Общие сведения о свойствах 310
 
 Using Properties 311
 
 Использование свойств 312
 
 Interface Properties 326
 
 Свойства интерфейса 326
 
 Asymmetric Accessor Accessibility 329
 
 Асимметричные методы доступа 329
 
 How to: Declare and Use Read/Write Properties 335
 
 Объявление и использование свойств чтения и записи 335
 
 Auto-Implemented Properties 338
 
 Автоматически реализуемые свойства 338
 
 How to: Implement a Lightweight Class with Auto-Implemented Properties 339
 
 Реализация облегченного класса с автоматически реализуемыми свойствами 339
 
 Indexers 340
 
 Indexers Overview 340
 
 Индексаторы 340
 
 Общие сведения об индексаторах 340
 
 Using Indexers 341
 
 Использование индексаторов 341
 
 Indexers in Interfaces 346
 
 Индексаторы в интерфейсах 346
 
 Comparison Between Properties and Indexers 350
 
 Сравнение свойств и индексаторов 350
 
 Delegates 351
 
 Delegates Overview 351
 
 Делегаты 351
 
 Общие сведения о делегатах 351
 
 Using Delegates 352
 
 Использование делегатов 352
 
 Delegates with Named vs. Anonymous Methods 356
 
 Делегаты с именованными методами и делегаты с анонимными методами 356
 
 When to Use Delegates Instead of Interfaces 359
 
 Использование делегатов вместо интерфейсов 359
 
 Covariance and Contravariance in Delegates 360
 
 Ковариация и контрвариация в делегатах 360
 
 How to: Combine Delegates (Multicast Delegates) 362
 
 Объединение делегатов (многоадресные делегаты) 362
 
 How to: Declare, Instantiate, and Use a Delegate 363
 
 Объявление, создание экземпляра и использование делегата 363
 
 Events 367
 
 Events Overview 367
 
 События 367
 
 Общие сведения о событиях 367
 
 How to: Subscribe to and Unsubscribe from Events 368
 
 Подписка и отмена подписки на события 368
 
 How to: Publish Events that Conform to .NET Framework Guidelines 371
 
 Публикация событий, соответствующих рекомендациям .NET Framework 371
 
 How to: Raise Base Class Events in Derived Classes 376
 
 Создание событий базового класса в производных классах 376
 
 How to: Raise and Consume Events 382
 
 Вызов и прием событий 382
 
 How to: Implement Interface Events 388
 
 Реализация событий интерфейса 388
 
 How to: Use a Dictionary to Store Event Instances 393
 
 Использование словаря для хранения экземпляров событий 393
 
 Generics 396
 
 Generics Overview 396
 
 Универсальные шаблоны 396
 
 Общие сведения об универсальных шаблонах 396
 
 Introduction to Generics 397
 
 Введение в универсальные шаблоны 397
 
 Benefits of Generics 400
 
 Преимущества универсальных шаблонов 400
 
 Generic Type Parameters 402
 
 Параметры универсального типа 403
 
 Namespaces 404
 
 Namespaces Overview 404
 
 Пространства имен 404
 
 Общие сведения о пространствах имен 404
 
 Using Namespaces 405
 
 Использование пространств имен 406
 
 How to: Use the Namespace Alias Qualifier 412
 
 Использование квалификатора псевдонима пространства имен 413
 
 Nullable Types 415
 
 Типы, допускающие значения null 415
 
 Nullable Types Overview 416
 
 Общие сведения о типах, допускающих значения null 416
 
 Using Nullable Types 417
 
 Использование типов, допускающих значение null 418
 
 How to: Identify a Nullable Type 425
 
 Идентификация типа, допускающего значение null 425
 
 Unsafe Code and Pointers 427
 
 Unsafe Code Overview 427
 
 Небезопасный код и указатели 427
 
 Общие сведения о небезопасном коде 427
 
 Fixed Size Buffers 428
 
 Буферы фиксированного размера 429
 
 Pointer types 431
 
 Типы указателей 432
 
 XML Documentation Comments 451
 
 Recommended Tags for Documentation Comments 451
 
 Комментарии XML-документации 451
 
 Рекомендуемые теги для комментариев документации 451
 
 How to: Use the XML Documentation Features 452
 
 Использование XML-документации 452
 
 Application Domains 456
 
 Application Domains Overview 456
 
 Домены приложений 456
 
 Общие сведения о доменах приложений 456
 
 Executing Code in Another Application Domain 457
 
 Выполнение кода в другом домене приложения 457
 
 Assemblies and the Global Assembly Cache 459
 
 Assemblies Overview 459
 
 Сборки и глобальный кэш сборок 459
 
 Общие сведения о сборках 459
 
 Attributes 460
 
 Attribute Overview 460
 
 Атрибуты 460
 
 Общие сведения об атрибутах 460
 
 Using Attributes 461
 
 Использование атрибутов 462
 
 How to: Create a C/C++ Union Using Attributes 463
 
 Создание объединения C/C++ с помощью атрибутов 464
 
 Common Attributes 465
 
 Общие атрибуты 466
 
 Exceptions and Exception Handling 472
 
 Исключения и обработка исключений 472
 
 Exceptions Overview 473
 
 Общие сведения об исключениях 473
 
 Using Exceptions 474
 
 Использование исключений 475
 
 Exception Handling 478
 
 Обработка исключений 479
 
 Creating and Throwing Exceptions 483
 
 Создание и генерация исключений 483
 
 Compiler-Generated Exceptions 486
 
 Исключения, создаваемые компилятором 486
 
 How to: Handle an Exception Using try/catch 487
 
 Обработка исключений с помощью блока try-catch 487
 
 How to: Execute Cleanup Code Using finally 488
 
 Выполнение кода очистки с использованием блока finally 488
 
 Interoperability 490
 
 How to: Use Platform Invoke to Play a Wave File 490
 
 Взаимодействие 490
 
 Использование вызова неуправляемого кода для воспроизведения звукового файла 490
 
 PlaySound 494
 
 Threading 497
 
 Overview 497
 
 Создание потоков 497
 
 Общие сведения 497
 
 Using Threading 498
 
 Использование потоков 498
 
 Thread Synchronization 499
 
 Синхронизация потоков 499
 
 How to: Create and Terminate Threads 504
 
 Создание и завершение потоков 504
 
 How to: Synchronize a Producer and a Consumer Thread 508
 
 Синхронизация потока-производителя и потока-потребителя 508
 
 How to: Use a Thread Pool 517
 
 Использование пула потоков 517
 
 Reflection 521
 
 Reflection Overview 521
 
 Отражение 521
 
 Общие сведения об отражении 521
 
 C# DLLs 522
 
 How to: Create and Use C# DLLs 522
 
 Библиотеки C# 522
 
 Создание и использование библиотек DLL на языке C# 522
 
 Security 525
 
 C# Specific Security Recommendations 525
 
 Безопасность 525
 
 Рекомендации по безопасности, касающиеся языка C# в отдельности 525
 
 Consuming Unmanaged DLL Functions 526
 
 To consume exported DLL functions 526
 
 Использование неуправляемых функций DLL 526
 
 Применение экспортированных функций DLL 526
 
 A Closer Look at Platform Invoke 527
 
 Подробный обзор вызова неуправляемого кода 527
 
 Identifying Functions in DLLs 528
 
 Идентификация функций в библиотеках DLL 528
 
 Creating a Class to Hold DLL Functions 529
 
 Создание класса, содержащего функции DLL 529
 
 Creating Prototypes in Managed Code 530
 
 Declaration Basics 530
 
 Создание прототипов в управляемом коде 530
 
 Основы описания 530
 
 Adjusting the Definition 531
 
 Настройка описания 531
 
 Specifying an Entry Point 532
 
 Задание точки входа 532
 
 Calling a DLL Function 533
 
 Passing Structures 533
 
 Вызов функции DLL 533
 
 Передача структур 533
 
 File and Stream I/O 536
 
 Basic File I/O 536
 
 Файловый и потоковый ввод-вывод 536
 
 Основы файлового ввода-вывода 536
 
 Classes Used for File I/O 537
 
 Классы, используемые в файловом вводе и выводе 537
 
 Classes Used for Reading from and Writing to Streams 538
 
 Классы, используемые для чтения и записи в поток 538
 
 Common I/O Stream Classes 539
 
 I/O and Security 539
 
 Общие классы потокового ввода и вывода 539
 
 Ввод-вывод и безопасность 539
 
 How to: Create a Directory Listing 540
 
 Создание списка каталогов 540
 
 How to: Read and Write to a Newly Created Data File 542
 
 Считывание из нового файла данных и запись в этот файл 542
 
 How to: Copy Directories 543
 
 Копирование каталогов 543
 
 How to: Open and Append to a Log File 544
 
 Открытие файла журнала и добавление в него данных 544
 
 How to: Write Text to a File 545
 
 Запись текста в файл 545
 
 How to: Read Text from a File 546
 
 Считывание текста из файла 546
 
 How to: Read Characters from a String 548
 
 Считывание символов из строки 548
 
 How to: Write Characters to a String 549
 
 Запись символов в строку 549
 
 How to: Add or Remove Access Control List Entries 550
 
 Добавление или удаление записей списка управления доступом 550
 
 How to: Compress Files 553
 
 Сжатие файлов 553
 
 Composing Streams 555
 
 Создание потоков 555
 
 Creating a Writer 557
 
 Создание класса Writer 557
 
 Collections and Data Structures 558
 
 Коллекции и структуры данных 558
 
 Defining Collections 559
 
 Определение коллекций 559
 
 Selecting a Collection Class 561
 
 Выбор класса коллекции 561
 
 Introduction to Solutions, Projects, and Items 563
 
 Containers: Solutions and Projects 563
 
 Items: Files, References, Data Connections 563
 
 Знакомство с решениями, проектами и элементами 563
 
 Контейнеры: проекты и решения 563
 
 Элементы: файлы, ссылки, подключения к данным 563
 
 Solutions as Containers 564
 
 Решения как контейнеры 564
 
 Solutions 565
 
 Решения 565
 
 Projects as Containers 566
 
 Проекты как контейнеры 566
 
 Using the Visual C# IDE 569
 
 Introduction to the IDE 569
 
 Использование интегрированной среды разработки Visual C# 569
 
 Введение в интегрированную среду разработки 569
 
 Visual C# Tools 570
 
 Средства Visual C# 570
 
 Доступ к средствам в интегрированной среде разработки 571
 
 Solution Explorer and Project Designer 572
 
 Настройка интегрированной среды разработки 572
 
 Creating a Project 573
 
 Creating a New Project 573
 
 Создание проекта 573
 
 Создание нового проекта 573
 
 What's in Your Project? 576
 
 Состав проекта 576
 
 Modifying Project Properties 578
 
 Изменение свойств проекта 578
 
 Designing a User Interface 582
 
 Adding Controls 582
 
 Создание пользовательского интерфейса 582
 
 Добавление элементов управления 582
 
 Setting Properties 584
 
 Handling Events 584
 
 Задание свойств 584
 
 Обработка событий 584
 
 Editing Code 585
 
 IntelliSense 585
 
 Редактирование кода 585
 
 IntelliSense 585
 
 Refactoring 588
 
 Code Snippets 588
 
 Wavy underlines 588
 
 Оптимизация кода 588
 
 Фрагменты кода 588
 
 Подчеркивание волнистой линией 588
 
 Readability Aids 589
 
 Средства обеспечения удобочитаемости кода 589
 
 Navigating and Searching 590
 
 Class View 590
 
 Навигация и поиск 590
 
 Представление классов 590
 
 CTRL-TAB Navigation 591
 
 Навигация CTRL-TAB 591
 
 Navigation Bars 592
 
 Панели переходов 592
 
 Find in Files 593
 
 Object Browser 593
 
 Navigation Stacks 593
 
 Поиск в файлах 593
 
 Обозреватель объектов 593
 
 Стеки навигации 593
 
 Building and Debugging 594
 
 Build Settings 594
 
 Build Errors 594
 
 Построение и отладка 594
 
 Параметры построения 594
 
 Ошибки построения 594
 
 Release vs. Debug configurations 596
 
 Debugging 596
 
 Сравнение отладочной и выпускной конфигураций 596
 
 Отладка 596
 
 Modeling and Analyzing Code 599
 
 Class Designer 599
 
 Моделирование и анализ кода 599
 
 Конструктор классов 599
 
 Object Browser 601
 
 Обозреватель объектов 601
 
 Metadata as Source: 602
 
 Code Analysis for Managed Code 602
 
 Метаданные как источник 602
 
 Анализ управляемого кода 602
 
 Adding and Editing Resources 603
 
 Adding Resources to Projects 603
 
 Добавление и редактирование ресурсов 603
 
 Добавление ресурсов в проекты 603
 
 Editing Resources 604
 
 Редактирование ресурсов 604
 
 Compiling Resources into Assemblies 605
 
 Accessing Resources at Run-Time 605
 
 Компиляция ресурсов в сборки 605
 
 Доступ к ресурсам во время выполнения 605
 
 Getting Help 606
 
 Online vs. Local Help 606
 
 Получение справки 606
 
 Локальная справка и справка в Интернете 606
 
 F1 Search 607
 
 Search 607
 
 Поиск по F1 607
 
 Поиск 607
 
 Index 608
 
 Table of Contents 608
 
 Указатель 608
 
 Содержание 608
 
 How Do I 609
 
 Dynamic Help 609
 
 Samples 609
 
 Инструкции 609
 
 Динамическая справка 609
 
 Примеры 609
 
 Refactoring 610
 
 Multi-Project Refactoring 610
 
 Preview Changes Dialog Box 610
 
 Error-Tolerant Refactoring 610
 
 Оптимизация 610
 
 Многопроектная оптимизация 610
 
 Диалоговое окно "Предварительный просмотр изменений" 610
 
 Допускающая наличие ошибок оптимизация 610
 
 Extract Method 611
 
 Извлечение метода 611
 
 Rename 613
 
 Переименовать 613
 
 Promote Local Variable to Parameter 616
 
 Превращение локальной переменной в параметр 616
 
 Заметки 617
 
 Code Colorization 619
 
 Tokens 619
 
 Разметка кода цветом 619
 
 Лексемы 619
 
 Contextual Keywords 620
 
 Brace Matching Colorization 620
 
 Bold Colorization 620
 
 Контекстные ключевые слова 620
 
 Разметка цветом для обозначения парности фигурных скобок 620
 
 Разметка цветом и жирным шрифтом 620
 
 Highlight Colorization 621
 
 Разметка цветом и выделение цветным фоном 621
 
 
 
 
 |