Я программировал для летних лет сначала 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 для того, чтобы сделать это easyer объяснить.
Мой вопрос:
вызов # 1 вызывает неправильную (Generic) версию CreateSettings, потому что я сделал бросок к byte
, но почему?
Звоните # 2 работает нормально.
Звоните # 3 работает отлично. Я явным образом назову версию gerneric
Звонок # 4 также работает, но с некоторой «магии» компилятор разрешает правильную (genneric) версию и вызывает это. Но почему это работает?
Я понял, что # 1 вызывает неправильную версию по той же причине, что и # 4. Мне просто интересно, может ли кто-нибудь дать мне объяснение.
Предположительно, какую версию .Net framework/Visual studio вы используете для этого? –