Oxygene (programmeringsspråk)
Oxygene ("Oxygen") (tidigare känt som Chrome ("Chrome") ) är ett programmeringsspråk utvecklat av RemObjects Software för standarden Common Language Infrastructure . Oxygene-språket skapades från Object Pascal-språket .
Ursprungligen knuten till Delphi.NET , efter att ha förvärvats av Embarcadero , är Oxygene inte helt bakåtkompatibel. Till exempel inkluderar det inte klassbibliotek som är kompatibla med VCL- biblioteket , som kritiseras för dess otillräckligt effektiva implementering, vilket praktiskt taget eliminerade porteringen av äldre applikationer skapade med Delphi eller Kylix och använda VCL-klassbiblioteket
till .NET -plattformen .
RemObjects Software erbjuder full integration med Visual Studio 2003/2005/2008, och sedan juni 2010 - integration med MonoDevelop och Visual Studio 2010. Det finns för närvarande ingen
separat IDE för Oxygene.
Funktioner
Kodexempel
hej världen
namnutrymme Hello World ;
gränssnitt
typ
HelloClass = class
public
class method Main ;
slut ;
genomförande
klassmetod HelloClass . _ huvud ; börjaSystem . _ Konsol . WriteLine ( 'Hej världen!' ) ; slut ;
slut .
Generisk behållare
namnutrymme GenericContainer ;
gränssnitt
typ
TestApp = class
public
class method Main ;
slut ;
Person = klass
offentlig
egendom Förnamn : String ;
egenskap Efternamn : String ;
slut ;
genomförande
använder
System . samlingar . Generisk ;
klassmetod TestApp . _ huvud ; begin var myList := new List < Person >; //typ inferens myList . Lägg till ( ny person ( Förnamn := 'Ivan' , Efternamn := 'Petrov' )) ; min Lista . Lägg till ( ny person ( Förnamn := 'Masha' , Efternamn := 'Petrova' )) ; min Lista . Lägg till ( ny person ( Förnamn := 'Sergey' , Efternamn := 'Petrov' )) ; Konsol . WriteLine ( myList [ 1 ] . FirstName ) ; // Ingen validering krävs Konsol . läslinje ; slut ;
slut .
Generisk klass
namnutrymme GenericMethodTest ;
gränssnitt
typ
GenericMethodTest = static class
public
class method Main ;
privatklassmetod
Swap < T > ( var vänster , höger : T ) ; _ _ klassmetoden DoSwap < T > ( vänster , höger : T ) ; _ slut ;
genomförande
klassmetod GenericMethodTest . _ DoSwap < T > ( vänster , höger : T ) ; börja var a := vänster ; var b := höger ; Konsol . WriteLine ( 'Typ: {0}' , typ av ( T )) ; Konsol . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ; Byt < T > ( var a , var b ) ; Konsol . WriteLine ( '-> a = {0}, b = {1}' , a , b ) ; slut ;
klassmetod GenericMethodTest . _ huvud ; börja var a := 23 ; // typ inferens var b := 15 ; DoSwap < Heltal > ( a , b ) ; // ingen downcasting för Object i denna klass.
var aa := 'abc' ; // typ inferens
var bb := 'def' ;
DoSwap < String > ( aa , bb ) ; // ingen downcasting för Object i denna klass.
DoSwap ( 1.1 , 1.2 ) ; // typ inferens för generiska parametrar
Console . ReadLine () ;
slut ;
klassmetod GenericMethodTest . _ Byt < T > ( var vänster , höger : T ) ; start var temp := vänster ; vänster := höger ; höger := temp ; slut ;
slut .
Programmet ska mata ut:
Typ: System.Int32
-> a = 23, b = 15
-> a = 15, b = 23
Typ: System.String
-> a=abc, b=def
-> a=def, b=abc
Typ: System.Dubbel
-> a = 1,1, b = 1,2
-> a = 1,2, b = 1,1
---
Förbättrad hantering av utvalda uttalanden
case aClassID . Toppen av
'XYZ' : resultat := TMyXYZClass ;
'ABC' : resultat := TMyOtherClass ;
annars skapa nytt undantag ( 'Ogiltigt klass-ID' ) ;
slut ;
case aClass typ av
TMyXYZClass : TMyXYZClass ( aClass ) . Gör något ;
TMyOtherClass : TMyOtherClass ( aClass ) . DoSomethingElse ;
annars uppstår ett nytt undantag ( 'Ogiltig klassreferens' ) ;
slut ;
Se även
Ytterligare källor
Anteckningar