Re[10]: Новости C#13. params
От: _FRED_ Черногория
Дата: 04.07.24 08:26
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>> Вот у тебя есть имя метода и параметры. По этим данным надо найти реальный метод.

S>>>.Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед
_FR>>Спасибо за очень понятное объяснение. Конечно, это всё объясняет.
S>Да в целом-то всё понятно. Вот у нас есть некий object, а ещё — string methodName, плюс object[] arguments.
S>И хочется воспроизвести все нюансы перегрузки, реализованные в C#.
S>Внезапно выясняется, что когда мы видим в коде foo.bar(baz1, baz2), то там происходит много всяких подкапотных интересностей.

Да, там много сложностей и действительно задача "в самом общем виде" не самая простая. Но 1) заметно проще, чем у компилятора и 2) думаю, если не хочется самому это всё выписывать, можно воспользоваться тем, что компилятор создаёт для вызова метода с dynamic-параметрами, типа такого:

S>using System;
                    
S>public class Program
S>{
S>    public class Foo
S>    {
S>       public string bar(object a, string b) => "1";
S>       public string bar(int a, object b) => "2";
S>       public string bar(object a, object b) => "3";
S>       public string bar<A>(A a, string b) => "4";
S>       public string bar<B>(int a, B b) => "5";
S>       public string bar(params object[] xs) => "6";
S>       public string bar(int a, params string[] b) => "7";
S>    }

      public class Foo2
      {
         public static string bar(Foo foo, dynamic a, dynamic b) => foo.bar(a, b);
      }

S>    public static void Main()
S>    {
S>        var foo = new Foo();
S>        Console.WriteLine(Foo2.bar(foo, 42, "42")); // Вызываем "наш" метод заместо искомого
S>    }
S>}
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.