C#7.0重载和新的元组返回语法

时间:2018-09-28 13:12:31

标签: c# methods syntax tuples overloading

关于使用新的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) {...}

尽管如此,我还是收到语法错误“'Program'已经定义了具有相同参数类型的名为'TheFunction'的成员”。

因此,除非我只是在看错东西,否则看来,使用这种新的元组返回语法,返回类型在区分一个版本与另一个版本方面没有任何作用,而这看起来有些短视。

所以,我的问题是-我是在看错东西了吗,还是应该做到这一点,还是我不走运,而新语法在这方面还不够吗?还是我更错了,并且错过了“ TheFunction”方法的处理方式与“ ReadHive”方法的处理方式之间的根本区别?

3 个答案:

答案 0 :(得分:2)

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

但这对您的情况没有用。

答案 1 :(得分:1)

在示例中,您添加:

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。

您不能仅通过返回类型来区分功能:(

答案 2 :(得分:0)

我急忙地确实错过了参数列表之间的根本区别。很抱歉浪费您的时间。谢谢大家的帮助-您是最棒的!太糟糕的是,即使“ https://docs.microsoft.com/en-us/dotnet/csharp/methods”确实声明“返回值,或者如果该方法没有返回值,则为无效”,不能将返回类型作为标识信息的一部分。是签名的一部分。也许那并不代表我的意思。再次-谢谢大家,对不起您错过了显而易见的内容。也许在我通过第二个月的C#编程后,我会变得更好...