Что нового
  • Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Remobjects Oxygene

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,398
Баллы
155
Oxygene («Кислород») (ранее известный как Chrome («Хром»)) — язык программирования, разработанный компанией RemObjects Software для стандарта Common Language Infrastructure. Язык Oxygene был создан на основе языка Object Pascal.

Первоначально привязанный к Delphi.NET, после приобретения прав компанией Embarcadero, Oxygene не обладает полной обратной совместимостью. Так, например, в его состав не входят библиотеки классов, совместимые с VCL, что практически исключает перенос на платформу .NET унаследованных приложений, созданных с помощью Delphi или Kylix и использовавших библиотеку классов VCL.

Компания «RemObjects Software» предлагает полную интеграцию с Visual Studio 2003/2005/2008, а с июня 2010 года - интеграцию с MonoDevelop и Visual Studio 2010. Отдельной IDE для Oxygene на данный момент не существует.


Особенности
  • интеграция с CLI.
  • Основан на Object Pascal с добавлением множества новых возможностей.
  • Поддержка механизма «контракты для классов» («class contracts») — механизм ограничения на данные, схожий с контрактным программированием.
  • Определение переменных непосредственно внутри блока кода.
  • Анонимные типы.
  • Анонимные методы и делегаты.
  • Асинхронные методы и работа с потоками.
  • Лямбда-исчисление.
  • Поддержка .NET 2.0.
  • Обобщённые типы и методы. (только для .NET 2.0)
  • Обнуляемые типы (Nullable types). (только для .NET 2.0)
  • Итераторы.
  • Частичные классы (для .NET 1.1 и 2.0)
  • Методы-расширения (Extension methods).
  • Поддержка LINQ.
  • Вывод типов.
  • Виртуальные свойства и события.
  • Улучшенная поддержка событий с несколькими обработчиками (multicast events).
  • Инициализаторы переменных внутри кода.
  • Улучшенная поддержка циклов for.
  • Знак двоеточия для безопасной работы с типами.
  • Поддержка WPF.
  • Полная поддержка альтернативных фреймворков, созданных для Visual Studio (смотри Portable.NET и Mono (среда разработки))


    Hello World
Код:
    namespace HelloWorld;
     
    interface

    type
      HelloClass = class
      public
        class method Main;
      end;
     
    implementation

    class method HelloClass.Main;
    begin
      System.Console.WriteLine('Hello World!');
    end;
     
    end.
Обобщённый контейнер
Код:
    namespace GenericContainer;

    interface

    type
      TestApp = class
      public
        class method Main;
      end;
     
      Person = class
      public
        property FirstName: String;
        property LastName: String;     
      end;       

    implementation

    uses
      System.Collections.Generic;

    class method TestApp.Main;
    begin
      var myList := new List<Person>; //вывод типов
      myList.Add(new Person(FirstName := 'Иван', LastName := 'Петров')); 
      myList.Add(new Person(FirstName := 'Маша', LastName := 'Петрова'));
      myList.Add(new Person(FirstName := 'Сергей', LastName := 'Петров')); 
      Console.WriteLine(myList[1].FirstName);  //Проверка не требуется
      Console.ReadLine;       
    end;

    end.
Обобщённый класс
Код:
    namespace GenericMethodTest;

    interface

    type
    GenericMethodTest = static class
    public
      class method Main;
    private
      class method Swap<T>(var left, right : T);
      class method DoSwap<T>(left, right : T);
    end;

    implementation

    class method GenericMethodTest.DoSwap<T>(left, right : T);
    begin
      var a := left;
      var b := right;
      Console.WriteLine('Type: {0}', typeof(T));
      Console.WriteLine('-> a = {0}, b = {1}', a , b);
      Swap<T>(var a, var b);
      Console.WriteLine('-> a = {0}, b = {1}', a , b);
    end;

    class method GenericMethodTest.Main;
    begin
      var a := 23;// вывод типа
      var b := 15;
      DoSwap<Integer>(a, b); // никаких приведений базового типа к дочернему (downcasting) для Object в этом классе.

      var aa := 'abc';// вывод типа
      var bb := 'def';
      DoSwap<String>(aa, bb); // никаких приведений базового типа к дочернему (downcasting) для Object в этом классе.

      DoSwap(1.1, 1.2); // вывод типа для обобщённых параметров
      Console.ReadLine();
    end;

    class method GenericMethodTest.Swap<T>(var left, right : T);
    begin
      var temp := left;
      left:= right;
      right := temp;
    end;

    end.


Программа должна вывести:
Type: System.Int32
-> a = 23, b = 15
-> a = 15, b = 23
Type: System.String
-> a = abc, b = def
-> a = def, b = abc
Type: System.Double
-> a = 1,1, b = 1,2
-> a = 1,2, b = 1,1
---
Улучшенная обработка операторов выбора
Код:
case aClassID.ToUpper of
   'XYZ': result := TMyXYZClass;
   'ABC': result := TMyOtherClass;
else raise new Exception('Неправильный ID класса');
end;


Код:
case aClass type of
   TMyXYZClass: TMyXYZClass(aClass).DoSomething;
   TMyOtherClass: TMyOtherClass(aClass).DoSomethingElse;
else raise new Exception('Неправильная ссылка на класс');
end;

Скачать:

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх