I recently encountered the following behaviour;
internal interface IOptionalParamTest { void PrintMessage(string message = "Hello"); } class OptionalParamTest : IOptionalParamTest { public void PrintMessage(string message = "Goodbye") { Console.WriteLine(message); } } internal class Program { static void Main() { IOptionalParamTest usingInterface = new OptionalParamTest(); usingInterface.PrintMessage(); // prints "Hello" OptionalParamTest usingConcrete = new OptionalParamTest(); usingConcrete.PrintMessage();// prints "Goodbye" } } My question is; why does the compiler not reject the implementation of PrintMessage with a different default value from that defined on the interface?