Estructura del programaProgram Structure

Los principales conceptos organizativos en C# son programas, espacios de nombres, tipos, miembros y ensamblados.The key organizational concepts in C# are programs, namespaces, types, members, and assemblies. Los programas de C# constan de uno o más archivos de origen.C# programs consist of one or more source files. Los programas declaran tipos, que contienen miembros y pueden organizarse en espacios de nombres.Programs declare types, which contain members and can be organized into namespaces. Las clases e interfaces son ejemplos de tipos.Classes and interfaces are examples of types. Los campos, los métodos, las propiedades y los eventos son ejemplos de miembros.Fields, methods, properties, and events are examples of members. Cuando se compilan programas de C#, se empaquetan físicamente en ensamblados.When C# programs are compiled, they are physically packaged into assemblies. Normalmente, los ensamblados tienen la extensión de archivo .exe o .dll, dependiendo de si implementan aplicaciones o bibliotecas, respectivamente.Assemblies typically have the file extension .exe or .dll, depending on whether they implement applications or libraries, respectively.

En el ejemplo se declara una clase denominada Stack en un espacio de nombres llamado 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;
            }
        }
    }
}

El nombre completo de esta clase es Acme.Collections.Stack.The fully qualified name of this class is Acme.Collections.Stack. La clase contiene varios miembros: un campo denominado top, dos métodos denominados Push y Pop, y una clase anidada denominada Entry.The class contains several members: a field named top, two methods named Push and Pop, and a nested class named Entry. La clase Entry contiene además tres miembros: un campo denominado next, un campo denominado data y un constructor.The Entry class further contains three members: a field named next, a field named data, and a constructor. Suponiendo que el código fuente del ejemplo se almacene en el archivo acme.cs, la línea de comandosAssuming that the source code of the example is stored in the file acme.cs, the command line

csc /t:library acme.cs

compila el ejemplo como una biblioteca (código sin un punto de entrada Main y genera un ensamblado denominado acme.dll.compiles the example as a library (code without a Main entry point) and produces an assembly named acme.dll.

Importante

Los ejemplos anteriores usan csc como el compilador C# de línea de comandos.The examples above use csc as the command line C# compiler. Este compilador es un ejecutable de Windows.This compiler is a Windows executable. Para usar C# en otras plataformas, debe emplear las herramientas de .NET Core.To use C# across other platforms, you should use the tools for .NET Core. El ecosistema .NET Core usa la CLI de dotnet para administrar las compilaciones de línea de comandos.The .NET Core ecosystem uses the dotnet CLI to manage command line builds. Esto incluye la administración de dependencias y la llamada al compilador de C#.This includes managing dependencies, and invoking the C# compiler. Consulte este tutorial para obtener una descripción completa de estas herramientas en las plataformas compatibles con .NET Core.See this tutorial for a full description of those tools on the platforms supported by .NET Core.

Los ensamblados contienen código ejecutable en forma de instrucciones de lenguaje intermedio (IL) e información simbólica en forma de metadatos.Assemblies contain executable code in the form of Intermediate Language (IL) instructions, and symbolic information in the form of metadata. Antes de ejecutarlo, el código de IL de un ensamblado se convierte automáticamente en código específico del procesador mediante el compilador de Just in Time (JIT) de .NET 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.

Dado que un ensamblado es una unidad autodescriptiva de funcionalidad que contiene código y metadatos, no hay necesidad de directivas #include ni archivos de encabezado de C#.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#. Los tipos y miembros públicos contenidos en un ensamblado determinado estarán disponibles en un programa de C# simplemente haciendo referencia a dicho ensamblado al compilar el programa.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. Por ejemplo, este programa usa la clase Acme.Collections.Stack desde el ensamblado 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());
    }
}

Si el programa está almacenado en el archivo example.cs, cuando se compila example.cs, se puede hacer referencia al ensamblado acme.dl mediante la opción /r del compilador: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

Esto crea un ensamblado ejecutable denominado example.exe, que, cuando se ejecuta, produce el resultado:This creates an executable assembly named example.exe, which, when run, produces the output:

100
10
1

C# permite que el texto de origen de un programa se almacene en varios archivos de origen.C# permits the source text of a program to be stored in several source files. Cuando se compila un programa de C# de varios archivos, todos los archivos de origen se procesan juntos y los archivos de origen pueden hacerse referencia mutuamente de forma libre; desde un punto de vista conceptual, es como si todos los archivos de origen estuvieran concatenados en un archivo de gran tamaño antes de ser procesados.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. En C# nunca se necesitan declaraciones adelantadas porque, excepto en contadas ocasiones, el orden de declaración es insignificante.Forward declarations are never needed in C# because, with very few exceptions, declaration order is insignificant. C# no limita un archivo de origen a declarar solamente un tipo público ni precisa que el nombre del archivo de origen coincida con un tipo declarado en el archivo de origen.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.