Краткий обзор языка C#A Tour of the C# Language

C# (произносится как "си шарп") — простой, современный объектно-ориентированный и типобезопасный язык программирования.C# (pronounced "See Sharp") is a simple, modern, object-oriented, and type-safe programming language. C# относится к широко известному семейству языков C, и покажется хорошо знакомым любому, кто работал с C, C++, Java или JavaScript.C# has its roots in the C family of languages and will be immediately familiar to C, C++, Java, and JavaScript programmers.

C# является объектно-ориентированным языком, но поддерживает также и компонентно-ориентированное программирование.C# is an object-oriented language, but C# further includes support for component-oriented programming. Разработка современных приложений все больше тяготеет к созданию программных компонентов в форме автономных и самоописательных пакетов, реализующих отдельные функциональные возможности.Contemporary software design increasingly relies on software components in the form of self-contained and self-describing packages of functionality. Важная особенность таких компонентов — это модель программирования на основе свойств, методов и событий. Каждый компонент имеет атрибуты, предоставляющие декларативные сведения о компоненте, а также встроенные элементы документации.Key to such components is that they present a programming model with properties, methods, and events; they have attributes that provide declarative information about the component; and they incorporate their own documentation. C# предоставляет языковые конструкции, непосредственно поддерживающие такую концепцию работы. Благодаря этому C# отлично подходит для создания и применения программных компонентов.C# provides language constructs to support directly these concepts, making C# a very natural language in which to create and use software components.

Вот лишь несколько функций языка C#, обеспечивающих надежность и устойчивость приложений: сборка мусора автоматически освобождает память, занятую уничтоженными и неиспользуемыми объектами; обработка исключений дает структурированный и расширяемый способ выявлять и обрабатывать ошибки; строгая типизация языка не позволяет обращаться к неинициализированным переменным, выходить за пределы массива или выполнять неконтролируемое приведение типов.Several C# features aid in the construction of robust and durable applications: Garbage collection automatically reclaims memory occupied by unreachable unused objects; exception handling provides a structured and extensible approach to error detection and recovery; and the type-safe design of the language makes it impossible to read from uninitialized variables, to index arrays beyond their bounds, or to perform unchecked type casts.

В C# существует единая система типов.C# has a unified type system. Все типы C#, включая типы-примитивы, такие как int и double, наследуют от одного корневого типа object.All C# types, including primitive types such as int and double, inherit from a single root object type. Таким образом, все типы используют общий набор операций, и значения любого типа можно хранить, передавать и обрабатывать схожим образом.Thus, all types share a set of common operations, and values of any type can be stored, transported, and operated upon in a consistent manner. Кроме того, C# поддерживает пользовательские ссылочные типы и типы значений, позволяя как динамически выделять память для объектов, так и хранить упрощенные структуры в стеке.Furthermore, C# supports both user-defined reference types and value types, allowing dynamic allocation of objects as well as in-line storage of lightweight structures.

Чтобы обеспечить совместимость программ и библиотек C# при дальнейшем развитии, при разработке C# много внимания было уделено управлению версиями.To ensure that C# programs and libraries can evolve over time in a compatible manner, much emphasis has been placed on versioning in C#’s design. Многие языки программирования обходят вниманием этот вопрос, и в результате программы на этих языках ломаются чаще, чем хотелось бы, при выходе новых версий зависимых библиотек.Many programming languages pay little attention to this issue, and, as a result, programs written in those languages break more often than necessary when newer versions of dependent libraries are introduced. Вопросы управления версиями существенно повлияли на такие аспекты разработки C#, как раздельные модификаторы virtual и override, правила разрешения перегрузки методов и поддержка явного объявления членов интерфейса.Aspects of C#’s design that were directly influenced by versioning considerations include the separate virtual and override modifiers, the rules for method overload resolution, and support for explicit interface member declarations.

Здравствуй, мирHello world

Для первого знакомства с языком программирования традиционно используется программа "Hello, World".The "Hello, World" program is traditionally used to introduce a programming language. Вот ее пример на C#:Here it is in C#:

using System;
class Hello
{
    static void Main()
    {
        Console.WriteLine("Hello, World");
    }
}

Файлы исходного кода C# обычно имеют расширение .cs.C# source files typically have the file extension .cs. Если код нашей программы "Hello, World" хранится в файле hello.cs, для ее компиляции выполните такую команду из командной строки:Assuming that the "Hello, World" program is stored in the file hello.cs, the program might be compiled using the command line:

csc hello.cs

В результате вы получите исполняемую сборку с именем hello.exe.which produces an executable assembly named hello.exe. Это приложение при запуске выводит следующий результат:The output produced by this application when it is run is:

Hello, World

Важно!

Команда csc выполняет компиляцию на полной версии платформы, и она может существовать не на всех платформах.The csc command compiles for the full framework, and may not be available on all platforms.

