Re[10]: Приоритет вызова перегруженных методов
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.06.16 06:51
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:


S>> Не читаешь ты. Прежде чем отправить в натив объект сохраняется в статическом массиве массиве. Жить он будет пока его из массива не удалят.

S>Ну, т.е. как и говорил, получаем или утечку объектов на managed-стороне, или адскую магию с рефкаунтингом (по, сути, переизобретение IUnknown).
S>Для сложных графов с изменяемыми свойствами-объектами тесты как минимум надо сделать

Опять не читаешь. На стороне 1С есть подсчет ссылок и Done при разрушении.
Кроме того могу выгрузить домен.

S>>>Вообще-то неизвестна, в рантайме определяется. Достаточно только набора значений.

S>> DLR то как раз статический. Но он мне все равно нужен для использования DynamicObject

S>Вот народ я с вас фигею. Вам дают карту с сокровищами, а вы требуете чтоб вас экспрессом минуя все три тома приключений доставили прямо в термал спа "Золотое кольцо" (магнитик на холодильник с Балрогом в подарок). Где ваша это... мазохизм? Стремление усложнить жизнь? Граблефилия? А, авантюризм, во!


S>Держите, скучный вы человек:

S>
S>        private static CallSite<Action<CallSite, Type, object, object>> callSite;

S>        static void Main(string[] args)
S>        {
S>            CallADynamic(1, 2);
S>            CallADynamic(null, null);
S>            CallADynamic(null, new object());
S>        }

S>        private static void CallADynamic(params object[] data)
S>        {
S>            if (callSite == null)
S>            {
S>                callSite =
S>                    CallSite<Action<CallSite, Type, object, object>>.Create(
S>                        Binder.InvokeMember(
S>                            CSharpBinderFlags.ResultDiscarded,
S>                            "CallA", null, typeof(Program), new CSharpArgumentInfo[]
S>                            {
S>                                CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.IsStaticType, null),
S>                                CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
S>                                CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)
S>                            }));
S>            }
S>            callSite.Target(callSite, typeof(Program), data[0], data[1]);
S>        }

S>        static void CallA(params int[] args)
S>        {
S>            Console.WriteLine("params");
S>        }

S>        static void CallA(object a, object b)
S>        {
S>            Console.WriteLine("objects");
S>        }

S>        static void CallA(object a, string b)
S>        {
S>            Console.WriteLine("object+string");
S>        }
S>


S>Как допилить до вызова произвольного метода — сами-сами. Иначе вообще никакого удовольствия не будет.


S>
  P.S.


Спасибо! Веселый Вы наш. Но возникают вопросы.

Я так понимаю, что можно создать Кучу CallSite<Action<CallSite, Type, object, object>>
По количеству аргументов и использовать их?
И получается для каждого вызова я должен создавать свой callSite по имени метода, типу и количеству агрументов.
Сейчас проверю кстати код на CoreClr.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 08.06.2016 7:28 Serginio1 . Предыдущая версия . Еще …
Отредактировано 08.06.2016 7:07 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.