Как Делают VB.NET, Дополнительные Параметры работают 'Под капотом'? Действительно ли они CLS-совместимы?

Обновление 20161108 - оригинальный ответ ниже

Firebase только что выпустила свой SDK firebase-admin, который позволяет использовать код на стороне сервера для этого и других распространенных административных прецедентов. Прочтите инструкции по установке , а затем погрузитесь в документацию по созданию пользователей .

исходный ответ

В настоящее время невозможно. Создание пользователя Email + Password автоматически подписывает нового пользователя.

5
задан Luke Girvin 21 September 2011 в 09:11
поделиться

2 ответа

Интересно, это - декомпилируемый код C#, полученный через отражатель.

public int MyMethod(int param1, 
                   [Optional, DefaultParameterValue(0)] int param2, 
                   [Optional, DefaultParameterValue(1)] int param3)
{
    return ((param1 + param2) + param3);
}

Заметьте атрибуты DefaultParameterValue и Дополнительное. Попытайтесь поместить их в методы C#. Вы найдете, что Вы все еще обязаны передавать значения методу. В VB кодируют однако, превращенный Значение по умолчанию! Однако у меня лично никогда нет Значения по умолчанию использования даже в коде VB. Похоже на взлом. Перегрузка метода добивается цели для меня.

Значение по умолчанию действительно помогает, хотя, при контакте с Excel Interop, который является болью в заднице для использования прямо из поля в C#.

7
ответ дан 18 December 2019 в 14:54
поделиться

Вопреки широко распространенному мнению дополнительные параметры, действительно кажется, CLS-совместимы. (Однако моя основная проверка на это должна была отметить блок, класс и метод все с атрибутом CLSCompliant, установить на Истинный.)

Таким образом, на что это похоже в MSIL?

.method public static int32  MyMethod(int32 param1,
                                      [opt] int32 param2,
                                      [opt] int32 param3) cil managed
{
  .custom instance void [mscorlib]System.CLSCompliantAttribute::.ctor(bool) = ( 01 00 01 00 00 ) 
  .param [2] = int32(0x00000000)
  .param [3] = int32(0x00000001)
  // Code size       11 (0xb)
  .maxstack  2
  .locals init ([0] int32 MyMethod)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  ldarg.1
  IL_0003:  add.ovf
  IL_0004:  ldarg.2
  IL_0005:  add.ovf
  IL_0006:  stloc.0
  IL_0007:  br.s       IL_0009
  IL_0009:  ldloc.0
  IL_000a:  ret
} // end of method Module1::MyMethod

Отметьте [выбирать] маркировки на параметрах - MSIL поддерживает это исходно без любых взломов. (В отличие от поддержки MSIL Статического ключевого слова VB, которое является другой темой в целом.)

Так, почему они не находятся в C#? Я не могу ответить, что, кроме моего предположения, что это могло бы быть предполагаемое отсутствие спроса. Мое собственное предпочтение состояло в том, чтобы всегда указывать параметры, даже если они были дополнительными - мне, инструменту для очистки взглядов кода, и легче читать. (Если существуют опущенные параметры, я часто сначала ищу перегрузку, которая соответствует видимой подписи - это только после того, как мне не удается найти тот, что я понимаю, что включены дополнительные параметры.)

6
ответ дан 18 December 2019 в 14:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: