Я играл с дополнительными параметрами, чтобы увидеть, как они будут работать с интерфейсами, и я столкнулся с странным предупреждением. У меня был следующий код:
public interface ITestInterface
{
void TestOptional(int a = 5, int b = 10, object c = null);
}
public class TestClass : ITestInterface
{
void ITestInterface.TestOptional(int a = 5, int b = 5, object c = null)
{
Console.Write("a=" + a + " b=" + b + " c=" + c);
}
}
Компилятор дает мне следующие предупреждения:
- Значение по умолчанию, указанное для параметра 'a', не будет иметь эффекта, поскольку оно применяется к члену, который используется в контекстах, которые не позволяют необязательные аргументы
- Значение по умолчанию, указанное для параметра 'b', не будет иметь эффекта, поскольку оно применяется к члену, который используется в контекстах, которые не позволяют необязательные аргументы
- Значение по умолчанию, указанное для параметра 'c', не будет иметь эффекта, поскольку оно применяется к члену, который используется в контекстах, которые не позволяют необязательные аргументы
Если я запустил это со следующим кодом:
class Program
{
static void Main(string[] args)
{
ITestInterface test = new TestClass();
test.TestOptional();
Console.ReadLine();
}
}
Я получаю вывод "a=5 b=10 c=
", как я ожидал.
Мой вопрос - это предупреждение? В каких контекстах это относится?