🔥 CLR library

clr — это пакет для доступа к типам и пространствам имен .NET Framework. Пакет связывает вызовы с хост-приложением и классами .NET Framework. ВНИМАНИЕ: Работает ТОЛЬКО с включенным "Allow unsafe scripts"

CLR поддерживает:

  • Статические методы

  • Методы экземпляра

  • Перегруженные методы

  • Конструкторы

  • Свойства

  • Типы

  • Подтипы

  • События

  • Генерики

Немного примеров

local sys = clr.System;

Данный код создает динамический экземпляр типа для пространства имен System и присваивает этот новый тип локальной переменной sys. Оба следующих вызова эквивалентны:

local stringbuilder = sys.Text.StringBuilder;
local stringbuilder = clr.System.Text.StringBuilder; -- тот же результат

Используйте эту переменную, для доступа к типу StringBuilder.

Чтобы создать новый объект из типа, вызовите тип как функцию. Это вызовет конструктор и создаст экземпляр.

local sb = StringBuilder('text');
local sb1 = clr.System.Text.StringBuilder('test'); -- тот же результат

Если тип является обобщенным, используйте индексный доступ для создания не обобщенного класса.

local list_object = clr.System.Collections.Generic.List[clr.System.Object]();
local list_generic = clr.System.Collections.Generic.List;
local list_string = ListGeneric[clr.System.String]();
local list_string_type = ListGeneric[clr.System.String];
local list_string2 = ListStringType();

💡 Совет: Используйте const для часто используемых типов, чтобы улучшить читаемость и производительность кода.

Лучший способ сократить типы — использовать ключевое слово const. Потому что оно не создает накладных расходов во время выполнения, оно известно только во время компиляции. Осторожно, clr не нужен.

const list_of_objects typeof System.Collections.Generic.List[System.Object];
local new_list = list_of_objects()
new_list.Add("hello world!")
log(new_list[1])

Если вы объедините это с явной типизацией, синтаксический анализатор вообще не будет выполнять динамические вызовы, и время выполнения этого скрипта будет таким же, как, например, у метода C#.

const StringBuilder typeof System.Text.StringBuilder();
local sb : StringBuilder = StringBuilder();
sb:Append('Hallo '):Append('Welt!');
return sb:ToString();

Last updated