do sostingut

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
Nota de desambiguació.svg
El títol d’aquesta pàgina és incorrecte a causa de les característiques del programari MediaWiki . El títol correcte és C #.
Nota de desambiguació.svg Desambiguació - Si està buscant per a la nota Do sostingut, vegeu C (nota) .
C #
llenguatge de programació
wordmark.svg C de Sharp
Autor Anders Hejlsberg
Data d’origen 2000
Última versió 9.0
Ús Genèric
Paradigmes Multi-paradigma: estructurat , imperatiu , orientat a objectes , funcional , esdeveniment impulsada
Escrivint Estàtica , dinàmica , forta , segur
Extensions comunes Cs, .csproj
Influenciat per Delphi , C ++ , Java , Eiffel , Haskell , ML
va influir D , F # , Java , mecanografiat
Implementació de referència
Lloc web docs.microsoft.com/en-us/dotnet/csharp/ i docs.microsoft.com/de-de/dotnet/csharp/

C # (Anglès Pronunciació: [Si ʃɑːp] , a l'igual que l'expressió veure agut, "veure dràsticament") [1] és un multi-paradigma de llenguatge de programació que suporta tots els conceptes de la programació orientada a objectes. Va ser desenvolupat per Microsoft com part de l' .NET iniciativa, i posteriorment aprovat com un estàndard per la ECMA (ECMA-334) i la ISO ( ISO / IEC 23270 ).

La sintaxi i l'estructura de C # estan inspirats en diversos idiomes nascuts amb anterioritat, en particular, Delphi , C ++ , Java i Visual Basic .

Història de la llengua

El cap de disseny de C # és Anders Hejlsberg , un informàtic danès prèviament implicats en el desenvolupament dels Turbo Pascal i Borland idiomes Delphi (actualment propietat de Embarcador).

Comunament es creu que la inspiració va venir de la Java idioma, ja que fins i tot el seu creador James Gosling , així com Bill Joy de Sun Microsystem, el va qualificar com una imitació de la mateixa, però més limitat en termes de fiabilitat, seguretat i productivitat [2] . En canvi, segons Anders Hejlsberg i la mateixa Microsoft, l'estructura de C # és més proper a el de la llengua C ++ que a Java [3] .

C # està estretament relacionada amb el desenvolupament de l' .NET Framework . De fet, els enginyers de Microsoft fan servir en les primeres etapes de la seva elaboració d'un marc anomenat SMC, o Simple Managed C, un sistema que utilitza el llenguatge C d'una manera administrada o "administrat". Al gener de 1999, Microsoft va posar Anders Hejlsberg al capdavant d'un grup de treball amb la tasca de produir un nou idioma, anomenat provisionalment "Cool", un acrònim de "llenguatge similar a C orientada a objectes" [4] . El nom comercial definitiu es va convertir en C # a la presentació oficial de Microsoft .NET de el projecte en la Conferència de Desenvolupadors Professionals en de juliol de l'any 2000 en Orlando , quan ASP.NET biblioteques i temps d'execució de classe 's també es van convertir en el llenguatge C #.

Amb el temps, C # i Java han pres camins diferents, augmentant les diferències mútues en general, tot i que també hi ha hagut casos evidents d'intercanvi mutu de característiques. Per exemple, C #, a diferència de Java, utilitza la cosificació des de la versió 2 per generar objectes genèrics que poden ser utilitzats com classes, reservant la compilació real de el codi a l'carregar la classe en temps d'execució. Fins i tot l'aplicació en tots dos idiomes dels tipus genèrics , tot i que conceptualment idèntic, s'ha implementat de manera molt diferent. En canvi, el concepte de C # boxa i sense caixa es van dur a terme posteriorment en Java [5] .

La versió de C # 1.0, basat en .NET Framework 1.0, va ser llançat comercialment per Microsoft al gener de 2002 amb el paquet de desenvolupament de Visual Studio .NET 2002. Microsoft Visual Studio paquets. [6]

