Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Руководство по программированию на 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

Отображение аргументов командной строки 18

How to: Access Command-Line Arguments Using foreach 19

Доступ к аргументам командной строки с помощью оператора "foreach" 19

Main() Return Values 20

Значения, возвращаемые методом Main() 20

Types 22

Data Types Overview 22

Типы 22

Общие сведения о типах данных 22

Casting 23

Приведение 23

Boxing and Unboxing 24

Упаковка-преобразование и распаковка-преобразование 24

How to: Convert a byte Array to an int 29

Преобразование массива байтов в значение типа "int" 29

How to: Convert a string to an int 31

Преобразование строки в значение типа "int" 31

How to: Convert Hexadecimal Strings 33

Преобразование шестнадцатеричных строк 33

Arrays 35

Array Overview 35

Массивы 35

Общие сведения о массивах 35

Arrays as Objects 36

Массивы как объекты 36

Single-Dimensional Arrays 37

Одномерные массив 37

Multidimensional Arrays 38

Многомерные массивы 38

Jagged Arrays 39

Массивы массивов 39

Using foreach with Arrays 42

Использование оператора foreach с массивами 42

Passing Arrays as Parameters 43

Передача массивов в качестве параметров 43

Passing Arrays Using ref and out 47

Передача массивов при помощи параметров ref и out 47

Implicitly Typed Arrays 50

Неявно типизированные массивы 50

Strings 52

Using Strings 52

Строки 52

Использование строк 52

How to: Parse Strings Using the Split Method 58

Анализ строк с помощью метода разделения 58

How to: Search Strings Using String Methods 59

Навигация по содержимому строки с помощью строковых методов 59

How to: Search Strings Using Regular Expressions 60

Анализ строк с помощью регулярных выражений 60

How to: Join Multiple Strings 62

Объединение нескольких строк 62

How to: Modify String Contents 63

Изменение содержимого строки 63

How to: Determine Whether a String Contains a Numeric Value 64

Определение наличия числового значения в строке 64

Encoding Base Types 66

Базовые типы кодировки 66

Formatting Types 68

Formatting Overview 68

Типы форматирования 68

Общие сведения о форматировании 68

Composite Formatting 74

Составное форматирование 74

Numeric Format Strings 80

Строки числовых форматов 80

.NET Framework Regular Expressions 103

Регулярные выражения в .NET Framework 103

Regular Expressions as a Language 104

Регулярные выражения как язык 104

Character Escapes 105

Escape-знаки 105

How to: Perform String Manipulations by Using Basic String Operations 107

Example 107

Выполнение действия со строками с помощью основных строковых операций 107

Пример 107

Parsing Strings 111

Parsing Numeric Strings 111

Разбор строк 111

Разбор числовых строк 111

Statements, Expressions, and Operators 114

Statements 114

Операторы и выражения 114

Операторы 114

Expressions 115

Выражения 115

Operators 117

Операторы 117

Anonymous Functions 121

Анонимные функции 121

Overloadable Operators 133

Перегружаемые операторы 133

Conversion Operators 134

Операторы преобразования 134

How to: Use Operator Overloading to Create a Complex Number Class 141

Перегрузка операторов для реализации класса комплексных чисел 141

Guidelines for Overloading Equals() and Operator == 142

Правила переопределения метода Equals и оператора равенства (==) 142

Objects, Classes and Structs 146

Overview 146

Объекты, классы и структуры 146

Общие сведения 147

Члены 147

Доступность 147

Наследование 148

Интерфейсы 148

Универсальные типы 148

Статические типы 148

Вложенные типы 148

Разделяемый класс 148

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

Анонимные типы 148

Методы расширения 148

Неявно типизированные локальные переменные 148

Objects 149

Объекты 149

Classes 151

Классы 151

Structs 155

Структуры 155

Inheritance 159

Наследование 159

Interfaces 179

Интерфейсы 179

Members 188

Члены 188

Methods 189

Методы 189

Constructors 202

Конструкторы 202

Fields 223

Поля 223

Constants 225

Константы 225

Nested Types 226

Вложенные типы 226

Access Modifiers 227

Модификаторы доступа 227

Partial Classes and Methods 229

Разделяемые классы и методы 229

Static Classes and Static Class Members 236

Статические классы и члены статических классов 236

How to: Know the Difference Between Passing a Struct and Passing a Class Reference to a Method 242

Определение различия между передачей структуры и ссылки класса в метод 242

Anonymous Types 243

Анонимные типы 243

Extension Methods 247

Методы расширения 247

Implicitly Typed Local Variables 249

Неявно типизированные локальные переменные 249

Properties 252

Example 252

Свойства 252

Пример 252

Output 253

Properties Overview 253

Результат 253

Общие сведения о свойствах 253

Using Properties 254

Использование свойств 254

Interface Properties 265

