Каковы правила, касающиеся перегрузки функции?
У меня есть следующий код:
public T genericFunc<T>() where T : Component, new()
{
T result = new T();
overloadedFunction( result );
}
private overloadedFunction ( Component c ) // catch all function
private overloadedFunction ( DerivedFromComponent dfc) // specific function
, когда я вызываю вышеуказанный код с помощью:
genericFunc<DerivedFromComponent>();
Iожидаем, что будет вызвана более конкретная перегруженная функция, однако вместо этого вызывается функция catch all, почему?При выполнении вышеприведенного кода тип T действительно является DerivedFromComponent, я подумал, что CLR выбрал наилучшее из возможных совпадений во время выполнения!