🔥 CLR library
clr — это пакет для доступа к типам и пространствам имен .NET Framework. Пакет связывает вызовы с хост-приложением и классами .NET Framework. ВНИМАНИЕ: Работает ТОЛЬКО с включенным "Allow unsafe scripts"
CLR
поддерживает:
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
для часто используемых типов, чтобы улучшить читаемость и производительность кода.Лучший способ сократить типы — использовать ключевое слово const
. Потому что оно не создает накладных расходов во время выполнения, оно известно только во время компиляции. Осторожно, clr
не нужен.
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