Как создать необязательные аргументы в Visual Basic, сгенерированные через CodeDom?
Это двоюродный брат вопроса " Может ли CodeDom создавать необязательные аргументы при генерации метода aC#?"
И я попробовал ответ, данный там.
Тем не менее, когда я пытаюсь скомпилировать, я получаю следующую ошибку:
ошибка BC30455: Аргумент не указан для параметра "optionParam" в "Публичная функциональная панель (optionParam как целое число) как целое число"
Я разобрал это до компилятора Visual Basic, не поддерживающего OptionalAttribute, DefaultParameterValueAttribute или обоих.
Вот дистиллированный код, который я компилирую:
Imports System.Runtime.InteropServices
Namespace SSI.RuntimeGenerated.FunctionsNamespace
Public Class Functions
Public Function Foo() As Integer
return Bar()
End Function
Public Function Bar( _
<[Optional], DefaultParameterValue(1)> _
ByVal optionalParam As Integer) _
As Integer
return optionalParam
End Function
End Class
End Namespace
Компилируем это с помощью следующей команды:
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /t:library /out:foobar.dll foobar.vb /langversion:11
Производит следующий вывод:
Microsoft (R) Visual Basic Compiler version 11.0.50709.17929
Copyright (c) Microsoft Corporation All rights reserved.
C:\<snip>\foobar.vb : error BC30455: Argument not specified for parameter
'optionalParam' of 'Public Function Bar(optionalParam As Integer) As Integer'.
return Bar()
~~~~~
Если я изменю подпись метода вручную, чтобы
Public Function Bar(Optional ByVal optionalParam As Integer) As Integer
тогда это просто компилируется.
Итак, мои вопросы:
- Как создать необязательные аргументы в Visual Basic, сгенерированные через CodeDom?
- Поддерживает ли vbc использование OptionalAttribute и / или DefaultParameterValueAttribute?
- Если vbc не поддерживает эти атрибуты, есть ли какой-нибудь возможный способ создания дополнительных аргументов, не прибегая к использованию CodeSnippetStatement?
- Если нет другого пути, то возможно ли спасти другую работу, которую я проделал с CodeDom, чтобы мне не пришлось создавать свои методы вручную? Нужно ли собирать остальное вручную внутри CodeSnippetTypeMember? Будет ли это работать?
1 ответ
OptionalAttribute
не поддерживается в VB.NET Я не могу найти никакой официальной документации, в которой это конкретно говорится, но если вы попытаетесь использовать ее в проекте VB.NET, это не будет иметь никакого эффекта. Чтобы создать необязательный параметр в VB.NET, вы должны использовать Optional
ключевое слово, для instace:
Public Class Functions
Public Function Foo() As Integer
Return Bar()
End Function
Public Function Bar(Optional ByVal optionalParam As Integer = 1) As Integer
Return optionalParam
End Function
End Class