Do sostenido

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 7 de junio de 2021; las comprobaciones requieren 59 ediciones .
DE#
clase de idioma

multi- paradigma :
orientado a objetos ,
genérico , procedimental , funcional , basado en eventos ,

reflexivo
Apareció en 2001
Autor Anders Hejlsberg
Desarrollador Fundación .NET
extensión de archivo .cso.csx
Liberar 10.0 ( 8 de noviembre de 2021 )
Versión de prueba 11 ( 22 de febrero de 2022 )
sistema de tipos inferencia de tipos estática , dinámica , estricta , segura
Implementaciones principales .NET Framework , Mono , .NET , DotGNU (congelado) , Plataforma universal de Windows
Dialectos , Spec# , Polyphonic C# , Enhanced C#
sido influenciado C++ , Java [1] [2] [3] , Delphi , Modula-3 y Smalltalk
influenciado , F# , Nemerle , Vala , Windows PowerShell , Kotlin
Licencia

Compilador Roslyn : licencia MIT [4]
.NET Core CLR : licencia MIT [5]

Compilador mono : doble GPLv3 y MIT/X11

DotGNU : doble GPL y LGPL
Sitio web docs.microsoft.com/en-us…
Plataforma Infraestructura de lenguaje común
 Archivos multimedia en Wikimedia Commons

C# (pronunciado c sostenido ) es un lenguaje de programación orientado a objetos de propósito general . Fue desarrollado en 1998-2001 por un grupo de ingenieros de Microsoft liderado por Anders Hejlsberg y Scott Wilthaumot [6] como un lenguaje de desarrollo de aplicaciones para las plataformas Microsoft .NET Framework y .NET Core . Posteriormente fue estandarizado como ECMA -334 e ISO / IEC 23270.

C# pertenece a la familia de lenguajes con sintaxis tipo C , de los cuales su sintaxis es la más cercana a C++ y Java . El lenguaje está tipado estáticamente , admite polimorfismo , sobrecarga de operadores (incluidos operadores de conversión explícitos e implícitos), delegados , atributos, eventos , variables , propiedades , tipos y métodos genéricos , iteradores , funciones anónimas con soporte de cierre , LINQ , excepciones , comentarios en XML formato _

Habiendo adoptado mucho de sus predecesores (lenguajes C++ , Delphi , Modula , Smalltalk y, en particular, Java  ), C#, confiando en la práctica de usarlos, excluye algunos modelos que han demostrado ser problemáticos en el desarrollo de sistemas de software. , por ejemplo, C#, a diferencia de C ++, no admite la herencia múltiple de clases (mientras tanto, se permite la implementación múltiple de interfaces ).

Características del lenguaje

C# fue diseñado como un lenguaje de programación de nivel de aplicación para CLR y, como tal, depende principalmente de las capacidades del propio CLR. Esto se refiere, en primer lugar, al sistema de tipo C#, que refleja el BCL . La presencia o ausencia de ciertas características expresivas del lenguaje depende de si una característica particular del lenguaje se puede traducir a las construcciones CLR correspondientes. Entonces, con el desarrollo del CLR de la versión 1.1 a la 2.0, el propio C# se enriqueció significativamente; se deben esperar interacciones similares en el futuro (sin embargo, este patrón se rompió con el lanzamiento de C # 3.0, que es una extensión del lenguaje que no depende de las extensiones de la plataforma .NET). CLR proporciona a C#, como todos los demás lenguajes orientados a .NET , muchas funciones de las que carecen los lenguajes de programación "clásicos". Por ejemplo, la recolección de basura no se implementa en C# en sí, sino que la realiza CLR para los programas escritos en C#, al igual que se hace para los programas escritos en VB.NET , J# , etc.

Nombre del idioma

