Выпущена бета-версия Elisy .Net Bridge 4 для работы с .Net framework 4.0 из 1C 8.2.
.Net framework 4 включает в себя много нововведений. Большая часть функциональности доступна 1С-разработчикам через продукт .Net Bridge. Более подробно можно узнать из публикаций:
Что касается нововведений .Net 4.0 полезных для 1С 8.2, мне удалось поработать и оценить только DLR (Dynamic Language Runtime) и PLINQ (Parallel Extensions).
DLR вводит ключевое слово dynamic и позволяет принимать в .Net-метод любой объект 1С и элегантно обращаться к его свойствам и методам следующим образом:
public void ProcessRow1C(dynamic model, dynamic form, int i)
{
var row = model.Клиенты.Получить(i);
form.ОтправитьПисьмо(row);
}
Раньше это делалось через определение параметра как System.Object и обращение к свойствам и методам 1С-объекта через вызов InvokeMember.
PLINQ (Parallel LINQ) позволяет в один метод распараллелить вычисления. Делается это из C# примерно таким образом:
public void SendAll(dynamic model, dynamic form)
{
int count = model.Клиенты.Количество();
var indexes = Enumerable.Range(0, count);
//Параллельная обработка через .Net
indexes.AsParallel().ForAll((i) => ProcessRow(model, i));
}
По сравнению с альфа-версией .Net Bridge в 4й бета-версии появилась возможность включать «строгий» режим преобразования типов. Строгий режим позволяет управлять простыми типами .Net-объектов из кода 1С:Предприятие. За установку режима отвечает свойство StrictMode.
- Описание:
- Свойство управляет режимом неявного преобразования типов. Если Ложь, то все возвращаемые .Net-типы будут автоматически преобразовываться в соответствующие 1С-типы. Если Истина, то все возвращаемые .Net-типы попадают в 1С:Предприятие как объекты. Чтобы явно получить 1С-значение простого типа (например, число, строка, булево, дата), нужно обратиться к свойству _1CValue каждого объекта.
- Пример:
-
- net.SetStatic("Elisy.NetBridge.Environment", "StrictMode", true);
- double = net.CallStatic("System.Convert", "ToDouble", 10.1);
- Message(double.GetType().FullName._1CValue + double._1CValue);
- decimal = net.CallStatic("System.Convert", "ToDecimal", double);
- Message(decimal.GetType().FullName._1CValue + decimal._1CValue);
- int32 = net.CallStatic("System.Convert", "ToInt32", double);
- Message(int32.GetType().FullName._1CValue + int32._1CValue);
- float = net.CallStatic("System.Convert", "ToSingle", double);
- dateTime = net.CallStatic("System.Convert", "ToDateTime", Date('20110301125959'));
- net.SetStatic("Elisy.NetBridge.Environment", "StrictMode", false);