C # versió Data de presentació versió .NET visual Studio
1.0 Gener de 2002 1.0 Visual Studio .NET 2002
2.0 Novembre de 2005 2.0 Visual Studio .NET 2003
3.0 Novembre de 2007 2,0 / 3,5 Visual Studio 2008-2010
4.0 Abril de 2010 4.0 Visual Studio 2010
5.0 Agost de 2012 4.5 Visual Studio 2012-2013
6.0 Juliol de 2015 4.6 Visual Studio 2015
7.0 Març de 2017 4.6.2 Visual Studio 2017
7.1 Agost de 2017 4.7 Visual Studio 2017 Ver.15.3
7.2 Novembre de 2017 4.7.1 Visual Studio 2017 Ver.15.5
7.3 Maig de 2018 4.7.2 Visual Studio 2017 Ver.15.7
8.0 Setembre de 2019 4.8 Visual Studio 2019
9.0 Setembre de 2020 5 Visual Studio 2019

Característiques del llenguatge

C # és, en cert sentit, el llenguatge que millor descriu les directrius sobre la qual cada .NET programa s'executa. De fet, va ser creat per Microsoft específicament per a la programació en el .NET Marc . Els seus tipus de dades "primitius" es corresponen única per .NET tipus, i molts dels seus abstraccions, com ara classes, interfícies, delegats, i excepcions, són molt adequades per al maneig de la .NET marc.

Definir en forma clàssica C # com a llenguatge interpretat o compilat en el sentit clàssic dels termes és bastant complicat. De fet, és ambdues coses a el mateix temps. Donada la seva estreta integració amb el .NET Framework, codis font escrit en C # es compilen normalment d'acord amb JIT criteris. A la pràctica, la transformació en codi de màquina (és a dir, du a terme directament per la CPU ) es realitza només quan es carrega i executa el programa. En el primer cas el codi font és convertida pel marc en un codi intermedi anomenat CIL i només en l'execució del programa de l'específica CLR per l'usat sistema operatiu converteix la CIL en específic de llenguatge de màquina per al host maquinari , ja que s'executa . Això vol dir que l'execució de el codi pot ser més lent en la primera execució i després es tornen més ràpides. D'altra banda, les optimitzacions progressistes de el codi de màquina es duen a terme normalment durant la pròpia compilació, el que produeix un codi més ràpid i teòricament "òptima" executat només després d'uns execucions completes de la mateixa.

Una segona possibilitat és la denominada compilació Ngen, que permet convertir tot el codi CIL en codi màquina d'una sola vegada. Això té l'avantatge de permetre que l'ús d'entorns de desenvolupament C # per ser desplegat en qualsevol sistema operatiu una vegada que el concret es CLR s'implementa.

La sintaxi bàsica de C # és sovint molt similar o idèntica a la de la C, C ++ i Java idiomes. Algunes de les característiques bàsiques són:

  • Els noms de variables, funcions, classes i altres elements són sempre entre majúscules i minúscules.
  • Cada especificació ha d'estar tancat pel caràcter punt i coma (;).
  • Claus ({}) s'utilitzen per a les especificacions de grup.
  • D'acord amb els costums de llenguatges orientats a objectes, les especificacions s'agrupen generalment en mètodes (funcions és dir), els mètodes s'agrupen en classes, i les classes s'agrupen en espais de noms .

Diferències de C i C ++

