Почему C# допускает перегрузки, если единственное отличие — это необязательный параметр?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему C# допускает перегрузки, если единственное отличие — это необязательный параметр?

Сообщение Anonymous »

Почему C#/Framework позволяет мне использовать необязательный параметр для создания перегрузки, которая в противном случае не допускается?

Код: Выделить всё

public static TOut? NullableConvert(object source, Func converter) where TOut : struct
{
}

public static TOut NullableConvert(object source, Func converter) where TOut : class
{
}
Когда я пытаюсь выполнить вышеуказанные перегрузки, я получаю следующую ошибку, с которой я согласен:


Ошибка CS0111. Тип «DataHelpers» уже определяет элемент с именем
«NullableConvert» с теми же типами параметров



Однако, если я добавлю необязательный параметр для одного из методов, как показано ниже, то мне разрешено использовать эти перегрузки (обратите внимание, что объект x = null).

Код: Выделить всё

public static TOut? NullableConvert(object source, Func converter) where TOut : struct
{
}

public static TOut NullableConvert(object source, Func converter, object x = null) where TOut : class
{
}
Когда я запускаю, время выполнения разрешает правильные перегрузки без необязательного параметра

Код: Выделить всё

long? x = DataHelpers.NullableConvert(DBNull.Value, Convert.ToInt64);
string y = DataHelpers.NullableConvert(DBNull.Value, Convert.ToString);


Как компилятор/среда выполнения могут разрешить перегрузку без необязательного параметра?

Почему я сразу получил ошибку, если методы можно разрешить?

Подробнее здесь: https://stackoverflow.com/questions/605 ... al-paramet
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»