C # 7.0. Перегрузки и новый синтаксис возврата кортежей. - PullRequest
0 голосов
/ 28 сентября 2018

Просто быстрый вопрос о перегрузке методов с использованием нового синтаксиса кортежа C # 7.0.

Я создал две перегрузки функций.Упрощенно, они имеют вид:

public Boolean TheFunction( string p_in_value )
    { 
    ... 
    return true;
    }

и

public ( Boolean Result, long SomeID ) TheFunction( string p_in_value )
    {
    ...
    return ( true, _found_id );
    }

Теперь я бы сказал, что, поскольку их соответствующие вызовы будут иметь форму (ы)

_my_bool = TheFunction( "" );

и

( _my_bool, _my_long ) = TheFunction( "" );

, что компилятор должен иметь возможность различать два, тем самым выполняя основное требование, что при создании перегрузок нужно иметь возможность определить, какую версию вы хотитевызов.

Теперь я прочитал в другом вопросе, что еще в C # 3.0 сигнатура метода не включает его тип возвращаемого значения, но, конечно, это больше не должно применяться, поскольку у меня есть функции в других местах, где нет проблем:

public long ReadHive(string p_section, string p_setting, long p_default) {...}
public bool ReadHive(string p_section, string p_setting, bool p_default) {...}

Тем не менее, я получаю синтаксическую ошибку «Программа» уже определяет элемент с именем «TheFunction» с такими же типами параметров ».

Так что, если я не просто смотрю нанеправильно, похоже, что с этим новым синтаксисом возврата кортежа возвращаемые типы не играют никакой роли в различении одной версии от другой, что выглядит довольно недальновидно.

Итак, мой вопрос - ищу ли яне в том направлении, и это должно быть возможно, или мне не повезло, и новый синтаксис в этом отношении просто не подходит?Или я еще более неправ, и мне не хватает какой-то фундаментальной разницы между тем, как обрабатываются мои методы «TheFunction», и тем, как обрабатываются мои методы «ReadHive»?

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

В примере вы добавляете:

public long ReadHive(string p_section, string p_setting, long p_default) {...}
public bool ReadHive(string p_section, string p_setting, bool p_default) {...}

функции отличаются по параметрам - третий параметр long по сравнению с bool.

вы не можете различить функции только по типу возвращаемого значения :(

0 голосов
/ 28 сентября 2018

В спешке я действительно упустил принципиальную разницу между списками параметров.Извините, что потратил впустую ваше время.Спасибо всем за помощь - вы лучшие!Жаль, что нельзя включить тип (типы) возврата в качестве части идентифицирующей информации, даже если «https://docs.microsoft.com/en-us/dotnet/csharp/methods" действительно указывает« Возвращаемое значение, или void, если метод не имеет ни одного. »Является частью подписи.Возможно, это просто не означает, что я думал, что это означало. Опять же - спасибо всем, и извините, что просто упустил очевидное. Возможно, после того, как я закончу свой второй месяц программирования на C #, я буду лучше ...

0 голосов
/ 28 сентября 2018

C # никогда не допускал, чтобы методы отличались только по типу возвращаемого значения.Поэтому то, что вы предлагаете, не собирается компилироваться в первую очередь.

При реализации неявных преобразований есть только одно исключение:

class Foo
{
    public static implicit operator int(Foo f)
    {
        return 1;
    }

    public static implicit operator bool(Foo f)
    {
        return true;
    }
}

Компилятор создает op_implicit методов, которыеотличаются только по типу возврата, например:

enter image description here

Но это бесполезно в вашей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...