I tried the code at home, the answer is your code will compile, and there is no ambiguity! If you'd done this instead:
public class B : A
{
public <big>override</big> void F(int i=10) {}
}
It would have failed, not due to ambiguousness but because, in effect, class A doesn't have a
public void F(int i)
to override.
Your code will call method
F
in class
A
. As a side note, as far as the compiler is concerned
B.F()
doesn't exist, even though you can call it. So if you were to override, you only need to have a virtual
A.F(int)
and not a
A.F()
I've updating my article (not the continued shameless plug!), to include the fallout from your question!
Named and Optional Arguments[
^]