Свойства интерфейса 265

Asymmetric Accessor Accessibility 268

Асимметричные методы доступа 268

How to: Declare and Use Read/Write Properties 274

Объявление и использование свойств чтения и записи 274

Auto-Implemented Properties 277

Автоматически реализуемые свойства 277

How to: Implement a Lightweight Class with Auto-Implemented Properties 278

Реализация облегченного класса с автоматически реализуемыми свойствами 278

Indexers 279

Indexers Overview 279

Индексаторы 279

Общие сведения об индексаторах 279

Using Indexers 280

Использование индексаторов 280

Indexers in Interfaces 285

Индексаторы в интерфейсах 285

Comparison Between Properties and Indexers 288

Сравнение свойств и индексаторов 288

Delegates 289

Delegates Overview 289

Делегаты 289

Общие сведения о делегатах 289

Using Delegates 290

Использование делегатов 290

Delegates with Named vs. Anonymous Methods 294

Делегаты с именованными методами и делегаты с анонимными методами 294

When to Use Delegates Instead of Interfaces 297

Использование делегатов вместо интерфейсов 297

Covariance and Contravariance in Delegates 298

Ковариация и контрвариация в делегатах 298

How to: Combine Delegates (Multicast Delegates) 300

Объединение делегатов (многоадресные делегаты) 300

How to: Declare, Instantiate, and Use a Delegate 301

Объявление, создание экземпляра и использование делегата 301

Events 305

Events Overview 305

События 305

Общие сведения о событиях 305

How to: Subscribe to and Unsubscribe from Events 306

Подписка и отмена подписки на события 306

How to: Publish Events that Conform to .NET Framework Guidelines 309

Публикация событий, соответствующих рекомендациям .NET Framework 309

How to: Raise Base Class Events in Derived Classes 314

Создание событий базового класса в производных классах 314

How to: Raise and Consume Events 320

Вызов и прием событий 320

How to: Implement Interface Events 326

Реализация событий интерфейса 326

How to: Use a Dictionary to Store Event Instances 331

Использование словаря для хранения экземпляров событий 331

Generics 333

Generics Overview 333

Универсальные шаблоны 333

Общие сведения об универсальных шаблонах 333

Introduction to Generics 334

Введение в универсальные шаблоны 334

Benefits of Generics 337

Преимущества универсальных шаблонов 337

Generic Type Parameters 339

Параметры универсального типа 339

Namespaces 340

Namespaces Overview 340

Пространства имен 340

Общие сведения о пространствах имен 340

Using Namespaces 341

Использование пространств имен 341

How to: Use the Namespace Alias Qualifier 346

Использование квалификатора псевдонима пространства имен 346

Nullable Types 348

Типы, допускающие значения null 348

Nullable Types Overview 349

Общие сведения о типах, допускающих значения null 349

Using Nullable Types 350

Использование типов, допускающих значение null 350

How to: Identify a Nullable Type 356

Идентификация типа, допускающего значение null 357

Unsafe Code and Pointers 357

Unsafe Code Overview 357

Небезопасный код и указатели 358

Общие сведения о небезопасном коде 358

Fixed Size Buffers 359

Буферы фиксированного размера 359

Pointer types 361

Типы указателей 361

XML Documentation Comments 374

Recommended Tags for Documentation Comments 374

Комментарии XML-документации 374

Рекомендуемые теги для комментариев документации 374

How to: Use the XML Documentation Features 375

Использование XML-документации 375

Application Domains 379

Application Domains Overview 379

Домены приложений 379

Общие сведения о доменах приложений 379

Executing Code in Another Application Domain 380

Выполнение кода в другом домене приложения 380

Assemblies and the Global Assembly Cache 382

Assemblies Overview 382

Сборки и глобальный кэш сборок 382

Общие сведения о сборках 382

Attributes 383

Attribute Overview 383

Атрибуты 383

Общие сведения об атрибутах 383

Using Attributes 384

Использование атрибутов 384

How to: Create a C/C++ Union Using Attributes 386

Создание объединения C/C++ с помощью атрибутов 386

Common Attributes 387

Общие атрибуты 387

Exceptions and Exception Handling 391

Исключения и обработка исключений 391

Exceptions Overview 392

Общие сведения об исключениях 392

Using Exceptions 393

Использование исключений 393

Exception Handling 396

Обработка исключений 396

Creating and Throwing Exceptions 399

Создание и генерация исключений 399

Compiler-Generated Exceptions 402

Исключения, создаваемые компилятором 402

How to: Handle an Exception Using try/catch 403

Обработка исключений с помощью блока try-catch 403

How to: Execute Cleanup Code Using finally 404

Выполнение кода очистки с использованием блока finally 404

Interoperability 406

How to: Use Platform Invoke to Play a Wave File 406

Взаимодействие 406

