I don't have C # Spec here, but optional parameter values are not inherited by overridden methods.
Try to change FDerived
public override void f(long l, int q)
to
public override void f(long l, int q = 0)
and it will work as expected.
Note that this can be shown in a simple example:
public class F
{
public virtual void f(long l, int q = 0) { Console.WriteLine("public virtual void F.f(long l, int q = 0)"); }
}
public class FDerived : F
{
public override void f(long l, int q) { Console.WriteLine("public override FDerived.f(long l, int q)"); }
}
new FDerived().f(5L);
Obviously this compiles:
new F().f(5L);
and even this one:
F obj = new FDerived();
obj.f(5L);
(this outputs public override FDerived.f(long l, int q))
source
share