En comparació amb C o C ++, C # llenguatge té diversos canvis, dirigits principalment a evitar errors i ambigüitats de la programació en el típic llenguatge C :

  • Punters només es poden utilitzar en blocs de codi particulars marcats com no segurs.
  • En moltes operacions aritmètiques, desbordaments es comproven.
  • Els objectes dinàmics no es cancel·la l'assignació explícita, però es manegen de forma automàtica i implícitament pel recol·lector d'escombraries quan ja no hi ha referències a aquests objectes. Aquest sistema evita els problemes de dues penjant punters i pèrdues de memòria , encara que amb una reducció en el rendiment.
  • A l'igual que en Java, és possible heretar d'una sola classe, a diferència de C ++ , però és possible implementar un nombre indefinit d'interfícies. A diferència de C ++ , no està permès tipus privat herència.
  • Les úniques conversions implícites permeses són les que són segures, és a dir, que no exposin el risc de pèrdua de dades causada pels diferents tipus de dades. Per exemple, no es permeten les conversions implícites entre nombres enters i booleans o entre enumeradores i nombres enters.
  • C # no té la plantilla típica de C ++ , però en la versió 2.0 s'han introduït genèric.

Les diferències de Java

Encara que C # es creu que és similar a Java , hi ha algunes diferències importants entre els dos idiomes. El més visible és certament la presència en C # de moltes construccions, algunes de les quals es deriven clarament de C ++ , que han estat prohibits deliberadament en Java . Els defensors de C # afirmació que això fa que el codi més clar, mentre que els defensors de Java diuen que la presència d'un gran nombre de paraules clau i regles per recordar fa que l'idioma més difícil d'aprendre i utilitzar.

Altres diferències notables són els següents:

  • Java utilitza els comentaris Javadoc-Sintax per generar la documentació de el codi font, mentre que C # usos XML de sintaxi en els comentaris amb la mateixa finalitat.
  • El que es diu un paquet de Java s'anomena un espai de noms o " espai de noms " en C #. Un nivell addicional d'organització en C # és conjunts, que poden contenir diversos espais de noms dins d'ells.
  • Java utilitza una forma diferent per invocar els mètodes constructors d'una classe, és a dir, des de la primera línia d'un constructor s'invoca altra.

Les noves característiques introduïdes amb la versió 3 de la llengua

