Я экспериментировал с необязательными параметрами, чтобы посмотреть, как они будут работать с интерфейсами, и наткнулся на странное предупреждение. У меня была установка следующего кода:
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», не будет иметь никакого эффекта, поскольку оно применяется к члену, который используется в контексты, которые не допускают необязательных аргументов
Я экспериментировал с необязательными параметрами, чтобы посмотреть, как они будут работать с интерфейсами, и наткнулся на странное предупреждение. У меня была установка следующего кода:
[code] 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); } } [/code]
Компилятор выдает следующие предупреждения:
[list] [*]Значение по умолчанию, указанное для параметр «a» не будет иметь никакого эффекта, поскольку он применяется к элементу, который используется в контекстах, которые не допускают необязательных аргументов. [*]Значение по умолчанию, указанное для параметра «b», не будет иметь никакого эффекта, поскольку оно применяется к члену, который используется в контекстах, не допускающих необязательных аргументов. [*]Значение по умолчанию, указанное для параметра «c», не будет иметь никакого эффекта, поскольку оно применяется к члену, который используется в контексты, которые не допускают необязательных аргументов [/list]
Если я запущу это со следующим кодом:
[code]class Program { static void Main(string[] args) { ITestInterface test = new TestClass(); test.TestOptional(); Console.ReadLine(); } } [/code]
Я получаю результат "[code]a=5 b=10 c=[/code]", как я и ожидал.
Мой вопрос: о чем предупреждение? К какому контексту оно относится?