gpt4 book ai didi

c# - 编译器选择了错误的重载

转载 作者:太空狗 更新时间:2023-10-29 21:12:56 25 4
gpt4 key购买 nike

好的,我有一个派生类,它重载了我基类中的一个方法。我调用了我认为与基类的方法签名相匹配的方法,但调用了我的派生类实现。 (下面的代码总是打印出“MyDerived”)这是为什么?

    public class MyBase
{
public void DoSomething(int a)
{
Console.WriteLine("MyBase");
}
}

public class MyDerived : MyBase
{
public void DoSomething(long a)
{
Console.WriteLine("MyDerived");
}
}


Main()
{
MyDerived d = new MyDerived();
d.DoSomething((int)5);
}

最佳答案

大多数人认为基类上的 DoSomething(int) 重载比 DoSomething(long) 重载更匹配。

但是,由于变量是派生类型,因此将调用该版本的 DoSomething。 .NET 运行时始终支持派生程度最高的编译时类型

如果它找到一个适用于派生类型的方法签名,它将在移动到任何基类方法之前使用它。通常,您应该避免重载基类中定义的方法

关于c# - 编译器选择了错误的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145903/

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