C#超载问题

Yip*_*Yay 2 c# fallback arguments overloading

有可能以某种方式实现以下方案:

public interface ISomething
{
    void Go(ISpecific specific);

    void Go(Object o);
}
Run Code Online (Sandbox Code Playgroud)

让每个Go(ISpecific)拨打第一个重载会被调用,与其他任何可能的对象调用的类将回退到Go(Object)实施?

Dan*_*ite 5

是.这就是编译器的工作原理.


Jon*_*eet 5

这是默认情况下的工作方式 - 但使用编译时类型.如果你有Go(foo)和编译时类型foo没有实现ISpecific,它将调用第二个方法,即使foo在执行时引用的对象实现ISpecific.如果你想在执行时动态做出这个决定,如果你正在使用C#4,你可以写:

dynamic value = GetValue();
something.Go(value);
Run Code Online (Sandbox Code Playgroud)

......并且在执行时,将选择正确的过载.