Использование вызова неуправляемого кода для воспроизведения звукового файла 406

PlaySound 409

Threading 412

Overview 412

Создание потоков 412

Общие сведения 412

Using Threading 413

Использование потоков 413

Thread Synchronization 414

Синхронизация потоков 414

How to: Create and Terminate Threads 419

Создание и завершение потоков 419

How to: Synchronize a Producer and a Consumer Thread 423

Синхронизация потока-производителя и потока-потребителя 423

How to: Use a Thread Pool 432

Использование пула потоков 432

Reflection 436

Reflection Overview 436

Отражение 436

Общие сведения об отражении 436

C# DLLs 437

How to: Create and Use C# DLLs 437

Библиотеки C# 437

Создание и использование библиотек DLL на языке C# 437

Security 440

C# Specific Security Recommendations 440

Безопасность 440

Рекомендации по безопасности, касающиеся языка C# в отдельности 440

Consuming Unmanaged DLL Functions 441

To consume exported DLL functions 441

Использование неуправляемых функций DLL 441

Применение экспортированных функций DLL 441

A Closer Look at Platform Invoke 442

Подробный обзор вызова неуправляемого кода 442

Identifying Functions in DLLs 443

Идентификация функций в библиотеках DLL 443

Creating a Class to Hold DLL Functions 444

Создание класса, содержащего функции DLL 444

Creating Prototypes in Managed Code 445

Declaration Basics 445

Создание прототипов в управляемом коде 445

Основы описания 445

Adjusting the Definition 446

Настройка описания 446

Specifying an Entry Point 447

Задание точки входа 447

Calling a DLL Function 448

Passing Structures 448

Вызов функции DLL 448

Передача структур 448

File and Stream I/O 451

Basic File I/O 451

Файловый и потоковый ввод-вывод 451

Основы файлового ввода-вывода 451

Classes Used for File I/O 452

Классы, используемые в файловом вводе и выводе 452

Classes Used for Reading from and Writing to Streams 453

Классы, используемые для чтения и записи в поток 453

Common I/O Stream Classes 454

I/O and Security 454

Общие классы потокового ввода и вывода 454

Ввод-вывод и безопасность 454

How to: Create a Directory Listing 455

Создание списка каталогов 455

How to: Read and Write to a Newly Created Data File 457

Считывание из нового файла данных и запись в этот файл 457

How to: Copy Directories 458

Копирование каталогов 458

How to: Open and Append to a Log File 459

Открытие файла журнала и добавление в него данных 459

How to: Write Text to a File 460

Запись текста в файл 460

How to: Read Text from a File 461

Считывание текста из файла 461

How to: Read Characters from a String 463

Считывание символов из строки 463

How to: Write Characters to a String 464

Запись символов в строку 464

How to: Add or Remove Access Control List Entries 465

Добавление или удаление записей списка управления доступом 465

How to: Compress Files 468

Сжатие файлов 468

Composing Streams 470

Создание потоков 470

Creating a Writer 472

Создание класса Writer 472

Collections and Data Structures 473

Коллекции и структуры данных 473

Defining Collections 474

Определение коллекций 474

Selecting a Collection Class 476

Выбор класса коллекции 476

Introduction to Solutions, Projects, and Items 478

Containers: Solutions and Projects 478

Items: Files, References, Data Connections 478

Знакомство с решениями, проектами и элементами 478

Контейнеры: проекты и решения 478

Элементы: файлы, ссылки, подключения к данным 478

Solutions as Containers 479

Решения как контейнеры 479

Solutions 480

Решения 480

Projects as Containers 481

Проекты как контейнеры 481

Using the Visual C# IDE 484

Introduction to the IDE 484

Использование интегрированной среды разработки Visual C# 484

Введение в интегрированную среду разработки 484

Visual C# Tools 485

Средства Visual C# 485

Доступ к средствам в интегрированной среде разработки 486

Solution Explorer and Project Designer 487

Настройка интегрированной среды разработки 487

Creating a Project 488

Creating a New Project 488

Создание проекта 488

Создание нового проекта 488

What's in Your Project? 491

Состав проекта 491

Modifying Project Properties 493

Изменение свойств проекта 493

Designing a User Interface 497

Adding Controls 497

Создание пользовательского интерфейса 497

Добавление элементов управления 497

Setting Properties 499

Handling Events 499

Задание свойств 499

Обработка событий 499

Editing Code 500

IntelliSense 500

Редактирование кода 500

IntelliSense 500

Refactoring 503

Code Snippets 503

Wavy underlines 503

Оптимизация кода 503

Фрагменты кода 503

Подчеркивание волнистой линией 503

Readability Aids 504

Средства обеспечения удобочитаемости кода 504

Navigating and Searching 505

Class View 505

Навигация и поиск 505

Представление классов 505

CTRL-TAB Navigation 506