El nombre "Sharp" (del inglés sharp - sharp) proviene de la notación musical alfabética , donde la letra latina C corresponde a la nota Do , y el signo sostenido (inglés sharp) significa un aumento en el sonido correspondiente a la nota por un semitono [7] , que es similar al nombre del lenguaje C++ , donde "++" significa incremento variable . El nombre también es un juego en cadena CC++ → C++++(C#), ya que el símbolo "#" puede representarse como formado por 4 signos "+" [8] .

Debido a limitaciones técnicas de visualización (fuentes estándar, navegadores, etc.), así como al hecho de que el signo sostenido ♯ no se representa en un teclado de computadora estándar, el signo de libra (#) se usa cuando se escribe el nombre de un lenguaje de programación. [9] . Esta convención se refleja en la especificación del lenguaje C# ECMA-334 [10] . Sin embargo, en la práctica (por ejemplo, cuando se trata de publicidad y diseño en caja [11] ), Microsoft usa el signo nítido.

No es costumbre traducir los nombres de los lenguajes de programación, por lo que el lenguaje se llama, mediante transcripción, "C Sharp".

Estandarización

C# está estandarizado en ECMA (ECMA-334) [12] e ISO (ISO/IEC 23270) [13] .

Hay al menos tres implementaciones independientes de C# basadas en esta especificación que actualmente se encuentran en varias etapas de desarrollo:

Versiones

Durante el desarrollo del lenguaje C#, se lanzaron varias versiones del mismo:

Versión Especificación de idioma la fecha .RED estudio visual
ECMA ISO/CEI microsoft
C# 1.0 diciembre de 2002 Abril de 2003  (enlace no disponible) enero de 2002 enero de 2002 .NET Framework 1.0 Visual Studio .NET (2002)
C# 1.1
C# 1.2
octubre de 2003 abril de 2003 .NET Framework 1.1 Visual Studio .NET 2003
C#2.0 junio de 2006 septiembre de 2006 septiembre de 2005 [14] noviembre de 2005 Marco .NET 2.0
Marco .NET 3.0
estudio visual 2005
C#3.0 Falta [15] agosto de 2007 noviembre de 2007 .NET Framework 2.0 (excepto LINQ )
.NET Framework 3.0 (excepto LINQ )
.NET Framework 3.5
estudio visual 2008
C# 4.0 abril de 2010 abril de 2010 .NET Framework 4.0 estudio visual 2010
C#5.0 diciembre 2017 diciembre 2018 Junio ​​del 2013 Agosto 2012 .NET Framework 4.5 estudio visual 2012
C# 6.0 Perdido julio de 2015 .NET Framework 4.6
.NET Core 1.0
.NET Core 1.1
estudio visual 2015
C#7.0 marzo 2017 Marco .NET 4.6.2
Marco .NET 4.7
estudio visual 2017 15.0
C#7.1 agosto 2017 .NET Núcleo 2.0 estudio visual 2017 15.3
C#7.2 noviembre 2017 estudio visual 2017 15.5
C#7.3 mayo 2018 .NET Core 2.1
.NET Core 2.2
.NET Framework 4.8
estudio visual 2017 15.7
C# 8.0 septiembre 2019 .NET Core 3.0
.NET Core 3.1
.NET Framework 4.8
estudio visual 2019 16.3
C# 9.0 septiembre 2020 .NET 5.0 estudio visual 2019 16.8
C#10.0 julio 2021 .NET 6.0 Estudio visual 2022 17.0
Información general sobre las versiones
Versión Innovaciones
C#2.0
  • tipos parciales
  • Tipos genéricos ( genéricos )
  • Iteradores y la palabra claveyield
  • Métodos anónimos
  • operador de unión nula
  • Tipos anulables
C#3.0
  • Consultas integradas de lenguaje ( LINQ )
  • Inicializadores de objetos y colecciones
  • Expresiones Lambda
  • árboles de expresión
  • Escritura implícita y la palabra clavevar
  • Tipos anónimos
  • Métodos de extensión
  • Propiedades automáticas
C# 4.0
  • Enlace dinámico y la palabra clavedynamic
  • Argumentos con nombre y opcionales
  • Covarianza y contravarianza generalizadas
  • Biblioteca TPL , concepto de tarea y clases Task,Parallel
  • ClaseMemoryCache
  • Clases de colección paralela
C#5.0
  • Plantilla TAP
  • métodos asincrónicos asyncyawait
  • Información de la llamada
C# 6.0
  • Compilador como servicio
  • Importación de miembros de tipos estáticos en un espacio de nombres
  • Filtros de excepción
  • awaiten bloques catch/finally
  • Inicializadores de propiedad automática
  • Propiedades automáticas de solo lectura
  • operaciones condicionales nulas ( ?.y ?[])
  • Interpolación de cadenas
  • Operadornameof
  • Inicializador de diccionario
  • Funciones reducidas a expresiones
C# 7.0 [16]
  • out-variables
  • La coincidencia de patrones
  • Plantillas conis
  • Patrones y Expresiónswitch
  • tuplas
  • Desempaquetando tuplas (deconstructores)
  • Funciones locales
  • Mejoras literales
  • Variables locales y valores de retorno por referencia
  • Ampliación de la lista de tipos devueltos por métodos asíncronos
  • Más miembros de clase como expresiones
  • throwexpresiones
C# 8.0
  • Miembros de solo lectura
  • Miembros de interfaz predeterminados
  • Mejoras en la coincidencia de patrones
  • usando declaraciones
  • Funciones locales estáticas
  • Estructuras de referencia extraíbles
  • Tipos de referencia anulables
  • Subprocesos asíncronos
  • Índices y rangos
  • Asignación de unión NULL
  • Tipos construidos no administrados
  • Expresiones Stackalloc en expresiones anidadas
  • Más miembros de clase como expresiones
  • Mejoras en cadenas interpoladas
C# 9.0
  • operador de unión nula (??)
  • Parámetros vacíos para expresiones lambda
  • Int nativo: nint, nuint
  • unión disjunta
  • Agregado with-expresiones
  • nuevo modificadorinitonly
C#10.0
  • Adición role="alert"de atributos de mensaje
  • Actualizaciones de componentes Counterpara agregarrole="status"
  • Reemplazando ul en un NavBarcomponente paranav
  • Nuevo nombre del botón de alternarNavBar
  • Pasar a un marcado más semántico

Versión 1.0

El proyecto C# se inició en diciembre de 1998 y recibió el nombre en código COOL (C-style Object Oriented Language). La versión 1.0 se anunció con la plataforma .NET en junio de 2000, el mismo año que la primera versión beta pública ; C# 1.0 finalmente se lanzó con Microsoft Visual Studio .NET en febrero de 2002 .

La primera versión de C# se parecía a Java 1.4 en sus capacidades, ampliándolas un poco: por ejemplo, C# tenía propiedades (que parecían campos de objeto en el código , pero de hecho se llamaban métodos de clase cuando se accedía), indexadores (similares a las propiedades, pero tomando un parámetro como una matriz de índice), eventos , delegados , bucles , estructuras pasadas por valor, conversión automática de tipos incorporados a objetos si es necesario ( boxeo ), atributos, medios incorporados de interacción con código no administrado ( DLL , COM ) y más. foreach

Además, se decidió portar algunas características de C++ a C# que estaban ausentes en Java: tipos sin firmar, sobrecarga de operadores (con algunas restricciones, a diferencia de C++ ), paso de parámetros a un método por referencia , métodos con un número variable de parámetros, operador goto(con restricciones) . Además, en C#, dejaron una capacidad limitada para trabajar con punteros  , en lugares de código especialmente indicados por la palabra unsafey al especificar una opción especial para el compilador .

Versión 2.0

Microsoft publicó por primera vez el borrador de la especificación C# 2.0 en octubre de 2003 ; en 2004 hubo versiones beta (proyecto con nombre en código Whidbey), C# 2.0 finalmente se lanzó el 7 de noviembre de 2005 junto con Visual Studio 2005 y .NET 2.0.

Nuevas características en la versión 2.0

Versión 3.0

En junio de 2004, Anders Hejlsberg habló por primera vez en el sitio web de Microsoft sobre las extensiones de lenguaje planeadas en C#3.0 [18] . Septiembre de 2005 vio el lanzamiento del borrador de la especificación C# 3.0 y la versión beta de C# 3.0, que se instala como complemento de Visual Studio 2005 y .NET 2.0 existentes. Esta versión del lenguaje finalmente se incluyó en Visual Studio 2008 y .NET 3.5.

Nuevas características en la versión 3.0

C# 3.0 introdujo las siguientes adiciones radicales al lenguaje:

Cliente c = nuevo Cliente (); do . Nombre = "James" ; do . Edad = 30 ; Se puede escribir como Cliente c = nuevo Cliente { Nombre = "James" , Edad = 30 }; listaDeFoo . Where ( delegar ( Foo x ) { return x . size > 10 ; }); ahora se puede escribir como listaDeFoo . Donde ( x => x . tamaño > 10 );
  • Árboles de expresión:
Las expresiones lambda ahora se pueden representar como una estructura de datos que se puede recorrer en tiempo de ejecución, lo que permite que las expresiones C# fuertemente tipadas se traduzcan a otros dominios (como las expresiones SQL).
  • Tipificación implícita: inferir los tipos de una variable local. Para la tipificación implícita , se utiliza la palabra clave en lugar del nombre del tipo de datosvar . Luego, durante la compilación, el propio compilador infiere el tipo de datos en función del valor asignado: var x = "hello";en lugar destring x = "hello";
  • Tipos anónimos:var x = new { Name = "James" };
  • Métodos de extensión. Ahora puede agregar nuevos métodos a las clases existentes. Implementado usando una palabra clave thisen el primer parámetro de una función estática de una clase estática.
public static class StringExtensions { public static int ToInt32 ( este valor de cadena ) { return Int32 . analizar ( val ); } } // ... cadena s = "10" ; int x = s . ToInt32 ();
  • Propiedades automáticas: el compilador generará un campo privado ( private ) y el accesor y mutador correspondiente para el código del formulario
cadena pública Nombre { obtener ; conjunto privado ; }

C# 3.0 es compatible con C# 2.0 en código generado por MSIL ; las mejoras en el lenguaje son puramente sintácticas y se implementan en la etapa de compilación. Por ejemplo, muchas de las consultas LINQ integradas se pueden realizar mediante delegados anónimos combinados con métodos predicados en contenedores como List.FindAlly List.RemoveAll.

Versión 4.0

A fines de 2008 se lanzó una versión preliminar de C# 4.0, junto con una versión CTP de Visual Studio 2010.

Visual Basic 10.0 y C# 4.0 se lanzaron en abril de 2010, junto con el lanzamiento de Visual Studio 2010.

Nuevas funciones en la versión 4.0 [19]
  • Posibilidad de usar enlace tardío, para usar:
    • con lenguajes tipeados dinámicamente ( Python , Ruby )
    • con objetos COM
    • reflexión
    • objetos de estructura mutable (DOM). Aparece la palabra clave dynamic.
  • Parámetros con nombre y opcionales
  • Novedades en la interoperabilidad COM
  • Covarianza y contravarianza de interfaces genéricas y delegados
  • Código de Contratos
  • Biblioteca paralela de tareas TPL , Concepto y clases de tareas , ,TaskTaskFactoryParallel
  • Se agregó una clase MemoryCacheque está diseñada para el almacenamiento en caché de contenido. Es similar a una Cacheclase ASP.NET pero se puede usar al escribir aplicaciones web/gráficas/de consola .
  • Se agregó el espacio de nombres System.Collections.Concurrent y nuevas clases de colección simultáneas ( ConcurrentQueue , ConcurrentStack , ConcurrentBag ,…) que brindan no solo más eficiencia sino también una seguridad de subprocesos más completa.

Ejemplos:

cálculo dinámico = GetCalculator (); intsum = calc ._ _ Sumar ( 10 , 20 ); // Llamada dinámica public void SomeMethod ( int x , int y = 5 , int z = 7 ); // Parámetros opcionales

Versión 5.0

Nuevas características en la versión 5.0

  • TAP (Patrón asíncrono basado en tareas). TAP utiliza un método para representar la inicialización y finalización de una operación asíncrona.
  • Métodos asíncronos ( asyncy await) - como una implementación del patrón TAP.
  • Información de la llamada

Versión 6.0

Nuevas características en la versión 6.0

  • sentencias condicionales nulas . Se agregaron nuevos operadores: ?.y ?[]:
¿En t? longitud = clientes ?. Longitud ; // nulo si clientes es nulo Cliente primero = clientes ?[ 0 ]; // nulo si clientes es nulo
  • Funciones comprimidas en expresiones ( funciones con cuerpo de expresión ). Ahora la definición del método se puede dar usando la sintaxis lambda:
mover punto público ( int dx , int dy ) => nuevo punto ( x + dx , y + dy );
  • Inicializadores de propiedades automáticas. Las propiedades automáticas ahora se pueden inicializar en la declaración:
cadena pública Primero { obtener ; conjunto ; } = "Jane" ;
  • Propiedades automáticas de solo lectura. Las propiedades automáticas ahora se pueden declarar sin setters:
cadena pública Primero { obtener ; } = "Jane" ;
  • Inicializadores de índice. Ahora puede inicializar no solo objetos y colecciones, sino también diccionarios:
var numeros = new Dictionary < int , string > { [7] = "siete" , [9] = "nueve" , [13] = "trece" };
  • Interpolación de cadenas . En lugar de usar construcciones con String.Format(), por ejemplo:
var s = cadena . Formato ( "{0} tiene {1} años{{s}}" , p . Nombre , p . Edad );

ahora puede colocar el código directamente en la línea:

var s = $"{p.Name} tiene {p.Edad} año{{s}}" ;
  • Filtros de excepción. Ahora puede establecer condiciones para bloques catch:
intente { ... } atrapar ( Excepción e ) cuando ( Registrar ( e )) { ... }
  • Importación de funciones de tipo estático. Ahora es posible acceder a miembros estáticos de tipos sin especificar el nombre completo de estos miembros:
utilizando el sistema estático . consola ; utilizando el sistema estático . matemáticas ; programa de clase { static void Main () { WriteLine ( Sqrt ( 3 * 3 + 4 * 4 )); } }
  • operador nameof_ Un nuevo operador que devuelve una representación de cadena compacta para el tipo pasado como argumento:
WriteLine ( nombre de ( persona . Dirección . Código postal )); // imprime "Código Postal"
  • Para la programación asincrónica, se ha agregado la capacidad de usar operadores awaitdentro de bloques catchy finally:
recurso res = nulo ; intente { res = esperar Recurso . OpenAsync ( ... ); // Podrías hacer esto. } catch ( ResourceException e ) { aguardar recurso . LogAsync ( res , e ); // Ahora puedes hacer esto... } finalmente { if ( res != null ) await res . CloseAsync (); // … y esto. }

Versión 7.0

Nuevas funciones en la versión 7.0 [16]

  • out-variables que le permiten declarar variables inmediatamente en una llamada de método (además, el alcance de tales variables es el bloque exterior):
pág . GetCoordinates ( out int x , out int y );
  • La coincidencia de patrones. Se introduce el concepto de plantilla ( pattern), que es una construcción sintáctica que permite comprobar la conformidad de una variable con una determinada forma y extraer información de ella.
  • Las plantillas con is( isahora se pueden usar no solo con un tipo, sino también con una plantilla, como argumento correcto)
  • Patrones y Expresión switch. Los casos de uso se switchhan ampliado, ahora puede:
    • use cualquier tipo (no solo los primitivos);
    • usar patrones en expresiones case;
    • agregue condiciones adicionales a las expresiones case(usando la palabra clave when).
  • tuplas. Tipo de tupla de valor añadido (struct ValueTuple) y sintaxis para trabajar con datos de este tipo:
( cadena , cadena , cadena ) LookupName ( id largo ) // el tipo de retorno es una tupla { ... // inicializa el retorno de datos ( primero , medio , último ); // tupla literal }
  • Desempaquetando tuplas . Se ha agregado una nueva construcción de sintaxis , deconstructor , para recuperar una tupla de miembros de clase.
  • funciones locales. Ahora, una función que se usa solo en el cuerpo de un método se puede declarar directamente en el cuerpo de este método.
  • Mejoras literales. Se han agregado literales binarios y el carácter delimitador ( _) en literales numéricos .
  • Variables locales y valores de retorno por referencia. La funcionalidad de la palabra clave se ha ampliado ref. Ahora puede devolver datos del método o almacenarlos en una variable local por referencia.
  • Ampliación de la lista de tipos devueltos por métodos asíncronos
  • Más miembros de clase como expresiones. La sintaxis de función condensada en expresiones ( expression-bodied functions) ahora se aplica a setters, getters, constructores y destructores.
  • throw-expresiones. Ahora se puede usar throwen funciones condensadas en expresiones ( expression-bodied functions):
public string GetLastName () => lanzar una nueva NotImplementedException ();


Versión 8.0

Nuevas funciones en la versión 8.0 [20]

  • modificador readonly_ Fue creado para indicar un miembro que no cambiará de estado.
  • Métodos de interfaz por defecto. Ahora, cuando crea un método de interfaz, puede declarar su implementación predeterminada, que puede anularse en la clase que implementa esta interfaz.
  • La coincidencia de patrones. La función le permite trabajar con plantillas según el formato en tipos de datos relacionados pero diferentes.
    • patrones recursivos. Es una expresión de plantilla que se aplica a los resultados de otra expresión de plantilla.
    • Las declaraciones de cambio le permiten reducir la cantidad de casos y pausas, así como las llaves.public enum Rainbow { Rojo , naranja , amarillo , verde , azul , índigo , violeta } RGBColor público estático FromRainbow ( Rainbow colorBand ) => colorBand switch { Rainbow . Rojo => nuevo RGBColor ( 0 xFF , 0 x00 , 0 x00 ), arcoíris . Naranja => nuevo RGBColor ( 0 xFF , 0 x7F , 0 x00 ), arcoíris . Amarillo => nuevo RGBColor ( 0 xFF , 0 xFF , 0 x00 ), arcoíris . Verde => nuevo RGBColor ( 0 x00 , 0 xFF , 0 x00 ), arcoíris . Azul => nuevo RGBColor ( 0 x00 , 0 x00 , 0 xFF ), arcoíris . Indigo => nuevo RGBColor ( 0 x4B , 0 x00 , 0 x82 ), Rainbow . Violeta => nuevo RGBColor ( 0 x94 , 0 x00 , 0 xD3 ), _ => arrojar nueva ArgumentException ( mensaje : "valor de enumeración no válido" , paramName : nombre de ( colorBand )), };
    • Plantillas de propiedades. Le permite comparar las propiedades del objeto bajo estudio usando { variable : value } => ....
    • Plantillas de tuplas. Se utiliza cuando necesita trabajar con múltiples entradas.(value1, value2,..) => ...
  • anuncio using_ Esta es una declaración de variable precedida por la palabra clave using. Le dice al compilador que la variable que se declara debe eliminarse al final del alcance .
  • Método local estático. Ahora puede asegurarse de que el método no abarque ninguna variable del ámbito añadiéndole el modificador static.
  • Estructuras de referencia a eliminar. Las estructuras de referencia no pueden implementar IDisposable(así como cualquier otra interfaz). Por lo tanto, para eliminar ref struct, necesita un archivo disponible void Dispose().
  • Tipos de valor que aceptan un valor null. Ahora, para indicar que una variable de tipo de valor acepta un valor null, debe prefijar el nombre del tipo con?
  • subprocesos asíncronos. En primer lugar, es una interfaz IAsyncEnumerable<T>. Y en segundo lugar, la construcción foreachcon await. Sistema asíncrono estático público . colecciones _ genérico _ IAsyncEnumerable < int > GenerateSequence () { for ( int i = 0 ; i < 20 ; i ++) { await Task . retraso ( 100 ); rendimiento retorno i ; } } // o esperar a foreach ( número de var en GenerateSequence ()) { Console . WriteLine ( número ); }
  • Tipos de lanzamiento asíncrono. A partir de C# 8.0, el lenguaje admite tipos liberados asincrónicos que implementan System.IAsyncDisposable. El operando de una expresión usingpuede implementar IDisposableo IAsyncDisposable. En caso de que el compilador IAsyncDisposablegenere código para awaitel devuelto .TaskIAsyncDisposable.DisposeAsync
  • Índices y rangos. Los rangos y los índices proporcionan una sintaxis concisa para acceder a elementos o rangos individuales en una secuencia. La innovación incluye a los operadores ^y .., así como System.IndexySystem.Range
  • operador de asignación de unión nula. El operador ??=se puede usar para asignar el valor del operando derecho al operando izquierdo solo si el operando izquierdo se evalúa como null.Lista < int > numeros = null ; ¿En t? yo = nulo ; numeros ??= nueva Lista < int >(); numeros _ Añadir ( i ?? = 17 ); numeros _ Suma ( i ??= 20 ); consola _ WriteLine ( cadena . Unirse ( " " , números )); // salida: 17 17 Consola . WriteLine ( i ); // salida: 17
  • Tipos construidos no administrados. A partir de C# 8.0, un tipo de valor construido no se administra si contiene campos de tipos exclusivamente no administrados (por ejemplo, el tipo genérico <T>).
  • La expresión stackalloc en expresiones anidadas. Ahora, si el resultado de la expresión stackalloc es de tipo System.Span<T>o System.ReadOnlySpan<T>, entonces se puede usar en otras expresiones.Span < int > números = stackalloc [] { 1 , 2 , 3 , 4 , 5 , 6 }; var ind = números . IndexOfAny ( stackalloc [] { 2 , 4 , 6 , 8 }); consola _ WriteLine ( ind ); // salida: 1
  • El orden de los marcadores $y @en las cadenas textuales interpoladas ahora puede ser cualquiera.


Ejemplo "¡Hola mundo!"

A continuación se muestra el código del clásico programa " Hola mundo " en C# para una aplicación de consola:

consola _ WriteLine ( "¡Hola mundo!" ); // Envía el texto dado a la consola consola _ Clave de lectura (); // Espera a que el usuario presione una tecla

y el código del mismo programa para una aplicación de Windows Forms:

espacio de nombres WindowsForms ; Programa de clase pública { [Subproceso STA] public static void Main () => new DemoForm (). Mostrar Diálogo (); } clase pública DemoForm : Formulario { Etiqueta etiqueta = nueva etiqueta (); Formulario de demostración público () { etiqueta _ Texto = "¡Hola mundo!" ; esto _ controles _ Añadir ( etiqueta ); esto _ PosiciónInicio = PosiciónInicioForma . pantalla central ; esto _ BackColor = Color . blanco _ esto _ FormBorderStyle = FormBorderStyle . Fijo3D ; } }

Implementaciones

Hay varias implementaciones de C#:

Notas

  1. "Porque el lenguaje C# heredó su sintaxis de C++ y Java..." Trey Nash. C# 2010: un curso acelerado para profesionales = C# Acelerado 2010. - M. : Williams, 2010. - P.  17 . — 592 pág. — ISBN 978-5-8459-1638-9 .
  2. "El lenguaje C# <...> ha heredado muchas características útiles de otros lenguajes de programación y está directamente relacionado con los dos lenguajes informáticos más utilizados en el mundo: C y C ++, así como con el lenguaje Java” , pero además: “La conexión entre C# y Java es más compleja. Ambos lenguajes están diseñados para crear código portable, basado en C y C++, usando su sintaxis y modelo de objetos. Sin embargo, no existe una conexión directa entre estos idiomas, son más como primos, tienen ancestros comunes, pero difieren en muchos aspectos” Herbert Schildt . Tutorial de C# = C#. Una guía para principiantes. - M .: Piter , 2003. - S. 20. - ISBN 966-552-121-7 .
  3. Herbert Schildt . La referencia completa para C# = C#: La referencia completa. - M. : Editorial "Williams", 2004. - S.  26 -27. — 752 pág. — ISBN 5-8459-0563-X .
  4. Licencia (Roslyn) en el repositorio de Github . Consultado el 4 de enero de 2022. Archivado desde el original el 4 de enero de 2022.
  5. Licencia (.NET CLR) en el repositorio de Github . Consultado el 4 de enero de 2022. Archivado desde el original el 4 de enero de 2022.
  6. Liberty D. El lenguaje de programación C# // Programación C# . - San Petersburgo. - 2003: Symbol-Plus, 2003. - S.  26 . — 688 pág. — ISBN 5-93286-038-3 .
  7. Kovacs, James C#/.NET History Lesson  ( 7 de septiembre de 2007). Consultado el 23 de marzo de 2011. Archivado desde el original el 21 de agosto de 2011.
  8. La AZ de los lenguajes de programación: C#  (inglés)  (enlace no disponible) . computerworld.com.au (1 de octubre de 2008). Consultado el 2 de septiembre de 2014. Archivado desde el original el 2 de abril de 2015.
  9. Preguntas frecuentes sobre Microsoft C# (enlace descendente) . microsoft _ Consultado el 25 de marzo de 2008. Archivado desde el original el 30 de abril de 2003. 
  10. Especificación del lenguaje C#  (indefinido) . — 4to. - Ecma International , 2006. Copia archivada (enlace no disponible) . Fecha de acceso: 26 de enero de 2011. Archivado desde el original el 2 de diciembre de 2012. 
  11. Estándar de Visual C# .net (JPEG). Microsoft (4 de septiembre de 2003). Consultado el 18 de junio de 2009. Archivado desde el original el 21 de agosto de 2011.
  12. Especificación del lenguaje C# ECMA-334 estándar, 4.ª  edición . Ecma Internacional (junio de 2006). Consultado el 16 de mayo de 2017. Archivado desde el original el 31 de octubre de 2010.
  13. ISO/IEC 23270:2003 Tecnología de la información:  especificación del lenguaje C# . Organización Internacional de Normalización (abril de 2003). Consultado el 16 de mayo de 2017. Archivado desde el original el 5 de agosto de 2017.
  14. La especificación para Microsoft C# 2.0 contiene una descripción de solo las nuevas funciones de la versión 2.0. Los detalles de la versión se describen en la especificación 1.2 anterior.
  15. Las versiones 3.0, 4.0 y 5.0 del lenguaje C# aún no tienen especificaciones aprobadas por ECMA o ISO/IEC.
  16. 12Mads Torgersen . Nuevas funciones en C# 7.0 . Blog de .NET . Microsoft (9 de marzo de 2017). Consultado el 7 de mayo de 2017. Archivado desde el original el 11 de abril de 2017.  
  17. Diferencias entre las plantillas de C++ y los genéricos de C# (Guía de programación de C#  ) . Microsoft (17 de diciembre de 2016). Consultado el 16 de mayo de 2017. Archivado desde el original el 7 de agosto de 2021.
  18. Anders Hejlsberg - Datos de programación en C#  3.0 . El equipo de Canal 9 . Microsoft (16 de junio de 2004). Consultado el 16 de mayo de 2017. Archivado desde el original el 12 de noviembre de 2018.
  19. Visual Studio 2010: Ejemplos para C# 4.0 . Microsoft (17 de julio de 2012). Consultado el 16 de mayo de 2017. Archivado desde el original el 28 de febrero de 2017.
  20. Nuevas características en C# 8.0 . docs.microsoft.com. Consultado el 11 de junio de 2020. Archivado desde el original el 8 de agosto de 2020.
  21. Red de puntos en cualquier lugar . Consultado el 5 de marzo de 2009. Archivado desde el original el 4 de mayo de 2009.

Literatura

  • Juan Skeet. C# para profesionales: sutilezas de programación, 3.ª edición, nueva traducción = C# en profundidad, 3.ª ed.. - M. : "Williams" , 2014. - 608 p. - ISBN 978-5-8459-1909-0 .
  • Christian Nagel y otros C# 5.0 y .NET 4.5 para profesionales = Professional C# 5.0 y .NET 4.5. - M. : "Dialéctica" , 2013. - 1440 p. - ISBN 978-5-8459-1850-5 .
  • A. Hejlsberg, M. Torgersen, S. Wiltamuth, P. Gold. Lenguaje de programación C#. Informática clásica. 4.ª edición = lenguaje de programación C# (que cubre C# 4.0), 4.ª edición. - San Petersburgo. : "Pedro" , 2012. - 784 p. - ISBN 978-5-459-00283-6 . Archivado el 10 de octubre de 2011 en Wayback Machine .
  • E. Stillman, J. Green. Aprendiendo C#. 2da edición = Head First C#, 2ed. - San Petersburgo. : "Piter" , 2012. - 704 p. - ISBN 978-5-4461-0105-4 .  (enlace no disponible)
  • Andrés Troelsen. C# 5.0 y .NET 4.5 Framework, 6.ª edición = Pro C# 5.0 y .NET 4.5 Framework, 6.ª edición. - M. : "Williams" , 2013. - 1312 p. — ISBN 978-5-8459-1814-7 .
  • José Albahari, Ben Albahari. C# 6.0. Directorio. Descripción completa del lenguaje = C# 6.0 en pocas palabras: la referencia definitiva. - M. : "Williams" , 2018. - 1040 p. - ISBN 978-5-8459-2087-4 . — ISBN 978-1-491-92706-9 .
  • Herbert Schildt. C# 4.0: La referencia completa = C# 4.0 La referencia completa. - M .: "Williams" , 2010. - S. 1056. - ISBN 978-5-8459-1684-6 .
  • Christian Nagel, Carly Watson y otros Visual C # 2010: curso completo = Microsoft Visual C # principiante 2010. - M. : Dialéctica , 2010. - ISBN 978-5-8459-1699-0 .

Enlaces