gpt4 book ai didi

c# - 重载方法如何工作

转载 作者:太空狗 更新时间:2023-10-29 22:15:59 25 4
gpt4 key购买 nike

我已经编程了 5 年,先是 Delphi,现在是 C#,所以我以为我知道重载方法的工作原理,但显然不是。

首先是一些代码

public enum TestEnum { Option1, Option2, Option3 }

public class Setting
{
public Setting()
{
AddSettings();
}

protected void CreateSetting<TEnum>(string AName, TEnum AValue) where TEnum : struct, IComparable, IFormattable
{
//do stuff
}

protected void CreateSetting(string AName, string AValue)
{
//do stuff
}

protected void CreateSetting(string AName, int AValue)
{
CreateSetting(AName, AValue.ToString());
}

protected void AddSettings()
{
CreateSetting("Language", (byte)0); //#1
CreateSetting("BFL", "true"); //#2
CreateSetting<TestEnum>("TestEnum", TestEnum.Option1); //#3
CreateSetting("TestEnum", TestEnum.Option1); //#4
}
}

为了更容易解释,我在每次调用 CreateSettings 时都添加了一个数字。

我的问题是:

Call #1 调用了错误的(通用)版本的 CreateSettings,因为我已经转换为 byte 但为什么呢?

调用 #2 工作正常。

Call #3 也能正常工作。我显式调用通用版本

Call #4 也可以工作,但编译器会使用一些“魔法”解析正确的(通用)版本并调用它。但它为什么有效?

我发现 #1 调用错误版本的原因与 #4 相同。我只是想知道是否有人可以给我一个解释。

最佳答案

重载按预期工作,您声明:

#1 调用了错误的版本

它调用了正确的版本,因为你正在做的是将int转换为byte,所以你不再有int 变量,你有一个 byte。您希望它匹配 int 重载吗?怎么可能,您只是将变量转换为 byte

Call #4 也有效,但有一些“魔力”

这不是魔术,这基本上是因为与上述相同的原因,类型既不是 int 也不是 string,所以唯一可能的它可以调用的重载是通用的,因为你的“通用”方法本质上是说任何其他类(这里的类型是 TestEnum)

关于c# - 重载方法如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29767302/

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