Un paseo por el lenguaje C#A Tour of the C# Language

C# (pronunciado "si sharp" en inglés) es un lenguaje de programación sencillo, moderno, orientado a objetos y con seguridad de tipos.C# (pronounced "See Sharp") is a simple, modern, object-oriented, and type-safe programming language. C# tiene sus raíces en la familia de lenguajes C, y a los programadores de C, C++, Java y JavaScript les resultará familiar inmediatamente.C# has its roots in the C family of languages and will be immediately familiar to C, C++, Java, and JavaScript programmers.

C# es un lenguaje orientado a objetos, pero también incluye compatibilidad para programación orientada a componentes.C# is an object-oriented language, but C# further includes support for component-oriented programming. El diseño de software contemporáneo se basa cada vez más en componentes de software en forma de paquetes independientes y autodescriptivos de funcionalidad.Contemporary software design increasingly relies on software components in the form of self-contained and self-describing packages of functionality. La clave de estos componentes es que presentan un modelo de programación con propiedades, métodos y eventos; tienen atributos que proporcionan información declarativa sobre el componente; e incorporan su propia documentación.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# proporciona construcciones de lenguaje para admitir directamente estos conceptos, por lo que se trata de un lenguaje muy natural en el que crear y usar componentes de software.C# provides language constructs to support directly these concepts, making C# a very natural language in which to create and use software components.

Varias características de C# ayudan en la construcción de aplicaciones sólidas y duraderas: la recolección de elementos no utilizados automáticamente reclama la memoria ocupada por objetos no utilizados y no accesibles; el control de excepciones proporciona un enfoque estructurado y extensible para la detección de errores y la recuperación; y el diseño del lenguaje con seguridad de tipos hace imposible leer desde las variables sin inicializar, indizar matrices más allá de sus límites o realizar conversiones de tipos no comprobados.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# tiene un sistema de tipo unificado.C# has a unified type system. Todos los tipos de C#, incluidos los tipos primitivos como int y double, se heredan de un único tipo object raíz.All C# types, including primitive types such as int and double, inherit from a single root object type. Por lo tanto, todos los tipos comparten un conjunto de operaciones comunes, y los valores de todos los tipos se pueden almacenar, transportar y utilizar de manera coherente.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. Además, C# admite tipos de valor y tipos de referencia definidos por el usuario, lo que permite la asignación dinámica de objetos, así como almacenamiento en línea de estructuras ligeras.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.

Para asegurarse de que las programas y las bibliotecas de C# pueden evolucionar a lo largo del tiempo de manera compatible, se ha puesto mucho énfasis en el versionamiento del diseño de 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. Muchos lenguajes de programación prestan poca atención a este problema y, como resultado, los programas escritos en dichos lenguajes se interrumpen con más frecuencia de lo necesario cuando se introducen nuevas versiones de las bibliotecas dependientes.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. Los aspectos del diseño de C# afectados directamente por las consideraciones de versionamiento incluyen los modificadores virtual y override independientes, las reglas para la resolución de sobrecargas de métodos y la compatibilidad para declaraciones explícitas de miembros de interfaz.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.

Hola a todosHello world

El programa "Hola mundo" tradicionalmente se usa para presentar un lenguaje de programación.The "Hello, World" program is traditionally used to introduce a programming language. En este caso, se usa C#:Here it is in C#:

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

Normalmente, los archivos de código fuente de C# tienen la extensión de archivo .cs.C# source files typically have the file extension .cs. Suponiendo que el programa "Hola mundo" se almacena en el archivo hello.cs, el programa podría compilarse con la línea de comandos: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

que genera un ensamblado ejecutable denominado hello.exe.which produces an executable assembly named hello.exe. La salida que genera la aplicación cuando se ejecuta es:The output produced by this application when it is run is:

Hello, World

Importante

El comando csc compila el marco de trabajo completo y puede no estar disponible en todas las plataformas.The csc command compiles for the full framework, and may not be available on all platforms.

El programa "Hola mundo" empieza con una directiva using que hace referencia al espacio de nombres System.The "Hello, World" program starts with a using directive that references the System namespace. Los espacios de nombres proporcionan un método jerárquico para organizar las bibliotecas y los programas de C#.Namespaces provide a hierarchical means of organizing C# programs and libraries. Los espacios de nombres contienen tipos y otros espacios de nombres; por ejemplo, el espacio de nombres System contiene varios tipos, como la clase Console a la que se hace referencia en el programa, y otros espacios de nombres, como IO y 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. Una directiva using que hace referencia a un espacio de nombres determinado permite el uso no calificado de los tipos que son miembros de ese espacio de nombres.A using directive that references a given namespace enables unqualified use of the types that are members of that namespace. Debido a la directiva using, puede utilizar el programa Console.WriteLine como abreviatura de System.Console.WriteLine.Because of the using directive, the program can use Console.WriteLine as shorthand for System.Console.WriteLine.