Программа "Hello, World" начинается с директивы using, которая ссылается на пространство имен System.The "Hello, World" program starts with a using directive that references the System namespace. Пространства имен позволяют иерархически упорядочивать программы и библиотеки C#.Namespaces provide a hierarchical means of organizing C# programs and libraries. Пространства имен содержат типы и другие пространства имен. Например, пространство имен System содержит несколько типов (в том числе используемый в нашей программе класс Console) и несколько других пространств имен, таких как IO и Collections.Namespaces contain types and other namespaces—for example, the System namespace contains a number of types, such as the Console class referenced in the program, and a number of other namespaces, such as IO and Collections. Директива using, которая ссылается на пространство имен, позволяет использовать типы из этого пространства имен без указания полного имени.A using directive that references a given namespace enables unqualified use of the types that are members of that namespace. Благодаря директиве using в коде программы можно использовать сокращенное имя Console.WriteLine вместо полного варианта System.Console.WriteLine.Because of the using directive, the program can use Console.WriteLine as shorthand for System.Console.WriteLine.

Класс Hello, объявленный в программе "Hello, World", имеет только один член — это метод с именем Main.The Hello class declared by the "Hello, World" program has a single member, the method named Main. Метод Main объявлен с модификатором static.The Main method is declared with the static modifier. Методы экземпляра могут ссылаться на конкретный экземпляр объекта, используя ключевое слово this, а статические методы работают без ссылки на конкретный объект.While instance methods can reference a particular enclosing object instance using the keyword this, static methods operate without reference to a particular object. По стандартному соглашению точкой входа программы является статический метод с именем Main.By convention, a static method named Main serves as the entry point of a program.

Выходные данные программы создаются в методе WriteLine класса Console из пространства имен System.The output of the program is produced by the WriteLine method of the Console class in the System namespace. Этот класс предоставляется библиотеками стандартных классов, ссылки на которые компилятор по умолчанию добавляет автоматически.This class is provided by the standard class libraries, which, by default, are automatically referenced by the compiler.

Есть еще очень много важной информации о языке C#.There's a lot more to learn about C#. В следующих статьях вы найдете сведения об отдельных элементах C#.The following topics provide an overview of the elements of the C# language. Эти краткие обзоры содержат базовые сведения обо всех элементах языка и позволят вам лучше разобраться в том, как работает C#.These overviews will provide basic information about all elements of the language and give you the information necessary to dive deeper into elements of the C# language:

  • Структура программыProgram Structure
    • Организационная структура C# основывается на таких понятиях, как программы, пространства имен, типы, члены и сборки.Learn the key organizational concepts in the C# language: programs, namespaces, types, members, and assemblies.
  • Типы и переменныеTypes and Variables
    • Получите дополнительные сведения о типах значений, ссылочных типах и переменных в языке C#.Learn about value types, reference types, and variables in the C# language.
  • ВыраженияExpressions
    • Выражения создаются из операндов и операторов.Expressions are constructed from operands and operators. Выражения возвращают значения.Expressions produce a value.
  • ОператорыStatements
    • Используйте инструкции для описания действий, выполняемых программой.You use statements to express the actions of a program.
  • Классы и объектыClasses and objects
    • Классы являются самым важным типом в языке C#.Classes are the most fundamental of C#'s types. Объекты представляют собой экземпляры классов.Objects are instances of a class. Классы создаются описанием их членов, которые также описаны в этой статье.Classes are built using members, which are also covered in this topic.
  • СтруктурыStructs
    • Структуры — это сущности для хранения данных. От классов они отличаются в первую очередь тем, что являются типами значений.Structs are data structures that, unlike classes, are value types.
  • МассивыArrays
    • Массив — это структура данных, содержащая несколько переменных, доступ к которым осуществляется по вычисляемым индексам.An array is a data structure that contains a number of variables that are accessed through computed indices.
  • ИнтерфейсыInterfaces
    • Интерфейс определяет контракт, который может быть реализован классами и структурами.An interface defines a contract that can be implemented by classes and structs. Интерфейс может содержать методы, свойства, события и индексаторы.An interface can contain methods, properties, events, and indexers. Интерфейс не предоставляет реализацию членов, которые в нем определены. Он лишь перечисляет члены, которые должны быть определены в классах или структурах, реализующих этот интерфейс.An interface does not provide implementations of the members it defines—it merely specifies the members that must be supplied by classes or structs that implement the interface.
  • ПеречисленияEnums
    • Тип enum представляет собой тип значения с набором именованных констант.An enum type is a distinct value type with a set of named constants.
  • ДелегатыDelegates
    • Тип delegate представляет ссылки на методы с конкретным списком параметров и типом возвращаемого значения.A delegate type represents references to methods with a particular parameter list and return type. Делегаты позволяют использовать методы как сущности, сохраняя их в переменные и передавая в качестве параметров.Delegates make it possible to treat methods as entities that can be assigned to variables and passed as parameters. Принцип работы делегатов близок к указателям функций из некоторых языков, но в отличие от указателей функций делегаты являются объектно-ориентированными и строго типизированными.Delegates are similar to the concept of function pointers found in some other languages, but unlike function pointers, delegates are object-oriented and type-safe.
  • АтрибутыAttributes
    • Атрибуты позволяют программам указывать дополнительные описательные данные о типах, членах и других сущностях.Attributes enable programs to specify additional declarative information about types, members, and other entities.