У меня есть эти методы:C# Метод перегрузки разрешения
static void OverloadedMethod(Action<ulong> handlerAction)
{
}
static void OverloadedMethod(Action<float> handlerAction)
{
}
static void HandlerA(ulong dataProgress)
{
}
static void HandlerB(float dataProgress)
{
}
Я могу назвать
OverloadedMethod(HandlerA);
без проблем, но если я пытаюсь вызвать
OverloadedMethod(HandlerB);
Компилятора жалуется: Неоднозначная Инвокация ,
Я прочитал this article, но я не понимаю, почему компилятор знает, какой метод следует выбрать, если параметр является ULONG, но он не может решить ту же самую ситуацию, если параметр является поплавок ...
Но если у нас есть такие методы, как 'статической ничтожной SomeMethod (плывите) {Console.WriteLine («В методе плавающей»);}' и 'статической ничтожной SomeMethod (ULONG a) {Console.WriteLine («В методе ulong»);} 'и называть его как' SomeMethod (10); 'затем он корректно решает и не возникает двусмысленной ошибки компилятора. Поэтому не совсем уверен, что это неявное преобразование, предотвращающее перегрузку. – Habib
Это стандартное преобразование типов, здесь мы говорим об общих типах, нет никакого неявного литья для дженериков. –
@BartoszKP, после прочтения вашего ответа: так что, поскольку float может быть float или float, неявно преобразованный из ulong _implicit conversion, и ни один из них не лучше_. Но поскольку улунг не может быть неявно получен из плавающего, нет сомнений, верно? – Nomada