La clase Hello declarada por el programa "Hola mundo" tiene un miembro único, el método llamado Main.The Hello class declared by the "Hello, World" program has a single member, the method named Main. El método Main se declara con el modificador static.The Main method is declared with the static modifier. Mientras que los métodos de instancia pueden hacer referencia a una instancia de objeto envolvente determinada utilizando la palabra clave this, los métodos estáticos funcionan sin referencia a un objeto determinado.While instance methods can reference a particular enclosing object instance using the keyword this, static methods operate without reference to a particular object. Por convención, un método estático denominado Main sirve como punto de entrada de un programa.By convention, a static method named Main serves as the entry point of a program.

La salida del programa la genera el método WriteLine de la clase Console en el espacio de nombres System.The output of the program is produced by the WriteLine method of the Console class in the System namespace. Esta clase la proporcionan las bibliotecas de clase estándar, a las que, de forma predeterminada, el compilador hace referencia automáticamente.This class is provided by the standard class libraries, which, by default, are automatically referenced by the compiler.

Hay mucha más información sobre C#.There's a lot more to learn about C#. Los temas siguientes proporcionan introducciones a los elementos del lenguaje C#.The following topics provide an overview of the elements of the C# language. Estas introducciones proporcionarán información básica sobre todos los elementos del lenguaje y ofrecerán los detalles necesarios para profundizar más en los elementos del lenguaje 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:

  • Estructura del programaProgram Structure
    • Conozca los principales conceptos organizativos del lenguaje C#: programas, espacios de nombres, tipos, miembros y ensamblados.Learn the key organizational concepts in the C# language: programs, namespaces, types, members, and assemblies.
  • Tipos y variablesTypes and Variables
    • Obtenga información sobre los tipos de valor, los tipos de referencia y las variables del lenguaje C#.Learn about value types, reference types, and variables in the C# language.
  • ExpresionesExpressions
    • Las expresiones se construyen con operandos y operadores.Expressions are constructed from operands and operators. Las expresiones producen un valor.Expressions produce a value.
  • InstruccionesStatements
    • Use instrucciones para expresar las acciones de un programa.You use statements to express the actions of a program.
  • Clases y objetosClasses and objects
    • Las clases son los tipos más fundamentales de C#.Classes are the most fundamental of C#'s types. Los objetos son instancias de una clase.Objects are instances of a class. Las clases se generan mediante miembros, que también se tratan en este tema.Classes are built using members, which are also covered in this topic.
  • StructsStructs
    • Las estructuras son estructuras de datos que, a diferencia de las clases, son tipos de valor.Structs are data structures that, unlike classes, are value types.
  • MatricesArrays
    • Una matriz es una estructura de datos que contiene un número de variables a las que se accede mediante índices calculados.An array is a data structure that contains a number of variables that are accessed through computed indices.
  • InterfacesInterfaces
    • Una interfaz define un contrato que se puede implementar mediante clases y structs.An interface defines a contract that can be implemented by classes and structs. Una interfaz puede contener métodos, propiedades, eventos e indexadores.An interface can contain methods, properties, events, and indexers. Una interfaz no proporciona implementaciones de los miembros que define, simplemente especifica los miembros que se deben proporcionar mediante clases o structs que implementan la interfaz.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.
  • EnumeracionesEnums
    • Un tipo de enumeración es un tipo de valor distinto con un conjunto de constantes con nombre.An enum type is a distinct value type with a set of named constants.
  • DelegadosDelegates
    • Un tipo de delegado representa las referencias a métodos con una lista de parámetros determinada y un tipo de valor devuelto.A delegate type represents references to methods with a particular parameter list and return type. Los delegados permiten tratar métodos como entidades que se puedan asignar a variables y se puedan pasar como parámetros.Delegates make it possible to treat methods as entities that can be assigned to variables and passed as parameters. Los delegados son similares al concepto de punteros de función en otros lenguajes, pero a diferencia de los punteros de función, los delegados están orientados a objetos y presentan seguridad de tipos.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.
  • AtributosAttributes
    • Los atributos permiten a los programas especificar información declarativa adicional sobre los tipos, miembros y otras entidades.Attributes enable programs to specify additional declarative information about types, members, and other entities.