VB .NET x C#  - Programação - Comparação


Comparação entre as linguagens VB .NET e C# - Programação. Para consulta.

Propósito VB.NET C#
Declarando variáveis
Dim x As Integer
Public x As Integer = 10
int x;
int x = 10;
Comentários
' comentário
x = 1  ' comentário
Rem comentário
// comentário
/* multiline
 comentário */
Comandos de atribuição

nVal = 7

nVal = 7;
Comandos condicionais
If nCnt <= nMax Then
   ' mesmo que nTotal =  nTotal + nCnt.
   nTotal += nCnt  
   ' Mesmo que  nCnt = nCnt + 1
   nCnt += 1       
Else
   nTotal += nCnt
   nCnt -= 1       
End If
if (nCnt <= nMax)
{
   nTotal += nCnt;
   nCnt++;
}
else
{
   nTotal +=nCnt;
   nCnt--;
}
Instruções de seleção
Select Case n
   Case 0
      MsgBox ("Zero")  
     ' No Visual Basic .NET exite
     ' O select no fim do Case.
   Case 1
      MsgBox ("Macoratti")
   Case 2 
      MsgBox ("www.macoratti.net")
   Case Else
      MsgBox ("Default")
End Select
switch(n) 
{
   case 0:
      Console.WriteLine("Zero");
      break;
   case 1:
      Console.WriteLine("Macoratti");
      break;
   case 2:
      Console.WriteLine("Teste");
      break;
   default:
      Console.WriteLine("?");
      break;
}
laço FOR
For n = 1 To 10 
   MsgBox("O numero é " & n)
Next

For Each prop In obj
    prop = 42
Next prop
for (int i = 1; i <= 10; i++) 
   Console.WriteLine( "O numero é {0}", i);

foreach(prop current in obj)
{
     current=42;
}
Escondendo membros da classe base
Public Class ClasseBase
   ' O elemento a ser sombreado
   Public Z As Integer = 100   
   public Sub Test()
      System.Console.WriteLine( "Teste em ClasseBase")
   End Sub
End Class

Public Class ClasseDerivada
   Inherits ClasseBase
   ' O elemento sombreado
   Public Shadows Z As String = "*"
   public Shadows Sub Teste()
      System.Console.WriteLine("Teste em ClasseDerivada")
   End Sub
End Class

Public Class UseClasses
  ' ClasseDerivada estende de ClasseBase. 
  Dim BObj As ClasseBase =  New ClasseDerivada()
  ' Acesso através da classe derivada
  Dim DObj As ClasseDerivada =  New ClasseDerivada()

  Public Sub Exibir_Z()
    System.Console.WriteLine("Acesso através da classe base : "  & BObj.Z)
    System.Console.WriteLine("Acesso através da classe derivada: " & DObj.Z)
    BObj.Teste()
    DObj.Teste()
  End Sub 
End Class
public class ClasseBase
{
   // O elemento a ser escondido
   public int Z = 100;   
   public void Test()
   {
      System.Console.WriteLine("Teste em ClasseBase");
   }
}

public class ClasseDerivada : ClasseBase
{
  // O elemento oculto
  public new string Z = "*";   
  public new void Teste()
  {
    System.Console.WriteLine("Teste em ClasseDerivada");
  }
}

public class UseClasses
{
  // ' ClasseDerivada estende de ClasseBase. 
  ClasseBase BObj = new ClasseDerivada();  
   // Acesso através da classe derivada 

  ClasseDerivada DObj = new ClasseDerivada();  
  public void Exibir_Z()
  {
    System.Console.WriteLine( "Acesso através da classe base: {0}", BObj.Z);
    System.Console.WriteLine("Acesso através da classe derivada :{0}", DObj.Z);
    BObj.Teste();
    DObj.Teste();
   }
}
laço WHILE
' Teste no inicio do loop
While n < 100 .
   ' Mesmo que n = n + 1.
   n += 1     
End While 
while (n < 100)
   n++;  
 
Passando parâmetro por valor
' O argumento Y é passado por valor
Public Sub ABC( ByVal y As Long) 
    'Se ABC altera y, as mudanças não afetem x.
End Sub
   
ABC(x) ' Chama a rotina

' Você pode forçar os parâmetros a serem passados por valor
' independente de como eles são declarados encerrando os parâmetros em
' parênteses extras

ABC((x))
/* Note que não existe uma forma de passar tipos de referência (objetos)
estritamente por valor. Você pode escolher entre passar a referência 
(essencialmente um ponteiro), ou uma referência para a referência 
(um ponteiro para um ponteiro) */

void ABC(int x)
{  ...}

// Chamando o método
ABC(i);
Passando parâmetro por referência
Public Sub ABC(ByRef y As Long) 
   ' O parâmetro y é declarado por referência
    ' Se aBC altera y, as mudanças são feitas no valor de x
End Sub

ABC(x) ' Chama o procedimento





/ * 
Observe que não existe uma maneira de passar tipos de referência 
(objetos) estritamente em termos de valor. Você pode optar por passar 
a referência (essencialmente, um ponteiro), ou uma referência ao valor 
de referência (um ponteiro para um ponteiro) .
* /
/ / Note também que o métodos C# inseguros métodos podem ter ponteiros
/ / assim como os métodos C++
void ABC(ref int x)
{  ...}

//Chamando o método:
ABC(ref i);
Tratamento estruturado de exceções
// try-catch-finally
Try
   If x = 0 Then
      Throw New Exception( "x é igual a  zero")
   Else
      Throw New Exception("x não é igual a l zero")
   End If
Catch err As System.Exception
   MsgBox( "Error: " & Err.Description)
Finally
   MsgBox( "Executando o bloco finally.")
End Try






// try-catch-finally
try
  {
    if (x == 0)
       throw new System.Exception("x é igual a  zero");
    else
       throw new System.Exception("x não é igual a  zero");
  }
catch (System.Exception err)
{
     System.Console.WriteLine(err.Message);
}
finally
{
  System.Console.WriteLine("Executando o bloco finally");
}
Definir uma referência de objeto como Nothing/Null
o = Nothing
o = null;
Inicializando tipos de valor
Dim dt as New System.DateTime( 2001, 4, 12, 22, 16, 49, 844)
System.DateTime dt =  new System.DateTime( 2001, 4, 12, 22, 16,  49, 844);

José Carlos Macoratti