Casa / Lavora su Internet / Che cos'è Microsoft net framework. Una panoramica della tecnologia NET Framework. Che cos'è il sistema di tipo comune CTS

Che cos'è Microsoft net framework. Una panoramica della tecnologia NET Framework. Che cos'è il sistema di tipo comune CTS

Il .NET Framework è un integrato Componente Windows, che supporta la creazione e l'esecuzione della prossima generazione di applicazioni XML e servizi Web. Durante lo sviluppo di .NET Framework sono stati presi in considerazione i seguenti obiettivi.

· Fornitura di un ambiente di programmazione coerente orientato agli oggetti per l'archiviazione e l'esecuzione di codice oggetto in locale, per l'esecuzione locale di codice distribuito su Internet o per l'esecuzione remota.

Fornire un ambiente di esecuzione del codice che riduca al minimo i conflitti di distribuzione Software e controllo della versione.

Fornire un ambiente di esecuzione del codice che garantisca esecuzione sicura codice, incluso il codice creato da una terza parte sconosciuta o non completamente attendibile.

· Fornire un ambiente di esecuzione del codice che elimini i problemi di prestazioni con gli ambienti di scripting o il codice interpretato.

Garantire principi uniformi di lavoro degli sviluppatori per tipi diversi applicazioni come applicazioni Windows e applicazioni web.

· Sviluppare un'interoperabilità standard del settore che integri il codice .NET Framework con qualsiasi altro codice.

I due componenti principali di .NET Framework sono Common Language Runtime (CLR) e .NET Framework Class Library. Il nucleo di .NET Framework è il CLR. Il runtime può essere considerato come un agente che gestisce il codice in fase di esecuzione e fornisce servizi di base come la gestione della memoria, il threading e la comunicazione remota. Ciò impone forti condizioni di tipizzazione e altri tipi di controlli sull'accuratezza del codice che garantiscono sicurezza e affidabilità. In effetti, il compito principale del runtime è gestire il codice. Il codice che accede al runtime è chiamato codice gestito, mentre il codice che non accede al runtime è chiamato codice non gestito. L'altro componente principale di .NET Framework, la libreria di classi, fornisce una raccolta completa di tipi orientati agli oggetti utilizzati per sviluppare applicazioni, che vanno da quelli ordinari che vengono lanciati da riga di comando o con GUI dall'utente alle applicazioni che utilizzano le più recenti funzionalità della tecnologia ASP.NET come Web Form e XML Web Services.

Il .NET Framework può essere ospitato da componenti non gestiti che caricano Common Language Runtime (CLR) nei propri processi ed eseguono codice gestito, creando così un ambiente di programmazione che consente strumenti di esecuzione gestiti e non gestiti. .NET Framework non solo fornisce più runtime di base, ma supporta anche lo sviluppo di runtime di base di terze parti.


Ad esempio, ASP.NET ospita il runtime per fornire un ambiente lato server scalabile per il codice gestito. ASP.NET funziona direttamente con il runtime per abilitare le applicazioni ASP.NET ei servizi Web XML, entrambi descritti più avanti in questo argomento.

Internet Explorerè un esempio di un'applicazione non gestita che ospita il runtime (sotto forma di un'estensione di tipo MIME). L'utilizzo di Internet Explorer per ospitare il runtime consente di incorporare componenti gestiti o controlli Windows Form nei documenti HTML. L'hosting del runtime in questo modo rende possibile il codice mobile gestito (simile ai controlli Microsoft® ActiveX®), ma con miglioramenti significativi che solo il codice gestito può offrire, come l'esecuzione semi-affidabile e l'archiviazione di file isolata.

La figura seguente mostra la relazione di Common Language Runtime e della libreria di classi con le applicazioni e con il sistema generale. L'illustrazione mostra anche come funziona il codice gestito all'interno di un'architettura più ampia.

NET Framework nel contesto

Le sezioni seguenti descrivono in modo più dettagliato i componenti e le funzionalità principali di .NET Framework.


Ad esempio, ASP.NET ospita il runtime e fornisce un ambiente scalabile per il codice gestito sul lato server. ASP.NET funziona direttamente con il runtime per eseguire le applicazioni ASP.NET ei servizi Web XML discussi più avanti in questo argomento.

Internet Explorer è un esempio di un'applicazione non gestita che ospita un ambiente di runtime (sotto forma di estensioni di tipo MIME). L'hosting del runtime in Internet Explorer consente di incorporare componenti o elementi gestiti Controlli di Windows Da moduli a documenti HTML. Questa collocazione dell'ambiente rende possibile l'esecuzione controllata codice cellulare(simile ai controlli Microsoft® ActiveX®), ma con i vantaggi significativi del codice gestito, come l'esecuzione parzialmente attendibile e l'archiviazione di file isolata.

La figura seguente mostra come il Common Language Runtime (CLR) e la libreria di classi sono correlati alle applicazioni utente e all'intero sistema. La figura mostra anche come funziona il codice gestito all'interno dell'architettura più ampia.

