gpt4 book ai didi

c# - 无法理解带有可选参数的方法的输出

转载 作者:太空狗 更新时间:2023-10-29 23:06:40 26 4
gpt4 key购买 nike

今天我正在编写一个小程序来了解 C# 可选参数的基础知识。

程序如下:

abstract class AbstractClass
{
internal abstract void Test();
}

sealed class DerivedClass : AbstractClass
{
internal override void Test()
{
Console.WriteLine("In override DerivedClass.Test() method");
}

internal void Test(int a = 1)
{
Console.WriteLine("In DerivedClass.Test(int a=1) method " + a);
}

internal void Test(int b, int a = 1)
{
Console.WriteLine("In DerivedClass.Test(int b, int a=1) method " + string.Format("{0} {1}", b, a));
}
}

这就是我如何调用 Test() 方法:

   DerivedClass d = new DerivedClass();       
d.Test();
d.Test(6);
d.Test(b:7);

输出:

In DerivedClass.Test(int a=1) method 1

In DerivedClass.Test(int a=1) method 6

In DerivedClass.Test(int b, int a=1) method 7 1

关于d.Test();:这里我的理解是,它将把Test()当作带有可选参数的方法,并会调用Test (int a = 1) 输出如下:

In DerivedClass.Test(int a=1) method 1

但这就是执行 d.Test(6); 时让我感到困惑的地方:为什么这个方法调用没有给出如下输出:

In DerivedClass.Test(int b, int a=1) method 6 1

根据我的理解,“6”是强制参数,它应该调用

internal void Test(int b, int a = 1)

请解释我的理解有什么问题。

还有如何调用覆盖的方法?

internal override void Test()

最佳答案

internal void Test(int a = 1) 的规则匹配与您的代码 d.Test(6); 匹配最好:它匹配参数的数量,类型。这使该方法成为最佳匹配。

当调用 d.Test(b:7); 时,您强制它作为最后一个方法运行,因为您正在匹配参数的名称。这使得最后一种方法成为最佳匹配。

第一个 (d.Test();) 与您期望的方法 (void Test()) 不匹配,因为“自己的”方法是首选在派生方法上。尝试删除基类或在方法上使用 new 运算符,您将会看到。

关于c# - 无法理解带有可选参数的方法的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30975605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com