Структура программыProgram Structure

В C# основными понятиями организационной структуры являются программы, пространства имен, типы, члены и сборки.The key organizational concepts in C# are programs, namespaces, types, members, and assemblies. Программа на языке C# состоит из одного или нескольких файлов.C# programs consist of one or more source files. В программе объявляются типы, которые содержат члены. Эти типы можно организовать в пространства имен.Programs declare types, which contain members and can be organized into namespaces. Примерами типов являются классы и интерфейсы.Classes and interfaces are examples of types. К членам относятся поля, методы, свойства и события.Fields, methods, properties, and events are examples of members. При компиляции программы на C# упаковываются в сборки.When C# programs are compiled, they are physically packaged into assemblies. Сборка — это файл, обычно с расширением .exe или .dll, если она реализует приложение или библиотеку, соответственно.Assemblies typically have the file extension .exe or .dll, depending on whether they implement applications or libraries, respectively.

Этот пример кода объявляет класс с именем Stack в пространство имен с именем Acme.Collections:The example declares a class named Stack in a namespace called Acme.Collections:

using System;
namespace Acme.Collections
{
    public class Stack
    {
        Entry top;
        public void Push(object data) 
        {
            top = new Entry(top, data);
        }

        public object Pop() 
        {
            if (top == null)
            {
                throw new InvalidOperationException();
            }
            object result = top.data;
            top = top.next;
            return result;
        }
        
        class Entry
        {
            public Entry next;
            public object data;
            public Entry(Entry next, object data)
            {
                this.next = next;
                this.data = data;
            }
        }
    }
}

Полное имя этого класса: Acme.Collections.Stack.The fully qualified name of this class is Acme.Collections.Stack. Этот класс содержит несколько членов: поле с именем top, два метода с именами Push и Pop, а также вложенный класс с именем Entry.The class contains several members: a field named top, two methods named Push and Pop, and a nested class named Entry. Класс Entry, в свою очередь, содержит три члена: поле с именем next, поле с именем data и конструктор.The Entry class further contains three members: a field named next, a field named data, and a constructor. Если мы сохраним исходный код этого примера в файле acme.cs, то для его компиляции нужно выполнить такую командную строку:Assuming that the source code of the example is stored in the file acme.cs, the command line

csc /t:library acme.cs

Результатом компиляции будет библиотека (код без точки входа Main), сохраненная в сборке с именем acme.dll.compiles the example as a library (code without a Main entry point) and produces an assembly named acme.dll.

Важно!

В приведенных выше примерах используется компилятор командной строки csc для C#.The examples above use csc as the command line C# compiler. Он существует в виде исполняемого файла Windows.This compiler is a Windows executable. Чтобы использовать C# на других платформах, вам понадобятся средства для .NET Core.To use C# across other platforms, you should use the tools for .NET Core. Экосистема .NET Core использует dotnet CLI для управления сборкой из командной строки.The .NET Core ecosystem uses the dotnet CLI to manage command line builds. Она позволяет управлять зависимостями и вызывать компилятор C#.This includes managing dependencies, and invoking the C# compiler. В этом руководстве вы найдете полное описание средств для всех платформ, поддерживаемых .NET Core.See this tutorial for a full description of those tools on the platforms supported by .NET Core.

Сборки содержат исполняемый код в виде инструкций промежуточного языка (IL) и символьную информацию в виде метаданных.Assemblies contain executable code in the form of Intermediate Language (IL) instructions, and symbolic information in the form of metadata. Перед выполнением сборки ее код на языке IL автоматически преобразуется в код для конкретного процессора. Эту задачу выполняет JIT-компилятор среды .NET CLR (Common Language Runtime).Before it is executed, the IL code in an assembly is automatically converted to processor-specific code by the Just-In-Time (JIT) compiler of .NET Common Language Runtime.

Cборка полностью описывает сама себя и содержит весь код и метаданные, поэтому в C# не используются директивы #include и файлы заголовков.Because an assembly is a self-describing unit of functionality containing both code and metadata, there is no need for #include directives and header files in C#. Чтобы использовать в программе C# открытые типы и члены, содержащиеся в определенной сборке, вам достаточно указать ссылку на эту сборку при компиляции программы.The public types and members contained in a particular assembly are made available in a C# program simply by referencing that assembly when compiling the program. Например, эта программа использует класс Acme.Collections.Stack из сборки acme.dll:For example, this program uses the Acme.Collections.Stack class from the acme.dll assembly:

using System;
using Acme.Collections;
class Example
{
    static void Main() 
    {
        Stack s = new Stack();
        s.Push(1);
        s.Push(10);
        s.Push(100);
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
    }
}

Если на момент компиляции example.cs программа хранится в файле example.cs, то ссылка на сборку acme.dll с использованием параметра компилятора /r будет выглядеть так:If the program is stored in the file example.cs, when example.cs is compiled, the acme.dll assembly can be referenced using the compiler’s /r option:

csc /r:acme.dll example.cs

Эта команда создает исполняемую сборку с именем example.exe, которая при запуске возвращает такие данные:This creates an executable assembly named example.exe, which, when run, produces the output:

100
10
1

В C# исходный текст программы можно хранить в нескольких исходных файлах.C# permits the source text of a program to be stored in several source files. При компиляции многофайловой программы на C# все исходные файлы обрабатываются вместе, и все они могут свободно ссылаться друг на друга. По сути обработка выполняется так, как если бы все исходные файлы были объединены в один большой файл.When a multi-file C# program is compiled, all of the source files are processed together, and the source files can freely reference each other—conceptually, it is as if all the source files were concatenated into one large file before being processed. В C# никогда не используются опережающие объявления, поскольку порядок объявления, за редким исключением, не играет никакой роли.Forward declarations are never needed in C# because, with very few exceptions, declaration order is insignificant. В C# нет требований объявлять только один открытый тип в одном исходном файле, а также имя исходного файла не обязано совпадать с типом, объявляемом в этом файле.C# does not limit a source file to declaring only one public type nor does it require the name of the source file to match a type declared in the source file.