Fundição implícita em vb.net
-
26-09-2019 - |
Pergunta
A questão é destinada a programadores preguiçosos do VB. Por favor.
No VB, posso fazer e não vou conseguir erros.
Exemplo 1
Dim x As String = 5
Dim y As Integer = "5"
Dim b As Boolean = "True"
Exemplo 2
Dim a As EnumType = 4
Dim v As Integer = EnumType.EnumValue
Exemplo 3
Private Sub ButtonClick(sender As Object, e As EventArgs)
Dim btn As Button = sender
End Sub
Exemplo 4
Private Sub ButtonClick(sender As Button, e As EventArgs)
Dim data As Contact = sender.Tag
End Sub
Se eu certamente conheço o tipo de tempo de execução esperado, isso é 'proibido' de confiar no elenco integrado da língua VB? Quando posso confiar?
Solução
Comente para Markj mover para responder por op
Sinta -se à vontade para confiar nisso o quanto quiser, apenas certifique -se de saber as regras do que o elenco implícito está fazendo. Dito isto, o exemplo nº 4 parece realmente fácil de quebrar no futuro, eu ficaria muito mais feliz se houvesse pelo menos uma verificação nula antes.
Outras dicas
Certamente não é "proibido" usar Option Strict Off
Mas quase todo mundo aconselha fortemente usando Option Strict On
.
As razões são explicadas em outras perguntas, por exemplo isto.
Se você estiver usando o Visual Basic 2008, outra opção é fazer a explicação de fundição (por exemplo, opção rigorosa) e confiar na opção implícita para que você não precise escrever o tipo duas vezes.
Dim x = 5.ToString()
Dim data = DirectCast(sender.Tag, Contact)
A ironia de práticas "preguiçosas" como essa é que elas geralmente acabam custando mais tempo a longo prazo. Você pode realmente ter certeza de que seus insumos sempre estarão em um formato que pode ser automaticamente lançado para o tipo pretendido, em todas as circunstâncias e em todos os locais?
Pensando em todas as implicações possíveis e lidar com os bugs quase inevitáveis, provavelmente levará mais tempo do que apenas digitando fortemente suas variáveis, validando estritamente suas entradas e lançando explicitamente quando necessário.