Именованные и необязательные аргументы

ой метод 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 не использует отражение?

Ответы на вопрос(2)

Ваш ответ на вопрос