Aprendi bastante a navegar nos Recursos ocultos do C # e fiquei surpreso quando não consegui encontrar algo semelhante para o VB.NET.
Então, quais são alguns dos seus recursos ocultos ou menos conhecidos?
vb.net
hidden-features
Sean Gough
fonte
fonte
personalizadas
Enum
SUm dos recursos ocultos reais do VB é a
completionlist
tag de documentação XML que pode ser usada para criarEnum
tipos com funcionalidade estendida. Esse recurso não funciona em C #, no entanto.Um exemplo de um código recente meu:
Agora, ao atribuir um valor a uma variável declarada como
Rule
, o IDE oferece uma lista IntelliSense de possíveis valores deRuleTemplates
./EDITAR:
Como esse é um recurso que depende do IDE, é difícil mostrar como isso fica quando você o usa, mas usarei uma captura de tela:
Lista de conclusão em ação http://page.mi.fu-berlin.de/krudolph/stuff/completionlist.png
De fato, o IntelliSense é 100% idêntico ao que você obtém ao usar um
Enum
.fonte
friend
ou usando a mesma classe que o enum: emRule
vez deRuleTemplate
.Você notou o operador de comparação Like?
Dim b As Boolean = "file.txt" Like "*.txt"
Mais do MSDN
fonte
Typedefs
O VB conhece um tipo primitivo de aliases de
typedef
viaImport
:Isso é mais útil quando usado em conjunto com tipos genéricos:
fonte
Imports
deveria ser. ;-) De alguma forma, esse erro passou despercebido (e obteve 28 upvotes) por quase um ano inteiro.Imports Assert = xUnit.Assert
Oh! e não se esqueça de literais XML .
fonte
<string>This string contains "quotes" and it's OK.</string>.Value
(Eu encontrei este especialmente útil quando se escreve testes em analisar arquivos CSV onde cada campo foi entre aspas Seria. Não ter sido divertido para escapar de todas aquelas citações por mão na minha linhas de teste).A inicialização do objeto também está lá!
fonte
DirectCast
DirectCast
é uma maravilha. Na superfície, funciona de maneira semelhante àCType
operador, pois converte um objeto de um tipo para outro. No entanto, ele funciona com um conjunto de regras muito mais rigoroso.CType
Portanto, o comportamento real geralmente é opaco e não é de todo evidente que tipo de conversão é executada.DirectCast
suporta apenas duas operações distintas:Qualquer outra conversão não funcionará (por exemplo, tentando desmarcar uma
Integer
aDouble
) e resultará em um erro de tempo de compilação / tempo de execução (dependendo da situação e do que pode ser detectado pela verificação de tipo estático). Por isso usoDirectCast
sempre que possível, pois isso captura minha melhor intenção: dependendo da situação, quero desmarcar um valor do tipo conhecido ou executar um upcast. Fim da história.O uso
CType
, por outro lado, deixa o leitor do código imaginando o que o programador realmente pretendia, porque ele resolve todos os tipos de operações diferentes, incluindo a chamada de código definido pelo usuário.Por que isso é um recurso oculto? A equipe do VB publicou uma diretriz 1 que desencoraja o uso de
DirectCast
(mesmo que seja realmente mais rápido!) Para tornar o código mais uniforme. Argumento que essa é uma orientação ruim que deve ser revertida: sempre que possível, favoreceDirectCast
oCType
operador mais geral . Isso torna o código muito mais claro.CType
, por outro lado, só deve ser chamado se isso for realmente pretendido, ou seja, quando umCType
operador de restrição (cf. sobrecarga de operador ) deve ser chamado.1) Não consigo encontrar um link para a diretriz, mas descobri a opinião de Paul Vick (desenvolvedor chefe da equipe VB):
(EDIT by Zack: Saiba mais aqui: como devo transmitir no VB.NET? )
fonte
TryCast
na época, porque eu tinha um osso para escolher com o uso generalizado deCType
.TryCast
só funcionam em tipos de referência, conforme a documentação.If
operador condicional e de coalescênciaNão é tão oculto quanto obsoleto ! O VB 9 possui o
If
operador que é muito melhor e funciona exatamente como o operador condicional e de coalescência do C # (dependendo do que você deseja):Editado para mostrar outro exemplo:
Isso funcionará
If()
, mas causará uma exceção comIIf()
fonte
:?
operador de C e Perl , não é apenas uma versão simplificada.Essa é boa. A instrução Select Case no VB.Net é muito poderosa.
Claro que existe o padrão
Mas tem mais ...
Você pode fazer intervalos:
E ainda mais ...
Você pode (embora não seja uma boa idéia) fazer verificações booleanas em várias variáveis:
fonte
Select Case True
é que parece que ele avalia cada uma dasCase
instruções e executa o código de cada uma que é verdadeira. Mas, na verdade, ele os avalia um por um e executa apenas o código do primeiro, o que é verdadeiro. A sintaxe paraIf
é muito mais clara nesse sentido (If...Else If...Else If...Else
).Uma grande economia de tempo que uso o tempo todo é a palavra-chave With :
Só não gosto de digitar mais do que preciso!
fonte
O melhor e mais fácil analisador de CSV:
Adicionando uma referência ao Microsoft.VisualBasic, isso pode ser usado em qualquer outro idioma .Net, por exemplo, C #
fonte
(EDIT: saiba mais aqui: devo usar sempre os operadores AndAlso e OrElse? )
fonte
Membros estáticos nos métodos.
Por exemplo:
Na função acima, a expressão regular do padrão será criada apenas uma vez, não importa quantas vezes a função seja chamada.
Outro uso é manter uma instância de "random" por perto:
Além disso, isso não é o mesmo que simplesmente declará-lo como um membro compartilhado da classe; itens declarados dessa maneira também são garantidos como seguros para threads. Não importa nesse cenário, pois a expressão nunca muda, mas há outras onde pode.
fonte
Na vb, há uma diferença entre estes operadores:
/
éDouble
\
estáInteger
ignorando o restantefonte
Eu realmente gosto do namespace "My", que foi introduzido no Visual Basic 2005. My é um atalho para vários grupos de informações e funcionalidades. Ele fornece acesso rápido e intuitivo aos seguintes tipos de informações:
fonte
Eventos Personalizados
Embora raramente seja útil, a manipulação de eventos pode ser altamente personalizada:
Isso pode ser testado da seguinte maneira:
fonte
Acabei de encontrar um artigo falando sobre o "!" operador, também conhecido como "operador de pesquisa de dicionário". Aqui está um trecho do artigo em: http://panopticoncentral.net/articles/902.aspx
fonte
Isso é interno e uma vantagem definitiva sobre o C #. A capacidade de implementar um método de interface sem precisar usar o mesmo nome.
Tal como:
fonte
Forçando ByVal
No VB, se você agrupar seus argumentos em um conjunto extra de parênteses, poderá substituir a declaração ByRef do método e transformá-la em um ByVal. Por exemplo, o código a seguir produz 4, 5, 5 em vez de 4,5,6
Consulte Argumento não sendo modificado por chamada de procedimento - variável subjacente
fonte
Passando parâmetros por nome e, portanto, reordenando-os
Uso:
Também pode ser chamado usando a especificação de parâmetro ": =" em qualquer ordem:
fonte
A instrução Using é nova no VB 8, C # tinha desde o início. Chama descarte automaticamente para você.
Por exemplo
fonte
Os aliases de importação também são amplamente desconhecidos:
fonte
Considere a seguinte declaração de evento
Em C #, você pode verificar se há assinantes de eventos usando a seguinte sintaxe:
No entanto, o compilador VB.NET não suporta isso. Na verdade, ele cria um campo de membro privado oculto que não é visível no IntelliSense:
Mais Informações:
http://jelle.druyts.net/2003/05/09/BehindTheScenesOfEventsInVBNET.aspx http://blogs.msdn.com/vbteam/archive/2009/09/25/testing-events-for-nothing-null-doug -rothaus.aspx
fonte
Se você precisar de um nome de variável para corresponder ao de uma palavra-chave, coloque-o entre colchetes. Não ne. embora seja a melhor prática - mas pode ser usada com sabedoria.
por exemplo
por exemplo, exemplo de comentários (@Pondidum):
fonte
Há algumas respostas sobre literais XML, mas não sobre este caso específico:
Você pode usar literais XML para incluir literais de string que, de outra forma, precisariam ser escapados. Literais de string que contêm aspas duplas, por exemplo.
Em vez disso:
Você consegue fazer isso:
Isso é especialmente útil se você estiver testando um literal para análise de CSV:
(Você não precisa usar a
<string>
tag, é claro; pode usar qualquer tag que desejar.)fonte
<q>
seria uma boa tag, semelhante ao uso em Perl / Ruby. Enfim, essa é uma linguagem legal. GOSTAR!O DateTime pode ser inicializado cercando sua data com #
Você também pode usar a inferência de tipo junto com esta sintaxe
Isso é muito melhor do que usar o construtor
fonte
Você pode ter 2 linhas de código em apenas uma linha. conseqüentemente:
fonte
Call (New Something).CallAMethod()
Parâmetros opcionais
Os opcionais são muito mais fáceis do que criar uma nova sobrecarga, como:
fonte
O Case Title no VB.Net pode ser obtido por um antigo VB6 fxn:
fonte
Propriedades com parâmetros
Eu tenho feito alguma programação em C # e descobri um recurso que estava faltando no VB.Net, mas não foi mencionado aqui.
Um exemplo de como fazer isso (assim como a limitação de c #) pode ser visto em: Usando as propriedades típicas de configuração definida em C # ... com parâmetros
Eu extraí o código dessa resposta:
fonte