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 |
Cω , Spec# , Polyphonic C# , Enhanced C# |
sido influenciado |
C++ , Java [1] [2] [3] , Delphi , Modula-3 y Smalltalk |
influenciado |
Cω , 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 C → C++ → 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:
Información general sobre las versiones
Versión |
Innovaciones
|
C#2.0
|
- 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
- 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
- Tipos parciales (separando una implementación de clase en más de un archivo ).
- Tipos genéricos o parametrizados ( genéricos ). A diferencia de las plantillas de C++ , admiten algunas características adicionales y funcionan a nivel de máquina virtual . Sin embargo, los parámetros de tipo genérico no pueden ser expresiones, no pueden especializarse total o parcialmente, no admiten parámetros de plantilla de forma predeterminada, no se pueden heredar de un parámetro de plantilla, etc. [17]
- Una nueva forma de iterador que te permite crear rutinas con una palabra clave yield, similar a Python y Ruby .
- Métodos anónimos que proporcionan funcionalidad de cierre .
- El operador de unión nula : '??': return obj1 ?? obj2;significa (en notación C# 1.0) return obj1!=null ? obj1 : obj2;.
- Los tipos que aceptan valores NULL son valores ( indicados por un signo de interrogación, como int? i = null;) que son los mismos tipos de valor que también pueden asumir el valor null. Tales tipos permiten una mejor interacción con las bases de datos a través del lenguaje SQL .
- Capacidad para crear procedimientos almacenados , disparadores e incluso tipos de datos en lenguajes .Net (incluido C#).
- Compatibilidad con cálculos de 64 bits que, entre otras cosas, le permite aumentar el espacio de direcciones y utilizar tipos de datos primitivos de 64 bits .
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:
- palabras clave select, from, whereque permiten realizar consultas a partir de documentos XML , colecciones, etc. Estas consultas son similares a las consultas SQL y están implementadas por el componente LINQ . (La frase "consulta integrada en el idioma" se traduce en sí misma como "consulta integrada en el idioma").
- Inicialización de un objeto junto con sus propiedades:
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 );
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
- ↑ "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 .
- ↑ "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 .
- ↑ 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 .
- ↑ Licencia (Roslyn) en el repositorio de Github . Consultado el 4 de enero de 2022. Archivado desde el original el 4 de enero de 2022. (indefinido)
- ↑ 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. (indefinido)
- ↑ 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 .
- ↑ 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.
- ↑ 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.
- ↑ 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. (indefinido)
- ↑ 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. (indefinido)
- ↑ 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. (indefinido)
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ Las versiones 3.0, 4.0 y 5.0 del lenguaje C# aún no tienen especificaciones aprobadas por ECMA o ISO/IEC.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ 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. (indefinido)
- ↑ 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. (Ruso)
- ↑ Red de puntos en cualquier lugar . Consultado el 5 de marzo de 2009. Archivado desde el original el 4 de mayo de 2009. (indefinido)
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
En catálogos bibliográficos |
|
---|
C# |
---|
Versiones |
|
---|
EN |
|
---|
Relacionado |
|
---|
Normas ISO |
---|
- Categorías: Categoría:Normas ISO
- Categoría:Protocolos OSI
|
1 a 9999 |
|
---|
10000 a 19999 |
|
---|
20000+ |
|
---|
Ver también: Lista de artículos cuyos títulos comienzan con "ISO" |
lenguaje de programación c |
---|
|
compiladores |
|
---|
bibliotecas |
|
---|
Peculiaridades |
|
---|
algunos descendientes |
|
---|
C y otros lenguajes |
|
---|
Categoría:Lenguaje de programación C |
Investigación de Microsoft (MSR) |
---|
Principales proyectos | |
---|
Laboratorios MSR | laboratorios | Actual |
- Pivote
- Dragón marino
- acercamiento profundo
- DeepZoomPix
|
---|
interrumpido |
- pez profundo
- listas
- Portapapeles en vivo
- fotosíntesis
- voltaje
|
---|
|
---|
laboratorios |
|
---|
Otras divisiones |
|
---|
|
---|
Categoría |
Software de Microsoft gratuito y de código abierto |
---|
información general |
|
---|
Software _ | Aplicaciones |
|
---|
Juegos |
|
---|
Lenguajes de programación |
|
---|
Frameworks y herramientas de desarrollo |
|
---|
Sistemas operativos |
|
---|
Otro |
- CronoZoom
- proyecto mu
- SEDA
- TLAPS
- Implementación de referencia de TPM 2.0
- WikiBhasha
|
---|
|
---|
Licencias |
|
---|
Temas relacionados |
- Fundación .NET
- Fundación de software F-Sharp
- Promesa de especificación abierta de Microsoft
- Fundación Curva Exterior
|
---|
Categoría |