Oxygene (limbaj de programare)
Oxygene ("Oxygen") (cunoscut anterior ca Chrome ("Chrome") ) este un limbaj de programare dezvoltat de RemObjects Software pentru standardul Common Language Infrastructure . Limbajul Oxygene a fost creat din limbajul Object Pascal .
Inițial legat de Delphi.NET , după ce a fost achiziționat de Embarcadero , Oxygene nu este complet compatibil cu versiunea inversă. De exemplu, nu include biblioteci de clase care sunt compatibile cu biblioteca VCL , care este criticată pentru implementarea sa insuficient de eficientă, care practic a eliminat portarea aplicațiilor moștenite create cu Delphi sau Kylix și utilizarea bibliotecii de clase VCL
pe platforma .NET .
RemObjects Software oferă integrare completă cu Visual Studio 2003/2005/2008, iar din iunie 2010 - integrare cu MonoDevelop și Visual Studio 2010. În prezent, nu există un
IDE separat pentru Oxygene.
Caracteristici
- Integrare CLI .
- Bazat pe Object Pascal cu multe caracteristici noi adăugate.
- Suport pentru mecanismul „contractelor de clasă” pentru a restricționa datele similare cu programarea contractelor .
- Definirea variabilelor direct în interiorul unui bloc de cod.
- Tipuri anonime .
- Metode anonime și delegați .
- Metode asincrone și lucru cu fluxuri.
- Calcul Lambda .
- Suport .NET 2.0.
- Tipuri și metode generice . (numai pentru .NET 2.0)
- Tipuri nulabile . (numai pentru .NET 2.0)
- Iteratori .
- Clase parțiale (pentru .NET 1.1 și 2.0)
- Metode de extindere
- Suport LINQ .
- Tip inferență .
- Proprietăți și evenimente virtuale.
- Suport îmbunătățit pentru evenimente cu mai mulți handlere (evenimente multicast).
- Inițializatoare variabile în interiorul codului.
- Suport îmbunătățit pentru buclele for .
- Utilizarea colonului pentru siguranța tipului.
- Suport în sistemele Windows pentru construirea de aplicații client ( Windows Presentation Foundation ).
- Suport complet pentru cadre alternative create pentru Visual Studio (consultați Portable.NET și IDE-uri Mono )
Exemple de cod
salut lumea
namespace Hello World ;
interfata
tip
HelloClass = clasă
public
class metoda Main ;
sfârşitul ;
implementare
metoda clasei HelloClass . principal ;
startSystem
_ _ Consola . WriteLine ( „Bună ziua, lume!” ) ;
sfârşitul ;
sfârşitul .
Container generic
namespace GenericContainer ;
interfata
tip
TestApp = clasă
public
class method Main ;
sfârşitul ;
Persoană = clasă
proprietate publică
Prenume : String ; proprietate LastName : String ; sfârşitul ;
implementare
folosește
System . colectii . generic ;
metoda clasei TestApp . principal ;
begin
var myList := listă nouă < Persoană >; //deducere de tip myList . Adăugați ( Persoană nouă ( Prenume := 'Ivan' , Nume := 'Petrov' )) ; lista mea . Adăugați ( Persoană nouă ( Prenume := 'Masha' , Nume := 'Petrova' )) ; lista mea . Adăugați ( Persoană nouă ( Prenume := 'Sergey' , Nume := 'Petrov' )) ; Consola . WriteLine ( myList [ 1 ] . Prenume ) ; // Nu este necesară validarea Consolă . readline ; sfârşitul ;
sfârşitul .
Clasa generică
namespace GenericMethodTest ;
interfata
tip
GenericMethodTest = clasa statica metoda clasei
publice
Main ; metoda clasei private Swap < T > ( var stânga , dreapta : T ) ; metoda clasei DoSwap < T > ( stânga , dreapta : T ) ; sfârşitul ;
implementare
metoda clasei GenericMethodTest . DoSwap < T > ( stânga , dreapta : T ) ;
începe
var a := stânga ;
var b := dreapta ;
Consola . WriteLine ( 'Tip: {0}' , tip de ( T )) ;
Consola . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ;
Swap < T > ( var a , var b ) ;
Consola . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ;
sfârşitul ;
metoda clasei GenericMethodTest . principal ;
începe
var a := 23 ; // tip inference
var b := 15 ;
DoSwap < Integer > ( a , b ) ; // nicio reducere pentru Object din această clasă.
var aa := 'abc' ; // tip inference
var bb := 'def' ;
DoSwap < String > ( aa , bb ) ; // nicio reducere pentru Object din această clasă.
DoSwap ( 1.1 , 1.2 ) ; // tip deducere pentru parametrii generici
Console . ReadLine () ;
sfârşitul ;
metoda clasei GenericMethodTest . Schimbați < T > ( var stânga , dreapta : T ) ;
start
var temp := left ;
stânga := dreapta ;
dreapta := temp ;
sfârşitul ;
sfârşitul .
Programul ar trebui să scoată:
Tip: System.Int32
-> a = 23, b = 15
-> a = 15, b = 23
Tip: System.String
-> a=abc, b=def
-> a=def, b=abc
Tip: sistem.dublu
-> a = 1,1, b = 1,2
-> a = 1,2, b = 1,1
---
Gestionare îmbunătățită a instrucțiunilor select
caz aClassID . În sus din „XYZ” : rezultat : = TMyXYZClass ; „ABC” : rezultat := TMyOtherClass ; altfel ridică o nouă excepție ( „ID de clasă nevalid” ) ; sfârşitul ;
caz aClass tip de
TMyXYZClass : TMyXYZClass ( aClass ) . Fă ceva ;
TMyOtherClass : TMyOtherClass ( aClass ) . DoSomethingElse ;
altfel ridică o nouă excepție ( 'Referință de clasă nevalidă' ) ;
sfârşitul ;
Vezi și
Surse suplimentare
Note