One possible reason could be the use of optional parameters.
If we were using an interface, it would be impossible to specify named parameter values. An example:
interface ITest
{
void Output(string message, int times = 1, int lineBreaks = 1);
}
class Test : ITest
{
public void Output(string message, int numTimes, int numLineBreaks)
{
for (int i = 0; i < numTimes; ++i)
{
Console.Write(message);
for (int lb = 0; lb < numLineBreaks; ++lb )
Console.WriteLine();
}
}
}
class Program
{
static void Main(string[] args)
{
ITest testInterface = new Test();
testInterface.Output("ABC", lineBreaks : 3);
}
}
In this implementation, when using the interface, there are default parameters on times
and lineBreaks
, so if accessing through the interface, it is possible to use defaults, without the named parameters, we would be unable to skip the times
parameter and specify just the lineBreaks
parameter.
Just an FYI, depending upon whether you are accessing the Output
method through the interface or through the class determines whether default parameters are available, and what their value is.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…