Навигация CTRL-TAB 506

Navigation Bars 507

Панели переходов 507

Find in Files 508

Object Browser 508

Navigation Stacks 508

Поиск в файлах 508

Обозреватель объектов 508

Стеки навигации 508

Building and Debugging 509

Build Settings 509

Build Errors 509

Построение и отладка 509

Параметры построения 509

Ошибки построения 509

Release vs. Debug configurations 511

Debugging 511

Сравнение отладочной и выпускной конфигураций 511

Отладка 511

Modeling and Analyzing Code 514

Class Designer 514

Моделирование и анализ кода 514

Конструктор классов 514

Object Browser 516

Обозреватель объектов 516

Metadata as Source: 517

Code Analysis for Managed Code 517

Метаданные как источник 517

Анализ управляемого кода 517

Adding and Editing Resources 518

Adding Resources to Projects 518

Добавление и редактирование ресурсов 518

Добавление ресурсов в проекты 518

Editing Resources 519

Редактирование ресурсов 519

Compiling Resources into Assemblies 520

Accessing Resources at Run-Time 520

Компиляция ресурсов в сборки 520

Доступ к ресурсам во время выполнения 520

Getting Help 521

Online vs. Local Help 521

Получение справки 521

Локальная справка и справка в Интернете 521

F1 Search 522

Search 522

Поиск по F1 522

Поиск 522

Index 523

Table of Contents 523

Указатель 523

Содержание 523

How Do I 524

Dynamic Help 524

Samples 524

Инструкции 524

Динамическая справка 524

Примеры 524

Refactoring 525

Multi-Project Refactoring 525

Preview Changes Dialog Box 525

Error-Tolerant Refactoring 525

Оптимизация 525

Многопроектная оптимизация 525

Диалоговое окно "Предварительный просмотр изменений" 525

Допускающая наличие ошибок оптимизация 525

Extract Method 526

Извлечение метода 526

Rename 528

Переименовать 528

Promote Local Variable to Parameter 531

Превращение локальной переменной в параметр 531

Заметки 532

Code Colorization 534

Tokens 534

Разметка кода цветом 534

Лексемы 534

Contextual Keywords 535

Brace Matching Colorization 535

Bold Colorization 535

Контекстные ключевые слова 535

Разметка цветом для обозначения парности фигурных скобок 535

Разметка цветом и жирным шрифтом 535

Highlight Colorization 536

Разметка цветом и выделение цветным фоном 536

C# Programming Guide

This section provides detailed information on key C# language features and features accessible to C# through the .NET Framework.

Inside a C# Program

The section discusses the general structure of a C# program, and includes the standard "Hello, World!" example.

Hello World -- Your First Program

The following console program is the C# version of the traditional "Hello World!" program, which displays the string Hello World!.

using System;

// A "Hello World!" program in C#

namespace HelloWorld

{

class Hello

{

static void Main()

{

System.Console.WriteLine("Hello World!");

}

}

}

Let us now examine the important parts of this program in turn.

Comments

The first line contains a comment:

// A "Hello World!" program in C#

The characters // convert the rest of the line to a comment. You can also comment a block of text by enclosing it between the /* and */ characters, for example:

/* A "Hello World!" program in C#.

This program displays the string "Hello World!" on the screen. */

Руководство по программированию на C#

В этом разделе представлены подробные сведения об основных возможностях языка C#, а также о функциях, доступных в этом языке благодаря платформе .NET Framework.

Структура программы C#

В данном разделе рассматривается общая структура программы C# и приведен стандартный пример "Здравствуй, мир!".

Hello World – Создаем первую программу

Следующая консольная программа – это версия традиционной программы "Hello World!" на языке C#, которая выводит на экран строку Hello World!.

---

Давайте разберем важные части этой программы по порядку.

Комментарии

Первая строка содержит комментарий.

// A "Hello World!" program in C#

Символы // преобразуют остальную часть строки в комментарий. Можно также написать комментарий к блоку текста, окружив его символами /* и */, например:

/* A "Hello World!" program in C#.

This program displays the string "Hello World!" on the screen. */

The Main Method

The C# program must contain a Main method, in which control starts and ends. The Main method is where you create objects and execute other methods.

The Main method is a static method that resides inside a class or a struct. In the previous "Hello World!" example, it resides in a class named Hello. Declare the Main method in one of the following ways:

  • It can return void:

    static void Main()

    {

    //...

    }

  • It can also return an int:

    static int Main()

    {

    //...

    return 0;

    }

  • With both of the return types, it can take arguments:

    static void Main(string[] args)

    {

    //...

    }

  • -or-

static int Main(string[] args)

{

//...

return 0;

}

The parameter of the Main method is a string array that represents the command-line arguments used to invoke the program. Notice that, unlike C++, this array does not include the name of the executable (exe) file.