Les noves característiques introduïdes amb la versió 4 de la llengua

  • Tipus pseudo dinàmic
  • Covariància i Controvariance en els tipus de paràmetres per genèrics Interfícies i Delegats [7]
  • Ref especificació opcional per utilitzar COM
  • paràmetres i noms dels arguments opcionals
  • Propietat indexadors (reconeguda, però no s'utilitza pels objectes en C #)

Noves funcions introduïdes amb la versió 5 de la llengua [8]

  • mètodes asincrònics
  • Atribueix Caller Informació

Noves funcions introduïdes amb la versió 6 de la llengua [9]

  • servei de compilador
  • Els membres importadors de tipus estàtic en l'espai de noms
  • filtres d'excepció
  • Esperen en catch / finally blocs
  • inicializadores de propietat automàtiques
  • Els valors per defecte per propietats exclusives getter
  • membres de cos d'expressió
  • propagador nul·la
  • interpolació de cadenes
  • operador nombredel
  • diccionari inicialitzador

Noves funcions introduïdes amb la versió 7 de la llengua [10]

  • literals binaris
  • deconstructores
  • separadors de dígits
  • Les funcions locals
  • tipus de commutador
  • Ref retorn
  • tupla anomenada
  • R va fora
  • La coincidència de patrons
  • torna asíncrons arbitràries
  • arxius
  • Obtenir i establir en les definicions d'expressió
  • Constructors i finalitzadors en les definicions d'expressió

Noves funcions introduïdes amb la versió 8 de la llengua [11]

  • tipus de referència anul·lables
  • membres de la interfície per defecte
  • fluxos asíncrons
  • expressions de commutació
  • funcions estàtiques locals
  • De només lectura membres de l'estructura
  • Millora de les cadenes literals interpolats
  • La millora de Registres
  • Índexs i intervals
  • Null-coalescència assignació

Noves funcions introduïdes amb la versió 9 de l'llenguatge [12]

  • declaracions de primer nivell
  • millores a joc de models
  • setembre I només Init
  • sencers nativa de mida
  • punters a funcions
  • funcions estàtiques anònims
  • paràmetres de rebuig lambda
  • La millora de Registres
  • Atributs de les funcions locals
  • Les noves característiques dels mètodes parcials

Exemples

Hola món!

El següent exemple mostra el text " Hola món " a la consola.

 utilitzant el sistema ;

  classe HelloWorldApp
  {
    public static void Main (string [] args)
    {
      Consola . WriteLine ( "Hello World");
      Consola . ReadLine ();
    }
  }

En el seu lloc, el següent exemple imprimeix el text " Hola món " en un quadre de missatge.

 usant System.Windows.Forms;

  classe HelloWorldApp
  {
    public static void Main ()
    {
      De missatge. Mostra ( "Hello World");
    }
  }

definició de classe

L'exemple següent defineix una classe anomenada Persona que exposa una propietat Name el valor s'emmagatzema en la variable MNAME:

 utilitzant el sistema ;
Programa d'espai de noms
{
  classe Persona 
  {
    MNAME cadena privada; // si no específic "privat" no hi ha diferències, perquè s'entén.
    
    Nom cadena pública 
    {
      obtenir MNAME {return; }
      conjunt {MNAME = valor; }
    }
  }				
}

El mateix exemple es pot escriure d'una manera equivalent, utilitzant la sintaxi Propietats automàtica introduït amb la versió 3.0:

 utilitzant el sistema ;
  classe Persona 
  {
    Nom cadena pública {get; establir; }
  }

Cal tenir en compte que el llenguatge C # és una eina sintàctica per a l'ús de les biblioteques presents en les Microsoft .NET espais de noms Framework. A part de les estructures internes de la llengua, el programador de C # ha de fer referència a les biblioteques, també per a la gestió d'E / S, a l'igual que en C i C ++. De fet, en el primer exemple que es presenta l'espai de noms s'utilitza el sistema, de les quals s'utilitzarà el mètode WriteLine de la classe Console per escriure "Hello World" a la pantalla.

calculadora

Aquest exemple mostra una calculadora senzilla.

 utilitzant el sistema ;

Calculadora d'espai de noms
{
    Programa de classes
    {
        Inici static void (String [] args)
        {
            int Number1 = 0, Number2 = 0; // Declarar dos nombres i els s'inicialitzen a 0.
            Resultat int; // variable utilitzada per al resultat dels dos nombres.
            Char elecció; // elecció de l'usuari es refereix a les opcions al menú.

            fer
            {
                Consola . Clear (); // Elimina tots els escrits presents a la consola.

                / * * Menú /
                Consola . WriteLine ( "Benvingut a la calculadora."); // escriu "Benvingut a la calculadora." Per a la consola.
                Consola . WriteLine ( "1. Addició"); // Escriure "1. L'addició" a la consola.
                Consola . WriteLine ( "2. La resta"); // Escriure "2. La resta" a la consola.
                Consola . WriteLine ( "3. Multiplicació"); // Escriure "3. Multiplicació" a la consola.
                Consola . WriteLine ( "4ª Divisió"); // Escriure a la consola "4. Divisió".
                Consola . WriteLine ( "5. Sortir"); // Escriure a la consola "5. Abandonar".

                Choice = consola. ReadKey (). KeyChar; // L'opció de l'usuari s'emmagatzema en la variable "elecció"

                Consola . Clear (); // Elimina tots els escrits presents a la consola.

                si (elecció! = '5')
                {
                    Consola . Write ( "Inseriu el primer número:"); // demana a l'usuari que introdueixi el primer número.
                    Nombre1 = Convert. ToInt32 (Consola ReadLine ().); // assigna el primer número introduït per l'usuari per a la variable "Número1".
                    Consola . Escriure ( "Introduïu el segon nombre:"); // demana a l'usuari que introdueixi el segon número.
                    Nombre2 = Convert. ToInt32 (Consola ReadLine ().); // assigna el primer número introduït per l'usuari per a la variable "Nombre2".
                }

                interruptor (Choice) // Amb l'interruptor s'analitzen els diversos casos de la valor de la variable.
                {
                    cas '1':
                        {
                            Resultat = Number1 + Number2; // El resultat de la suma acaba dins de la variable "nombre".
                            Consola . WriteLine (Nombre1 + "+" + Number2 + "=" + Resultat); // indicar a l'usuari el resultat.
                            trencar ; // Acabar l'interruptor immediatament a fi de no fer els altres casos
                        }
                    cas '2':
                        {
                            Resultat = Nombre1 - Nombre2; // El resultat de la resta acaba dins de la variable "nombre".
                            Consola . WriteLine (Nombre1 + "-" + Number2 + "=" + Resultat); // indicar a l'usuari el resultat.
                            trencar ; // Acabar l'interruptor immediatament a fi de no fer els altres casos
                        }
                    cas '3':
                        {
                            Resultat = Número1 * Nombre2; // El resultat de la multiplicació acaba dins de la variable "nombre".
                            Consola . WriteLine (Nombre1 + "*" + Number2 + "=" + Resultat); // indicar a l'usuari el resultat.
                            trencar ; // Acabar l'interruptor immediatament a fi de no fer els altres casos
                        }
                    cas '4':
                        {
                            si (Nombre2! = 0) // La divisió per zero és impossible de manera que afegir un if
                            {
                                Resultat = Number1 / Number2; // El resultat de la divisió acaba dins de la variable "nombre".
                                Consola . WriteLine (Nombre1 + "/" + Number2 + "=" + Resultat); // indicar a l'usuari el resultat.
                            }
                            en cas contrari
                            {
                                Consola . WriteLine (Nombre1 + + + Nombre2 "= Impossible!" "/"); // resultat impossible
                            }
                            trencar ; // Acabar l'interruptor immediatament a fi de no fer els altres casos
                        }
                    cas '5':
                        {
                            trencar ; // Acabar l'interruptor immediatament a fi de no fer els altres casos
                        }
                    per defecte:
                        {
                            Consola . WriteLine ( "Opció incorrecte");
                            trencar ;
                        }
                }
                Consola . WriteLine ( "Premi ENTER per anar cap endavant");
                Consola . ReadKey ();
            }
            mentre que (Elecció = '5'!); // Si la condició és veritable es torna a executar el codi a l'interior!
        }
    }
}

Implementacions

El compilador de referència és Microsoft Visual C # , que forma part de la Microsoft Visual Studio paquet i actualment de codi obert [13] .

Hi ha altres implementacions en el mercat i en les de codi obert circuits.

Mono

El Mico implementa projectes 1 codi obert amb llicència C # compilador , un complet codi obert aplicació de la CLI , o Common Language Infrastructure , incloent les biblioteques marc requerits per ECMA especificacions, així com una implementació gairebé completa dels .NET biblioteques de classes propietàries actualment actualitzat a la versió 3.5. Fins a la versió 2.6 de Mono no hi ha cap aplicació de Windows Presentation Foundation ( WPF ), si bé està previst per a evolucions posteriors de la plataforma Mono. A més, les implementacions només parcials de LINQ a SQL i WCF Actualment s'estan planificant.

DotGNU

El DotGNU projecte, actualment ja no és compatible [14] , inclou un compilador de C #, una implementació parcial de la CLI , incloent biblioteques necessàries d'acord amb la ECMA especificació, així com un subconjunt d'alguns propietària de Microsoft .NET biblioteques de classes, actualitzat per la versió de .NET 2.0.

Rotor

Rotor projecte de Microsoft, distribuït de forma gratuïta per a fins educatius i d'investigació úniques, ofereix una implementació de el temps d'execució CLR i un compilador de C #, amb un subconjunt de la CLI compatible amb la infraestructura amb l'especificació ECMA [15] .

Normalització

Al desembre de 2001 ECMA va publicar "ECMA-334 C # Language Specification" [16] .

C # va convertir en un estàndard ISO en 2003 ( ISO / IEC 23270 ) [17] .

Nota

  1. ^ Les obres de nom en el fet que C♯, en anglès i altres idiomes, indica la nota musical Do sostingut, un semitò per sobre de la "C", o C (font: James Kovacs, . C # / NET lliçó d'història , en jameskovacs . com, 7 de setembre de 2007. Obtingut 7 de juny de 2012 (arxivat des de l'original el 21 d'agost, 2011).). De fet, el nom de l'idioma ha de ser escrit amb la afilada símbol, però el hash de signe s'utilitza en lloc d'escriure la conveniència (font: MSDN , Visual C # | La ). En italià, es perd el joc de paraules.
  2. ^ (ES) Per què Microsoft C # no és en cnet.com.
  3. ^ (ES) C # i Java: Comparació de Llenguatge de programació , en msdn.microsoft.com.
  4. ^ (ES) Naomi Hamilton, L'AZ de Llenguatges de programació: C # , a Computerworld , 1 d'octubre de 2008. Obtingut el 4 de febrer 2017.
  5. ^ (ES) Klaus Kreft i Angelika Langer, després de Java i C # - Què segueix? , En www.artima.com. Consultat el 4 de febrer de 2017 .
  6. ^ C # Història , en docs.microsoft.com.
  7. ^ (ES) Covariància i contravariància (C #) , en MSDN.
  8. ^ (ES) Una introducció a les noves característiques de C # 5.0 , al programa de premi MVP de Microsoft Bloc. Consultat el 4 de febrer de 2017 .
  9. ^ Marcos Michaelis, nou i millorat de C # 6.0 , en msdn.microsoft.com. Obtingut d'octubre de de 2014.
  10. ^ (ES) Idioma funcions d'estat , en github.com.
  11. ^ C # 8 Notícies , en docs.microsoft.com.
  12. ^ C # 9 Notícies , en docs.microsoft.com.
  13. ^ (ES) projecte DonTen Roslyn en GutHub , en github.com.
  14. ^ (ES) DotGNU projecte , en gnu.org.
  15. ^ (ES) Projecte de rotor en MSDN , en msdn.microsoft.com.
  16. ^ ECMA-334 estàndard , en ecma-international.org.
  17. ^ Http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=36768 arxivats 8 maig 2012 en el Arxiu d'Internet . - la normalització ISO

Bibliografia

  • John Sharp, Microsoft Visual C # 2012, Mondadori Informatica, 2014, pàg. 251, ISBN 978-88-6114-404-0 .
  • (ES) A. Boehm, J. Murach, de Murach C # 2015, Mike Murach & Associates, 2016, pàg. 908, ISBN 978-1-890774-94-3 .
  • D. Bochicchio, C. Civera, M. De Sanctis, A. Leoncini, M. Leoncini, S. Mostarda, C # 6 i estudi 2015. guia visual completa per al desenvolupador, Hoepli Informatica, 2016, pàg. 456, ISBN 978-88-203-7099-2 .
  • Antonio Pelleriti, Programació amb C # 8. guia completa, Edicions LSWR, 2019, pàg. 928, ISBN 978-88-68957698 .
  • (ES) A. Troelsen, P. Japikse, C # 6.0 i .NET 4.6 Framework, Apress, 2016, pàg. 1625, ISBN 978-1-4842-1333-9 .
  • (ES) J. Albahari, B. Albahari, C # 6.0 en poques paraules: la referència definitiva, O'Reilly Media, 2016, pàg. 1136, ISBN 978-1-4919-2706-9 .
  • (IT) A. Programació Pelleriti amb C # 8, estil de vida digital, pàg. 243, ISBN 978-88-6895-769-8

Altres projectes

Enllaços externs

Controllo di autorità LCCN ( EN ) sh2001001705 · GND ( DE ) 4616843-6 · BNF ( FR ) cb13614817q (data)