Именованные и необязательные аргументы
ой метод C # с необязательным параметром, объявленным с использованием OptionalAttribute как
namespace ClassLibrary11
{
public class Class1
{
public int Foo(int a, int b, [Optional] int c)
{
return a + b + c;
}
}
}
На VS 2010.obj.Foo(3,4)
выходы7
как и ожидалось. Но не в VS 2008 и не раньше, если не указано какое-либо значение по умолчанию с помощью атрибута DefaultParameterValue. Так что призыв кFoo(3,4)
на VS2008 или раньше приводит к ошибке:
Object of type 'System.Reflection.Missing' cannot be converted to type 'System.Double'
И на VS 2008, и на VS 2010, если для вызова метода Foo используется отражение, оно выдает ту же ошибку, если для необязательного параметра не указано значение по умолчанию.
ClassLibrary11.Class1 cls = new ClassLibrary11.Class1();
MethodInfo mi = typeof(ClassLibrary11.Class1).GetMethod("Foo");
Object[] objarr = new Object[] {1,2, Missing.Value};
Object res = mi.Invoke(cls, objarr);
Итак, вопрос:
Так как же этот компилятор VS 2010 позаботится о назначении значения по умолчанию для необязательного параметра, но фреймворк 4.0 не использует отражение?