关于使用新的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”方法的处理方式之间的根本区别?
答案 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
方法,它们的返回类型仅不同,如下所示:
但这对您的情况没有用。
答案 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#编程后,我会变得更好...