NET Framework nel contesto

Le sezioni seguenti forniscono una descrizione più dettagliata dei componenti e delle funzionalità principali di .NET Framework.

introduzione

Una PIATTAFORMA è almeno un ambiente di esecuzione del programma e ... qualcos'altro che determina le caratteristiche dello sviluppo e dell'esecuzione del codice del programma: paradigmi di programmazione, linguaggi di programmazione, insiemi di classi di base.

Microsoft.NET (.NET Framework) è una piattaforma software. Contiene i seguenti componenti principali: Common Language Runtime (CLR) e la libreria di classi .NET Framework (.NET FCL).

CLS (specifica del linguaggio comune) - specifica generale linguaggi di programmazione. Si tratta di un insieme di costrutti e vincoli che forniscono indicazioni agli autori di librerie e compilatori in .NET Framework. Le librerie create secondo il CLS possono essere utilizzate da qualsiasi linguaggio di programmazione che supporti il ​​CLS. I linguaggi conformi a CLS (inclusi Visual C#, Visual Basic, Visual C++) possono integrarsi tra loro. CLS è la base per l'interoperabilità tra lingue all'interno della piattaforma Microsoft.NET.

CLR (Common Language Runtime) - Ambiente di runtime o macchina virtuale. Assicura che l'assembly venga eseguito. Il componente principale di .NET Framework. Sotto macchina virtuale comprendere l'astrazione di un gestito incapsulato (distaccato). sistema operativo alto livello, che garantisce l'esecuzione del codice del programma e comporta la soluzione dei seguenti compiti:

§ gestione del codice (caricamento ed esecuzione),

§ gestione della memoria durante il posizionamento degli oggetti,

§ isolamento memoria dell'applicazione,

§ controllo di sicurezza del codice,

§ conversione del linguaggio intermedio in codice macchina,

§ accesso ai metadati (informazioni di tipo esteso),

§ gestione delle eccezioni, comprese le eccezioni multilingua,

§ interazione tra codice gestito e non gestito (compresi gli oggetti COM),

§ supporto ai servizi di sviluppo (profiling, debugging, ecc.).

In breve, il CLR è un insieme di servizi necessari per eseguire una compilazione. In questo caso, il codice di programma di un assembly può essere o gestito (codice, quando eseguito dal CLR, in particolare, attiva il sistema di gestione della memoria) o non gestito (codice di programma “vecchio”).

Lo stesso CLR è costituito da due componenti principali: il nucleo (mscoree.dll) e la libreria di classi di base (mscorlib.dll). La presenza di questi file su disco è un segno sicuro che il computer ha almeno tentato di installare il framework .NET.

Il core runtime è implementato come libreria mscoree.dll. Quando un assembly è collegato, vengono integrate informazioni speciali che, quando viene avviata un'applicazione (EXE) o quando viene caricata una libreria (accesso a una DLL da un modulo non gestito, chiamando la funzione LoadLibrary per caricare un assembly gestito), provoca il CLR da caricare e inizializzare. Dopo che il CLR è stato caricato nello spazio degli indirizzi di un processo, il kernel di runtime esegue le seguenti operazioni:

§ trova il luogo dell'assemblea,

§ carica l'assieme in memoria,

§ analizza il contenuto dell'assembly (identifica classi, strutture, interfacce),

§ analizza i metadati,

§ fornisce la compilazione del codice del linguaggio intermedio (IL) in istruzioni specifiche della piattaforma (codice assembler),

§ esegue i controlli relativi a sicurezza,

§ utilizzando il thread principale dell'applicazione, trasferisce il controllo al frammento di codice assembly convertito in istruzioni del processore.

FCL (.NET Framework Class Library) è una libreria orientata agli oggetti di classi, interfacce e sistemi di tipi (tipi di valore) inclusi nella piattaforma Microsoft .NET, corrispondente alla specifica CLS.

Questa libreria fornisce l'accesso a funzionalità sistema ed è inteso come base per lo sviluppo di applicazioni, componenti, controlli .NET.

NET, la libreria di classi è il secondo componente di CLR.

NET FCL può essere utilizzato da TUTTE le applicazioni .NET, indipendentemente dallo scopo e dall'architettura utilizzata per sviluppare il linguaggio di programmazione. In particolare contiene:

§ tipi incorporati (elementari), rappresentati come classi (sulla piattaforma .NET, tutto è costruito su strutture o classi),

§ classi per lo sviluppo di un'interfaccia utente grafica (Windows Form),

§ classi per lo sviluppo di applicazioni Web e servizi Web basati su tecnologia ASP.NET (Web Forms),

§ classi per lo sviluppo di protocolli XML e Internet (FTP, HTTP, SMTP, SOAP),

§ classi per lo sviluppo di applicazioni che funzionano con database (ADO.NET),

§ e altro ancora.

NET è un'applicazione progettata per essere eseguita sulla piattaforma Microsoft.NET. È implementato nei linguaggi di programmazione corrispondenti a CLS.

MSIL (Microsoft Intermediate Language, noto anche come IL - Intermedia Language) è un linguaggio intermedio della piattaforma Microsoft.NET. I codici sorgente per le applicazioni .NET sono scritti in linguaggi di programmazione conformi alla specifica CLS. Per i linguaggi di programmazione conformi alla specifica CLS, è possibile creare un convertitore in MSIL. Pertanto, i programmi in queste lingue possono essere tradotti in codice intermedio MSIL. Grazie alla conformità al CLS, come risultato della traduzione del codice del programma scritto in diverse lingue, si ottiene un codice IL compatibile.

In effetti, MSIL è un assemblatore di processori virtuale.

METADATA - quando si converte il codice del programma in MSIL, viene formato anche un blocco METADATA contenente informazioni sui dati utilizzati nel programma. Si tratta infatti di insiemi di tabelle contenenti informazioni sui tipi di dati definiti nel modulo, sui tipi di dati a cui fa riferimento questo modulo. In precedenza, queste informazioni venivano memorizzate separatamente. Ad esempio, un'applicazione potrebbe includere informazioni sulle interfacce descritte in un IDL (Interface Definition Language). I metadati fanno ora parte del modulo gestito.

In particolare, i metadati vengono utilizzati per:

§ conservazione delle informazioni sui tipi. Durante la compilazione, i file di intestazione e libreria non sono più necessari. Il compilatore legge tutte le informazioni necessarie direttamente dai moduli gestiti,

§ verifica del codice durante l'esecuzione del modulo,

§ gestione memoria dinamica(liberazione della memoria) durante l'esecuzione del modulo,

§ quando si sviluppa un programma utilizzando standard Strumenti(Microsoft Visual Studio .NET)

§ Sulla base dei metadati, viene fornito un suggerimento dinamico (IntelliSense).

Lingue per le quali è implementata la traduzione MSIL:

e molte altre lingue.

Eseguibile: indipendentemente dal compilatore (e dalla lingua di origine), il risultato della traduzione di un'applicazione .NET è un eseguibile gestito (modulo gestito). Questo è un file Windows eseguibile portatile standard (PE - Portable Executable).

Gli elementi del modulo gestito sono presentati nella tabella.

Un modulo gestito contiene codice gestito.

Il codice gestito è il codice che viene eseguito in CLR. Il codice è costruito sulla base di strutture e classi dichiarate nel modulo sorgente che contengono dichiarazioni di metodo. Il codice gestito deve essere conforme a un determinato livello di informazioni (metadati) per l'ambiente di runtime. Il codice C#, Visual Basic e JScript è gestito per impostazione predefinita. Il codice Visual C++ non è gestito per impostazione predefinita, ma il compilatore può produrre codice gestito fornendo un argomento nella riga di comando (/CLR). Una delle caratteristiche del codice gestito è la presenza di meccanismi che consentono di lavorare con DATI GESTITI.

Dati gestiti: oggetti allocati nella memoria gestita (nell'heap gestito) durante l'esecuzione del codice del modulo e distrutti dal Garbage Collector CLR. I dati C#, Visual Basic e JScript .NET sono gestiti per impostazione predefinita. I dati C# possono anche essere contrassegnati come non gestiti.

Un assembly è l'elemento costitutivo di base di un'applicazione in .NET Framework. I moduli gestiti sono combinati in assembly. Un assembly è un raggruppamento logico di uno o più moduli gestiti o file di risorse. I moduli gestiti negli assembly vengono eseguiti in Runtime Environment (CLR). Un assembly può essere un'applicazione eseguibile (in un file .EXE) o un modulo di libreria (in un file .DLL). Allo stesso tempo, l'assembly non ha nulla in comune con le normali applicazioni eseguibili (vecchio stile!) e con i moduli di libreria.

La dichiarazione dell'assembly (Manifest) è parte integrante dell'assembly. Un altro set di tabelle di metadati che:

§ identifica l'assembly sotto forma di nome testuale, versione, cultura e firma digitale (se l'assembly è condiviso tra le applicazioni),

§ determina i file inclusi nella composizione (per nome e hash),

§ specifica i tipi e le risorse esistenti nell'assembly, inclusa una descrizione di quelli esportati dall'assembly,

§ elenca le dipendenze da altri assembly,

§ Specifica l'insieme di diritti richiesti per il corretto funzionamento dell'assembly.

Queste informazioni vengono utilizzate in fase di esecuzione per mantenere l'applicazione in esecuzione correttamente.

Il processore NON PUÒ eseguire il codice IL. E la traduzione del codice IL viene eseguita dal compilatore JIT (just in time - in momento giusto) richiamato da CLR secondo necessità ed eseguito dal processore. In questo caso, i risultati del compilatore JIT vengono memorizzati in memoria ad accesso casuale. Viene stabilita una corrispondenza tra un frammento del codice IL tradotto e il corrispondente blocco di memoria, che successivamente consente al CLR di trasferire il controllo alle istruzioni del processore registrate in questo blocco di memoria, bypassando una chiamata ripetuta al compilatore JIT.

Nel CLR, è consentito lavoro di squadra e interazione di componenti software implementati in diversi linguaggi di programmazione.

Basato sul blocco di metadati formato in precedenza, CLR fornisce un'interoperabilità EFFICIENTE tra le applicazioni .NET in esecuzione.

Per CLR, tutti gli assembly sono uguali, indipendentemente dai linguaggi di programmazione in cui sono stati scritti. La cosa principale è che sono conformi a CLS. Di fatto, il CLR distrugge i confini dei linguaggi di programmazione (interoperabilità cross-language). Pertanto, grazie a CLS e CTS, le applicazioni .NET risultano effettivamente essere applicazioni MSIL (IL).

Il CLR si occupa di molti dei problemi che sono stati tradizionalmente al centro degli sviluppatori di applicazioni. Le funzioni svolte dal CLR includono:

§ verifica e compilazione dinamica (JIT) del codice MSIL nelle istruzioni del processore,

§ gestione della memoria, dei processi e dei thread,

§ organizzazione dell'interazione tra processi,

§ risolvere problemi di sicurezza (nel quadro della politica di sicurezza esistente nel sistema).

Un AppDomain è un contenitore di assembly logici utilizzato per isolare un'applicazione all'interno dello spazio degli indirizzi di un processo. Tutti gli oggetti creati da un'applicazione vengono creati all'interno di un dominio applicazione specifico. In un singolo processo del sistema operativo possono esistere più domini applicazione. Il CLR isola le applicazioni gestendo la memoria all'interno di un dominio dell'applicazione.

Il codice in esecuzione in CLR (processo CLR) è separato dagli altri processi in esecuzione contemporaneamente sul computer.

Un processo normale viene avviato dal sistema all'interno di uno spazio di indirizzi appositamente allocato per il processo. CLR offre la possibilità di eseguire più applicazioni gestite in un SINGOLO PROCESSO. Ogni applicazione gestita è associata al proprio dominio dell'applicazione (in breve AppDomain). Oltre al dominio principale, è possibile creare diversi domini aggiuntivi nell'applicazione.

La struttura del runtime CLR è mostrata nell'immagine.

Proprietà del dominio:

§ i domini sono isolati l'uno dall'altro. Gli oggetti creati all'interno di un dominio sono inaccessibili da un altro dominio,

§ Il CLR è in grado di scaricare i domini insieme a tutti gli assembly associati a tali domini,

§ possibilità di ulteriore configurazione e protezione dei domini,

§ Viene implementato uno speciale meccanismo di accesso sicuro (marshalling) per lo scambio di dati tra domini.

§ Il .NET Framework ha sviluppato il proprio modello di componenti, i cui elementi sono .NET assembly (.NET-assembly) e per la compatibilità in avanti e indietro con il modello COM / COM +, il CLR ha meccanismi integrati (COM Interop) che forniscono l'accesso agli oggetti COM secondo le regole .NET e agli assembly .NET secondo le regole COM. Allo stesso tempo, le applicazioni .NET non richiedono la registrazione dei componenti in registro di sistema Finestre.

Per eseguire un'applicazione .NET è sufficiente posizionare il file relativo questa applicazione assembly nella stessa directory. Se l'assieme può essere utilizzato in diverse applicazioni, viene posizionato e registrato utilizzando utilità speciale nella GAC ​​(Global Assembly Cache).

CTS - Sistema di tipo comune Sistema standard tipi. Supportato da tutte le lingue della piattaforma. A causa del fatto che .NET è figlio di OOP, stiamo parlando di tipi elementari, classi, strutture, interfacce, delegati ed enumerazioni.

Il Common Type System è una parte importante dell'ambiente di runtime, definendo la struttura dei costrutti sintattici, come dichiarare, utilizzare e applicare i tipi di runtime GENERAL. Il CTS contiene le informazioni di base sul sistema delle tipologie GENERALI PREDEFINITE, sul loro utilizzo e sulla loro gestione (regole di conversione dei valori). CTS svolge un ruolo importante nell'integrazione di applicazioni gestite multilingue.

Uno spazio dei nomi è un modo per organizzare un sistema di tipi in singolo gruppo. Esiste una libreria di classi di base del linguaggio comune comune. E il concetto di spazio dei nomi fornisce un'organizzazione e una navigazione efficienti in questa libreria. Indipendentemente dal linguaggio di programmazione, l'accesso a determinate classi viene fornito raggruppandole all'interno di spazi dei nomi comuni.

Spazio dei nomi Scopo
Sistema
System.Data Per accedere ai database
System.Data.Common
System.Data.OleDb
System.Data.SqlClient
System.Collections Classi per lavorare con oggetti contenitore
System.Diagnostics Classi per la traccia e il debug del codice
System.Drawing Classi di supporto alla grafica
System.Drawing.Drawing2D
System.Drawing.Printing
Sistema.IO Supporto I/O
Sistema.Net Supporto per il trasferimento di dati su reti
Sistema.Riflessione Utilizzo di tipi personalizzati in fase di esecuzione
System.Reflection.Emit
System.Runtime.InteropServices Supporto per l'interazione con "codice semplice": DLL, server COM, accesso remoto
System.Runtime.Remoting
System.Security Crittografia, permessi
System.Threading Lavorare con i flussi
Sistema.WEB Lavorare con le applicazioni web
System.Windows.Form Lavorare con gli elementi dell'interfaccia di Windows
System.XML Supporto dati XML

Esecuzione di moduli eseguibili non gestiti (regular Applicazioni Windows) viene fornito direttamente Sistema Windows. I moduli non gestiti vengono eseguiti come processi "semplici" nell'ambiente Windows. L'unico requisito che tali moduli devono soddisfare è che funzionino correttamente in ambiente Windows. Devono funzionare "correttamente" (non bloccare il sistema, evitare perdite di memoria, non bloccare altri processi e utilizzare correttamente gli strumenti del sistema operativo stesso per lavorare per conto dei processi). Cioè, per abbinare di più regole generali lavorare sotto Windows.

Allo stesso tempo, la maggior parte dei problemi della corretta esecuzione di un modulo non gestito (problemi di interazione, allocazione e rilascio di memoria) sono problemi degli sviluppatori di applicazioni. Ad esempio, la nota tecnologia COM è un modo per organizzare l'interazione di componenti eterogenei all'interno di un'applicazione.

Un oggetto è, in senso lato, un'area di memoria (nello stack o nell'heap) allocata durante l'esecuzione di un programma per scrivere qualsiasi valore. È caratterizzato da un tipo (un insieme fisso di proprietà che determinano la dimensione dell'area occupata, il modo in cui il valore viene interpretato, l'intervallo di valori, l'insieme di azioni consentite durante la manipolazione dell'oggetto) dalla posizione in memoria (indirizzo ).

