Callable
Значение C# для вызова метода или .NET-делегата через API движка.
Структура C#, представляющая вызываемый метод или делегат. Callable.From(...) создаёт вариант для .NET-делегата; конструктор Callable(target, method) хранит объект и имя метода. Call(...) передаёт аргументы через Variant, поэтому их число и типы должны соответствовать вызываемому методу.
Представления отличаются: у делегата может быть заполнен Delegate при пустом Target, а у варианта с объектом — Target и Method при пустом Delegate. Одно поле не является универсальной проверкой возможности вызова. Само создание значения не доказывает существование метода или время жизни цели.
В C# Callable не преобразуется в bool. Значение default(Callable) также не является ссылкой null. Для обычной подписки на C#-событие используйте синтаксис событий; Callable нужен там, где API ожидает этот тип.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
CallableКонструктор
public Callable(ReckfellObject target, StringName method);Сохраняет ссылку на target и имя method, не вызывая метод. Конструктор не проверяет существование метода и не гарантирует время жизни нативного объекта. Для делегата или лямбды используйте Callable.From. Имя сохраняется как та же управляемая оболочка StringName: не освобождайте её, пока Callable используется.
| Имя | Тип | По умолчанию |
|---|---|---|
target | ReckfellObject | — |
method | StringName | — |
targetЖивой объект, метод которого будет вызван. Callable не заменяет управление временем жизни объекта.
methodТочное зарегистрированное имя метода; регистр значим. Для C#-метода используйте nameof либо доступную MethodName-константу.
Свойства4
DelegateСвойство
public Delegate Delegate { get; }Возвращает сохранённый .NET-делегат у From/CreateWithUnsafeTrampoline. У представления «объект + метод» и default(Callable) — null. Наличие делегата не проверяет время жизни захваченных нативных объектов; отсутствие делегата не делает объектно-методный Callable недействительным.
MethodСвойство
public StringName Method { get; }Возвращает сохранённую оболочку имени у представления «объект + метод». У Callable.From и default(Callable) может быть null. Это не имя, вычисленное из Delegate.Method. Возвращаемая ссылка заимствована: не освобождайте её отдельно, пока Callable используется.
TargetСвойство
public ReckfellObject Target { get; }Для конструктора Callable(target, method) возвращает сохранённый объект. Для делегата — Delegate.Target, только если это ReckfellObject; у статического делегата или обычного managed-замыкания может быть null. Это не универсальная проверка возможности вызова и не гарантия живого нативного объекта. Свойство не передаёт владение объектом.
TrampolineСвойство
public unsafe delegate*<object, Reckfell.NativeInterop.NativeVariantPtrArgs, out Reckfell.NativeInterop.reckfell_variant, void> Trampoline { get; }Низкоуровневый managed-указатель, вызывающий сохранённый Delegate через нативные Variant-аргументы. У From он создаётся SDK, у CreateWithUnsafeTrampoline задаётся вызывающим кодом. Для обычного вызова используйте Call. Null-указатель встречается у представления «объект + метод»; свойство не является универсальной проверкой валидности.
Методы25
Call2 перегрузки
public Variant Call(params Variant[] args);Синхронно вызывает сохранённый метод или делегат. Аргументы передаются как Variant и преобразуются SDK к ожидаемым типам; это не обычная проверяемая компилятором C#-сигнатура вызова. Заранее обеспечьте нужное число аргументов, их допустимые типы и живой объект назначения.
Для Action результат имеет тип Variant.Type.Nil; у Func результат преобразуется в Variant. Nil не доказывает успех: ошибки вызова или исключения делегата могут попасть в журнал. В текущем мосте нельзя рассчитывать, что каждое такое исключение будет повторно выброшено вызывающему C#-коду.
В примере Twice(21) возвращает 42. Локальный аргумент и возвращённый Variant имеют свои using.
using System.Threading.Tasks;
using Reckfell;
public static class CallableSignalExamples
{
public static int Twice(int value)
{
var callback = Callable.From<int, int>(static number => number * 2);
using var argument = Variant.From(value);
using var result = callback.Call(argument);
return result.AsInt32();
}
public static void SetLabelLater(Label label, string text)
{
var callback = Callable.From<string>(value =>
{
if (ReckfellObject.IsInstanceValid(label)) label.Text = value;
});
using var argument = Variant.From(text);
callback.CallDeferred(argument);
}
public static async Task WaitNextProcess(EntityTree tree)
{
Variant[] arguments = await new Signal(tree, EntityTree.SignalName.ProcessFrame);
foreach (var argument in arguments) argument.Dispose();
}
}| Имя | Тип | По умолчанию |
|---|---|---|
args | Variant[] | — |
argsАргументы по порядку параметров метода или делегата. Для Callable.From их число должно точно совпадать с числом входов Action/Func; пустой набор подходит функции без аргументов.
VariantРезультат как принадлежащий вызывающему коду Variant; освобождайте его после чтения. Void/Action даёт Nil, но Nil может также сопровождать ошибку.
public Variant Call(ReadOnlySpan<Variant> args);Синхронно вызывает сохранённый метод или делегат. Аргументы передаются как Variant и преобразуются SDK к ожидаемым типам; это не обычная проверяемая компилятором C#-сигнатура вызова. Заранее обеспечьте нужное число аргументов, их допустимые типы и живой объект назначения.
Для Action результат имеет тип Variant.Type.Nil; у Func результат преобразуется в Variant. Nil не доказывает успех: ошибки вызова или исключения делегата могут попасть в журнал. В текущем мосте нельзя рассчитывать, что каждое такое исключение будет повторно выброшено вызывающему C#-коду.
В примере Twice(21) возвращает 42. Локальный аргумент и возвращённый Variant имеют свои using.
using System.Threading.Tasks;
using Reckfell;
public static class CallableSignalExamples
{
public static int Twice(int value)
{
var callback = Callable.From<int, int>(static number => number * 2);
using var argument = Variant.From(value);
using var result = callback.Call(argument);
return result.AsInt32();
}
public static void SetLabelLater(Label label, string text)
{
var callback = Callable.From<string>(value =>
{
if (ReckfellObject.IsInstanceValid(label)) label.Text = value;
});
using var argument = Variant.From(text);
callback.CallDeferred(argument);
}
public static async Task WaitNextProcess(EntityTree tree)
{
Variant[] arguments = await new Signal(tree, EntityTree.SignalName.ProcessFrame);
foreach (var argument in arguments) argument.Dispose();
}
}| Имя | Тип | По умолчанию |
|---|---|---|
args | ReadOnlySpan<Variant> | — |
argsАргументы по порядку параметров метода или делегата. Для Callable.From их число должно точно совпадать с числом входов Action/Func; пустой набор подходит функции без аргументов.
VariantРезультат как принадлежащий вызывающему коду Variant; освобождайте его после чтения. Void/Action даёт Nil, но Nil может также сопровождать ошибку.
CallDeferred2 перегрузки
public void CallDeferred(params Variant[] args);Ставит вызов в очередь отложенного выполнения и сразу возвращает управление. Аргументы копируются в очередь; локальные Variant после постановки можно освободить. Результат метода здесь получить нельзя.
Очередь обрабатывается во время idle/flush, а не через гарантированное число кадров и не как таймер. Не создавайте бесконечную цепочку, где каждый отложенный вызов снова ставит себя в очередь. До фактического выполнения объект может быть удалён: пример SetLabelLater у Call проверяет IsInstanceValid перед изменением Label.
| Имя | Тип | По умолчанию |
|---|---|---|
args | Variant[] | — |
argsАргументы будущего вызова в порядке параметров. Проверяйте число и преобразуемость типов заранее.
public void CallDeferred(ReadOnlySpan<Variant> args);Ставит вызов в очередь отложенного выполнения и сразу возвращает управление. Аргументы копируются в очередь; локальные Variant после постановки можно освободить. Результат метода здесь получить нельзя.
Очередь обрабатывается во время idle/flush, а не через гарантированное число кадров и не как таймер. Не создавайте бесконечную цепочку, где каждый отложенный вызов снова ставит себя в очередь. До фактического выполнения объект может быть удалён: пример SetLabelLater у Call проверяет IsInstanceValid перед изменением Label.
| Имя | Тип | По умолчанию |
|---|---|---|
args | ReadOnlySpan<Variant> | — |
argsАргументы будущего вызова в порядке параметров. Проверяйте число и преобразуемость типов заранее.
CreateWithUnsafeTrampolineCallable
public static unsafe Callable CreateWithUnsafeTrampoline(Delegate @delegate, delegate*<object, Reckfell.NativeInterop.NativeVariantPtrArgs, out Reckfell.NativeInterop.reckfell_variant, void> trampoline);Низкоуровневое создание Callable для собственного managed-trampoline. Для обычных Action/Func используйте From: он сам проверяет число аргументов и выполняет Variant-преобразования.
Trampoline получает делегат как object, представление нативных аргументов и out reckfell_variant для результата. Он обязан проверить входы, привести делегат к нужному типу и инициализировать результат во всех ветках; для отсутствующего результата используется default. Возвращаемое нативное значение передаётся мосту во владение. Сигнатура managed-указателя должна точно совпадать с SDK, включая out; это не указатель с unmanaged ABI.
| Имя | Тип | По умолчанию |
|---|---|---|
delegate | Delegate | — |
trampoline | delegate*<object, Reckfell.NativeInterop.NativeVariantPtrArgs, out Reckfell.NativeInterop.reckfell_variant, void> | — |
delegateДелегат, который trampoline умеет привести и вызвать; не null.
trampolineДействительный managed-указатель точной сигнатуры SDK; третий параметр — out reckfell_variant.
CallableЗначение Callable с данным делегатом и указателем. Создание не подтверждает безопасность собственного trampoline.
From20 перегрузок
public static Callable From(Action action);Создаёт Callable из Action с числом входных аргументов 0. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0>(Action<T0> action);Создаёт Callable из Action с числом входных аргументов 1. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<TResult>(Func<TResult> func);Создаёт Callable из Func с числом входных аргументов 0. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5, T6, T7, T8, TResult>(Func<T0, T1, T2, T3, T4, T5, T6, T7, T8, TResult> func);Создаёт Callable из Func с числом входных аргументов 9. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, T2, T3, T4, T5, T6, T7, T8, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1>(Action<T0, T1> action);Создаёт Callable из Action с числом входных аргументов 2. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, TResult>(Func<T0, TResult> func);Создаёт Callable из Func с числом входных аргументов 1. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2>(Action<T0, T1, T2> action);Создаёт Callable из Action с числом входных аргументов 3. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1, T2> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, TResult>(Func<T0, T1, TResult> func);Создаёт Callable из Func с числом входных аргументов 2. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3>(Action<T0, T1, T2, T3> action);Создаёт Callable из Action с числом входных аргументов 4. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1, T2, T3> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, TResult>(Func<T0, T1, T2, TResult> func);Создаёт Callable из Func с числом входных аргументов 3. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, T2, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4>(Action<T0, T1, T2, T3, T4> action);Создаёт Callable из Action с числом входных аргументов 5. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1, T2, T3, T4> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, TResult>(Func<T0, T1, T2, T3, TResult> func);Создаёт Callable из Func с числом входных аргументов 4. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, T2, T3, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5>(Action<T0, T1, T2, T3, T4, T5> action);Создаёт Callable из Action с числом входных аргументов 6. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1, T2, T3, T4, T5> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, TResult>(Func<T0, T1, T2, T3, T4, TResult> func);Создаёт Callable из Func с числом входных аргументов 5. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, T2, T3, T4, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5, T6>(Action<T0, T1, T2, T3, T4, T5, T6> action);Создаёт Callable из Action с числом входных аргументов 7. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1, T2, T3, T4, T5, T6> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5, TResult>(Func<T0, T1, T2, T3, T4, T5, TResult> func);Создаёт Callable из Func с числом входных аргументов 6. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, T2, T3, T4, T5, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5, T6, T7>(Action<T0, T1, T2, T3, T4, T5, T6, T7> action);Создаёт Callable из Action с числом входных аргументов 8. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1, T2, T3, T4, T5, T6, T7> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5, T6, TResult>(Func<T0, T1, T2, T3, T4, T5, T6, TResult> func);Создаёт Callable из Func с числом входных аргументов 7. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, T2, T3, T4, T5, T6, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5, T6, T7, T8>(Action<T0, T1, T2, T3, T4, T5, T6, T7, T8> action);Создаёт Callable из Action с числом входных аргументов 9. При Call передавайте ровно столько Variant в том же порядке. Все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат вызова Action — Nil.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
action | Action<T0, T1, T2, T3, T4, T5, T6, T7, T8> | — |
actionНепустой делегат с указанными входами без возвращаемого значения.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.
public static Callable From<T0, T1, T2, T3, T4, T5, T6, T7, TResult>(Func<T0, T1, T2, T3, T4, T5, T6, T7, TResult> func);Создаёт Callable из Func с числом входных аргументов 8. При Call передавайте ровно столько Variant в том же порядке. TResult и все типы аргументов должны поддерживаться Variant-преобразованиями SDK; результат Func преобразуется в Variant.
Это представление делегата, а не пары «объект + имя». Замыкание хранит захваченные данные и видит их последующие изменения; оно не делает захваченный нативный объект бессмертным. Для повторных подписок сохраняйте обработчик и управляйте отпиской отдельно.
| Имя | Тип | По умолчанию |
|---|---|---|
func | Func<T0, T1, T2, T3, T4, T5, T6, T7, TResult> | — |
funcНепустой делегат с указанными входами и возвращаемым TResult.
CallableЗначение Callable с сохранённым делегатом и trampoline для указанной сигнатуры.