Re[9]: Новости C#13. params
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.06.24 19:52
Оценка: 14 (1) +2
Здравствуйте, _FRED_, Вы писали:

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


_FR>>>>>System.Collections.IEnumerable, например, тоже поддержали, что могли бы сделать и с самого начала.

S>>>>На самом деле это еще тот геморрой при рефлексии обрабатывать все варианты. Да еще разные варианты с количество перегрузок методов.
_FR>>>Какие варианты и рефлексию вы имеете в виду? Можете пример показать? Как это связано с первой, второй или 13-той версией языка?

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

S>>.Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед

_FR>Спасибо за очень понятное объяснение. Конечно, это всё объясняет.

Да в целом-то всё понятно. Вот у нас есть некий object, а ещё — string methodName, плюс object[] arguments.
И хочется воспроизвести все нюансы перегрузки, реализованные в C#.
Внезапно выясняется, что когда мы видим в коде foo.bar(baz1, baz2), то там происходит много всяких подкапотных интересностей.
Начиная от того, что результат зависит не от фактических типов baz1 и baz2, а от формальных. А вот для foo важен как формальный тип, так и фактический.
Даже если выбросить из рассмотрения extension методы, ограничившись только экземплярными, то всё равно там чёрт ногу сломит. Далеко не всякий сходу скажет, что выведет такой код:

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

    public static void Main()
    {
        var foo = new Foo();
        Console.WriteLine(foo.bar(42, "42"));
    }
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.