Garbage Collection è un meccanismo che consente a CLR di determinare quando un oggetto non è più disponibile nella memoria gestita di un programma. Garbage Collection libera la memoria gestita. Per lo sviluppatore dell'applicazione, la presenza di un meccanismo di garbage collection significa che non deve più preoccuparsi di liberare memoria. Tuttavia, ciò potrebbe richiedere un cambiamento nello stile di programmazione, ad esempio Attenzione speciale dovrebbe essere dato alla procedura per liberare le risorse di sistema. È necessario implementare metodi che rilasciano risorse di sistema che sono sotto il controllo dell'applicazione.

Uno stack è un'area di memoria appositamente organizzata progettata per memorizzare temporaneamente i valori degli oggetti (variabili e costanti), per passare parametri quando si chiamano metodi, per memorizzare l'indirizzo di ritorno. La gestione di uno stack è piuttosto semplice rispetto a un heap. Si basa sulla modifica del valore del registro corrispondente in cima allo stack. Quando la dimensione della pila viene ridotta, gli oggetti vengono semplicemente persi.

Programma in C#

Un programma è una sequenza di istruzioni ben formata (non discutibile dal compilatore C#) da cui viene formato un assembly.

In generale, il programmatore crea un file contenente dichiarazioni di classe, che viene inviato al compilatore come input. Il risultato della compilazione è rappresentato dal traduttore come un assembly ed è determinato dalle preferenze del programmatore. In linea di principio, l'assemblea può essere di due tipi:

§ Portable Executable File (file PE con estensione .exe), adatto per l'esecuzione diretta da parte del CLR,

§ Dynamic Link Library File (file DLL con estensione .dll), progettato per riutilizzare come componente di un'applicazione.

In ogni caso, in base al codice di input, il traduttore costruisce un modulo su IL, un manifest, e forma un assembly. In futuro, l'assembly può essere eseguito dopo la compilazione JIT oppure può essere utilizzato come parte di altri programmi.

È uno dei linguaggi di programmazione più popolari, multifunzionali e in via di sviluppo attivo questo momento. Con esso, puoi sviluppare quasi tutti i software, dalle semplici forme di vincita applicazioni, ad applicazioni Web client/server di grandi dimensioni o persino applicazioni mobili e giochi per computer. E funziona sulla base del .NET Framework. Scopriamo cos'è.

Guarda il mio video su .NET Framework e CLR Runtime per C#

Linguaggio di programmazione C#è relativamente fresco, ma è già riuscito a guadagnare fiducia. Il rilascio della prima versione è avvenuto nel febbraio 2002. L'ultima versione del linguaggio al momento della stesura di questo documento è C# 7.2, rilasciata il 16/08/2017.

La sintassi del linguaggio C#, come suggerisce il nome, appartiene alla famiglia dei linguaggi C-like ed è simile ad altri linguaggi popolari di questo gruppo (C++, Java). Pertanto, se hai già familiarità con uno di questi linguaggi, ti sarà molto più facile padroneggiare il linguaggio di programmazione C#.

Poiché C# è un linguaggio orientato agli oggetti, supporta l'ereditarietà, il polimorfismo, l'incapsulamento, la tipizzazione forte delle variabili, l'overload degli operatori e altro ancora. Tutti questi concetti saranno discussi in dettaglio negli articoli successivi. Grazie all'utilizzo del paradigma del design orientato agli oggetti, utilizzando un linguaggio di programmazione, è abbastanza facile sviluppare progetti su larga scala e allo stesso tempo flessibili. Con tutto ciò, vengono regolarmente rilasciate nuove versioni del linguaggio C#, che aggiungono nuove funzionalità per semplificare la vita di uno sviluppatore, aumentare la velocità di sviluppo, migliorare le prestazioni e l'affidabilità dell'applicazione.

Piattaforma .NET

.NET Framework è una piattaforma software dell'azienda Microsoft consentendo lo sviluppo in vari linguaggi di programmazione, poiché per tutti i linguaggi viene utilizzato un unico ambiente di esecuzione del linguaggio comune Common Language Runtime (CLR). Pertanto, le caratteristiche principali della piattaforma .NET sono:

  • Multipiattaforma– Framework .NET supportato dai più moderni sistemi operativi Windows, oltre alla possibilità di creare applicazioni supportate Sistemi Linux e persino app mobili.
  • Multilingue- poiché il codice sorgente scritto nel linguaggio di programmazione utilizzato viene tradotto in codice Common Intermediate Language (CIL) in linguaggio comune, diventa possibile sviluppare in qualsiasi linguaggio di programmazione supportato e persino utilizzare diversi linguaggi di programmazione in un'unica soluzione. I linguaggi supportati più popolari sono C#, VB.NET, C++, F#.
  • Ampia libreria di classi e tecnologie- esiste un numero enorme di librerie pronte per l'uso per risolvere i compiti necessari. Spesso non è necessario implementare affatto la logica di basso livello dell'applicazione, è sufficiente utilizzare una soluzione già pronta che viene comodamente fornita tramite il gestore di pacchetti nuget. Inoltre, la piattaforma .NET semplifica lo sviluppo di quasi tutti i tipi di software necessari.

Codice gestito e non gestito. Compilazione JIT

Codice gestitoè il codice gestito dal Common Language Runtime (CLR). Ciò significa che l'ambiente di controllo ha la possibilità di sospendere l'esecuzione dell'applicazione e ottenere informazioni specifiche sullo stato dell'applicazione in qualsiasi momento durante la sua esecuzione. Il codice sorgente del linguaggio di programmazione utilizzato viene tradotto in codice CIL gestito (detto anche assembler di alto livello).

Dopo aver creato una libreria di classi o un'applicazione, il codice sorgente continua ad essere archiviato in CIL. E quando si avvia l'applicazione o si accede alla libreria, viene eseguito Just-In-Time ( JIT) compilazione di un'applicazione in codice macchina specifico per l'ambiente su cui viene eseguita l'applicazione. Allo stesso tempo, una caratteristica importante è che viene compilata solo quella parte dell'applicazione o della libreria a cui si accede (beh, collegamenti, ovviamente). Ciò consente di aumentare le prestazioni del sistema e risparmiare risorse.

Codice non gestito- questo è il codice che viene tradotto direttamente in codice eseguibile dalla macchina e viene eseguito direttamente dal sistema operativo.

Inoltre, consiglio di leggere l'articolo. E iscriviti anche al gruppo VKontakte, al canale Telegram e YouTube. C'è ancora più utile e interessante per i programmatori.

C#
  • Runtime del linguaggio comune) e una libreria di classi...
  • Il .NET Framework e la specifica CTS
    Il linguaggio C# e il suo supporto sono attualmente associati al .NET Framework sviluppato da Microsoft. La piattaforma denominata (vedi) include: Common Language Runtime (CLR - Runtime del linguaggio comune Libreria di classi Framework). Dovrebbe essere notato...
    (PROGRAMMAZIONE. BASE C#)
  • Installazione di .NET Framework e Visual Studio
    Nell'ambiente Windows 7 e 8, la piattaforma .NET è già installata e non è necessario installare nulla. Per sviluppare applicazioni nella piattaforma .NET, è necessario installare il sistema di sviluppo Visual C# Edizione Express 2012 (o 2013) - versione gratuita Ambiente di sviluppo Visual Studio (abbreviato, ma con quasi...
    (Programmazione orientata agli oggetti)
  • TIPI C# E TIPI DI PIATTAFORMA .NET FRAMEWORK
    Il linguaggio C# e il suo supporto sono attualmente associati al .NET Framework sviluppato da Microsoft. La piattaforma denominata (vedi) include: Common Language Runtime (CLR - Runtime del linguaggio comune) e una libreria di classi...
    (PROGRAMMAZIONE. BASE C#)
  • Il .NET Framework e la specifica CTS
    Il linguaggio C# e il suo supporto sono attualmente associati al .NET Framework sviluppato da Microsoft. La piattaforma denominata (vedi) include: Common Language Runtime (CLR - Runtime del linguaggio comune) e una libreria di classi (FCL - Libreria di classi Framework). Dovrebbe essere notato...
    (PROGRAMMAZIONE. BASE C#)
  • Annotazione: Iniziativa Microsoft .NET. Problemi di compatibilità, affidabilità e riutilizzo dei componenti. quadro .NET. Common Language Runtime (CLR). Linguaggio pseudo-macchina CIL (assemblatore gestito). compilatore JIT. Linguaggi di programmazione. Assemblee. metadati. Netturbino. Libreria di classi .NET Framework

    Problemi di sviluppo dei moderni sistemi informativi

    Problemi di integrazione

    • Moduli scritti in linguaggi diversi, utilizzando diverse API (o versioni API) o diversi formati di presentazione dei dati;
    • Programmi sviluppati per varie piattaforme all'interno di un unico pacchetto software;
    • Sistemi che utilizzano diversi modelli software.

    Soprattutto spesso ci sono problemi di integrazione con il codice legacy ( legacy ). Quando si risolvono problemi di integrazione, sorgono problemi di incompatibilità.

    Problemi di portabilità

    Sempre più spesso, i programmi devono supportare più piattaforme (ad esempio, la capacità di lavorare con un programma su Piattaforma Windows e Mac OS).

    Problemi di versione

    Gli sviluppatori di Windows sono a conoscenza di un problema di compatibilità delle versioni noto come DLL hell. Questo "inferno" si verifica quando i componenti installati per una nuova applicazione sostituiscono i componenti di una vecchia applicazione. Di conseguenza, la vecchia applicazione inizia a funzionare in modo errato o smette di funzionare.

    Gestione delle risorse

    Uno dei problemi della programmazione è la gestione e il corretto rilascio di risorse, file, memoria, spazio sullo schermo, le connessioni di rete, risorse del database, ecc. Una gestione errata di queste risorse può portare a un'esecuzione non corretta del programma.

    Tipo di sicurezza

    Quando viene menzionata la sicurezza del tipo, significano una gestione errata dei tipi di dati: tentativi di accedere ad aree di memoria al di fuori del limite del tipo, tentativi di chiamare metodi che non sono presenti nel tipo o tentativi di chiamare un metodo che accetta il tipo A come parametro e passarlo come oggetto parametro di tipo B.

    Gestione dei guasti

    Quando si sviluppano applicazioni Windows utilizzando l'API Win32, alcune funzioni restituiscono eccezioni, altre restituiscono codici di stato e altre ancora restituiscono HRESULT . Pertanto, non esiste un meccanismo coerente per la gestione degli errori ed è possibile ignorare alcune eccezioni, il che rende il codice non sicuro.

    Questi e altri problemi di progettazione sistemi di informazione aiuta a risolvere la piattaforma Microsoft .NET.

    Risolvere i problemi di sviluppo di sistemi informativi in ​​.NET

    Un modo per risolvere il problema dell'eterogeneità è sviluppare e mantenere interfacce di programmazione standard che semplifichino il porting delle applicazioni su server di piattaforme diverse. Tuttavia, le applicazioni possono utilizzare database, comunicazioni e altri servizi le cui interfacce non sono componenti di un linguaggio o ambiente di programmazione. Un altro metodo utilizzato dai produttori per risolvere il problema dell'eterogeneità è il supporto di protocolli standard. I sistemi che supportano lo stesso protocollo possono comunicare tra loro, anche se si basano su architetture di macchine e sistemi operativi differenti.

    Tecnologia. NET è un modo per sviluppare e distribuire software che, utilizzando standard ampiamente utilizzati come HTTP e XML, implementa l'interazione del programma e fornisce l'accesso a numerosi servizi software su Internet. La tecnologia include. NET Framework - una piattaforma per lo sviluppo e l'esecuzione di applicazioni che semplifica e accelera lo sviluppo, supporta un vero e proprio orientato agli oggetti programmazione per il Web, elimina molti tipi dei più comuni errori software, fornisce un'API comune per tutte le lingue.

    Cosa costituisce Microsoft .NET

    NET Framework è un framework per lo sviluppo di applicazioni. I suoi componenti principali sono il Common Language Runtime e la libreria di classi. NET Framework Libreria di classi .

    Runtime del linguaggio comune

    Il Common Language Runtime (CLR) è un Common Language Runtime che astrae i servizi del sistema operativo ed esegue le applicazioni gestite, le cui azioni devono essere autorizzate dal CLR.

    Tutto il codice per la piattaforma .NET viene convertito dal codice intermedio CLR in CIL. Pertanto, gli sviluppatori possono facilmente integrare il codice scritto per .NET in diversi linguaggi di programmazione. Tutto ciò che può essere fatto in un linguaggio compatibile con .NET (con rare eccezioni) può essere fatto in qualsiasi altro. Il codice in queste lingue è compilato in codice in una lingua: CIL.

    Il CLR si trova in cima al sistema operativo e fornisce un ambiente virtuale per le applicazioni gestite. Il codice per la piattaforma .NET viene eseguito da CLR o può essere eseguito al di fuori di esso.

    Il codice per il CLR sono i comandi in pseudo-linguaggio macchina CIL (Common Intermediate Language). Queste istruzioni vengono compilate in codice macchina del tipo di processore appropriato su richiesta (just-in-time) in fase di esecuzione. In genere, un metodo viene compilato una volta durante la sua prima chiamata. Il risultato viene quindi memorizzato nella cache per evitare ritardi nelle chiamate ripetute. Il compilatore JIT esegue le ottimizzazioni del codice in modo specifico per il processore su cui è in esecuzione il codice.

    Convertendo le istruzioni CIL in istruzioni del processore, il compilatore JIT esegue la verifica del codice per l'indipendenza dai tipi.

    È quasi impossibile eseguire un comando che acceda a una regione di memoria a cui il comando non ha il permesso di accedere. In un'applicazione gestita, il problema dei puntatori inizializzati erroneamente viene eliminato, è vietato convertire un tipo in qualcosa che non lo è, poiché si tratta di una violazione della sicurezza del tipo. Il CLR non consente di chiamare i metodi con uno stack frame interrotto.

    Le risorse allocate dal codice gestito vengono rilasciate dal Garbage Collector. In altre parole, il programmatore alloca solo la memoria, ma non la dealloca: questo viene fatto dal CLR. Il Garbage Collector tiene traccia di tutti i riferimenti agli oggetti, generato dal programma e distrugge quegli oggetti quando la memoria che occupano è necessaria altrove. Questo risolve il problema delle perdite di memoria nelle applicazioni di codice gestito.

    La verifica del codice è anche il fondamento della capacità di CLR di eseguire più applicazioni all'interno di un singolo processo. Il processo è suddiviso in compartimenti virtuali: domini applicativi ( dominio applicativo ). Ciò migliora l'efficienza dell'utilizzo della memoria assegnata ai processi. I domini delle applicazioni sono altrettanto sicuri dei processi perché i loro confini non possono essere violati dalle applicazioni gestite.

    Libreria di classi .NET Framework (FCL)

    .NET include assembly di librerie di classi. NET Framework Class Library ( FCL ) contenente definizioni per diverse migliaia di tipi, ognuno dei quali fornisce alcune funzionalità. Gli insiemi di tipi "correlati" vengono raccolti in spazi dei nomi separati. Pertanto, lo spazio dei nomi System contiene la classe base Object , da cui derivano tutti gli altri tipi.

    Pertanto, ogni entità in NET è un oggetto con i propri campi e metodi.

    Inoltre, System contiene tipi per numeri interi, caratteri, stringhe, gestione delle eccezioni, I/O della console, un gruppo di tipi per la conversione sicura da un tipo all'altro, formattazione dei dati, generazione di numeri casuali e implementazione operazioni matematiche. I tipi nello spazio dei nomi System vengono utilizzati da tutte le applicazioni.

    Per modificare un tipo FCL esistente, puoi creare il tuo tipo derivato. Puoi creare i tuoi spazi dei nomi. Tutto ciò sarà chiaramente conforme ai principi proposti dalla piattaforma. RETE

    Ecco alcuni degli spazi dei nomi più comuni e breve descrizione i tipi ivi contenuti.

    Spazi dei nomi FCL di base
    Spazio dei nomi Contenuto
    Sistema Tipi di dati fondamentali e classi helper
    System.Collections Tabelle hash, array di variabili e altri contenitori
    System.Data Classi ADO .NET per l'accesso ai dati
    System.Drawing Classi per l'output grafico (GDI+)
    Sistema.IO File e corsi di I/O in streaming
    Sistema.Net Classi con cui lavorare protocolli di rete, ad esempio con HTTP
    Sistema.Riflessione Classi per la lettura e la scrittura di metadati
    System.Runtime.Remoting Classi per applicazioni distribuite
    System.ServiceProcess Classi per la creazione di servizi Windows
    System.Threading Classi per la creazione e la gestione dei thread
    System.Web Classi per il supporto HTTP
    System.Web.Services Classi per lo sviluppo di servizi web
    System.Web.Services. Classi per lo sviluppo di client di servizi Web Protocolli
    System.Web.UI Classi principali utilizzate da ASP .NET
    System.Web.UI. webcontrols Controlli del server ASP .NET
    System.Wndows.Forms Classi per applicazioni GUI
    System.Xml Classi per la lettura e l'immissione di dati XML

    Tutte le applicazioni gestite utilizzano