VB.NET and C# Comparison
This is a quick reference guide to highlight some key syntactical differences between VB.NET and C#. Hope you find this useful!
Thank you to Tom Shelton, Fergus Cooney, Steven Swafford, Gjuro Kladaric, and others for your contributions.
Imports System Namespace Hello Class HelloWorld Overloads Shared Sub Main(ByVal args() As String) Dim name As String = "VB.NET" 'See if an argument was passed from the command line If args.Length = 1 Then name = args(0) Console.WriteLine("Hello, " & name & "!") End Sub End Class End Namespace |
using System; namespace Hello { public class HelloWorld { public static void Main(string[] args) { string name = "C#"; // See if an argument was passed from the command line if (args.Length == 1) name = args[0]; Console.WriteLine("Hello, " + name + "!"); } } } |
||||||||||
' Single line only REM Single line only ''' <summary>XML comments</summary> |
// Single line |
||||||||||
Value Types
Reference Types
Initializing
Implicitly Typed Local Variables
Type Information
Type Conversion / Casting |
Value Types
Reference Types
Initializing
Implicitly Typed Local Variables
Type Information
Type Conversion / Casting |
||||||||||
Const MAX_STUDENTS As Integer = 25
' Can set to a const or var; may be initialized in a constructor |
const int MAX_STUDENTS = 25;
// Can set to a const or var; may be initialized in a constructor |
||||||||||
Enum Action Start [Stop] ' Stop is a reserved word Rewind Forward End Enum Enum Status Flunk = 50 Pass = 70 Excel = 90 End Enum Dim a As Action = Action.Stop If a <> Action.Start Then _ Console.WriteLine(a.ToString & " is " & a) ' Prints "Stop is 1" Console.WriteLine(Status.Pass) ' Prints 70 Console.WriteLine(Status.Pass.ToString()) ' Prints Pass |
enum Action {Start, Stop, Rewind, Forward}; enum Status {Flunk = 50, Pass = 70, Excel = 90}; Action a = Action.Stop; if (a != Action.Start) Console.WriteLine(a + " is " + (int) a); // Prints "Stop is 1" Console.WriteLine((int) Status.Pass); // Prints 70 Console.WriteLine(Status.Pass); // Prints Pass |
||||||||||
Comparison
Arithmetic
Assignment
Bitwise
Logical Note: AndAlso and OrElse perform short-circuit logical evaluations
String Concatenation |
Comparison
Arithmetic
Assignment
Bitwise
Logical Note: && and || perform short-circuit logical evaluations
String Concatenation |
||||||||||
' Ternary/Conditional operator (IIf evaluates 2nd and 3rd expressions)
' One line doesn't require "End If"
' Use : to put two commands on same line
' Preferred
' Use _ to break up long single line or use implicit line break
'If x > 5 Then
Select Case color ' Must be a primitive data type |
// Ternary/Conditional operator
if (age < 20)
// Multiple statements must be enclosed in {} No need for _ or : since ; is used to terminate each statement.
|
||||||||||
' Array or collection looping
' Breaking out of loops
' Continue to next iteration |
Pre-test Loops:
// no "until" keyword
// Array or collection looping
// Continue to next iteration |
||||||||||
Dim nums() As Integer = {1, 2, 3}
Dim twoD(rows-1, cols-1) As Single |
int[] nums = {1, 2, 3};
float[,] twoD = new float[rows, cols];
int[][] jagged = new int[3][] { |
||||||||||
' Pass by value (in, default), reference (in/out), and reference (out)
Dim a = 1, b = 1, c As Integer ' c set to zero by default
' Accept variable number of arguments
' Optional parameters must be listed last and must have a default value |
// Pass by value (in, default), reference (in/out), and reference (out) void TestFunc(int x, ref int y, out int z) { x++; y++; z = 5; }
int a = 1, b = 1, c; // c doesn't need initializing
// Accept variable number of arguments int total = Sum(4, 3, 2, 1); // returns 10
/* C# 4.0 supports optional parameters. Previous versions required function overloading. */
SayHello("Strangelove", "Dr."); |
||||||||||
Special character constants (all also accessible from ControlChars class)
' String concatenation (use & or +)
' Chars
' No string literal operator
' String comparison
' String matching with Like - Regex is more powerful
' Substring
' Replacement
' Split
' Date to string
' Integer to String
' String to Integer
' Mutable string |
Escape sequences
// String concatenation
// Chars
// String literal
// String comparison // String matching - No Like equivalent, use Regex
// Replacement
// Split
// Date to string
// int to string int x = Convert.ToInt32("-5"); // x is -5
// Mutable string |
||||||||||
|
|||||||||||
Imports System.Text.RegularExpressions
' Match a string pattern
' Find and remember all matching patterns
' Remeber multiple parts of matched pattern
' Replace all occurrances of a pattern
' Replace matched patterns
' Split a string based on a pattern |
using System.Text.RegularExpressions;
// Match a string pattern
// Replace all occurrances of a pattern
// Replace matched patterns
// Split a string based on a pattern |
||||||||||
' Throw an exception
' Catch an exception
' Deprecated unstructured error handling |
// Throw an exception
// Catch an exception |
||||||||||
Namespace Harding.Compsci.Graphics ' or
Namespace Harding Imports Harding.Compsci.Graphics |
namespace Harding.Compsci.Graphics { // or
namespace Harding { using Harding.Compsci.Graphics; |
||||||||||
Access Modifiers
Class Modifiers
Method Modifiers
' All members are Shared
' Partial classes
' Inheritance
' Interface definition
' Extending an interface
' Interface implementation |
Access Modifiers
Class Modifiers
Method Modifiers
No Module equivalent - just use static class
// Partial classes
// Inheritance
// Extending an interface
|
||||||||||
Class SuperHero Private powerLevel As Integer Public Sub New() powerLevel = 0 End Sub Public Sub New(ByVal powerLevel As Integer) Me.powerLevel = powerLevel End Sub Shared Sub New() ' Shared constructor invoked before 1st instance is created End Sub Protected Overrides Sub Finalize() ' Destructor to free unmanaged resources MyBase.Finalize() End Sub End Class |
class SuperHero { |
||||||||||
Dim hero As SuperHero = New SuperHero
With hero
hero.Defend("Laura Jones")
Dim hero2 As SuperHero = hero ' Both reference the same object hero = Nothing ' Free the object
If hero Is Nothing Then _
Dim obj As Object = New SuperHero
' Mark object for quick disposal |
SuperHero hero = new SuperHero();
// No "With" but can use object initializers
hero.Defend("Laura Jones");
hero = null ; // Free the object
if (hero == null)
Object obj = new SuperHero(); using (StreamReader reader = File.OpenText("test.txt")) { string line; while ((line = reader.ReadLine()) != null) Console.WriteLine(line); } |
||||||||||
Structure Student
Dim stu As Student = New Student("Bob", 3.5) |
struct Student { public string name; public float gpa; public Student(string name, float gpa) { this.name = name; this.gpa = gpa; } }
Student stu = new Student("Bob", 3.5f); |
||||||||||
' Auto-implemented properties are new to VB10
' Traditional property implementation
' Read-only property
' Write-only property |
// Auto-implemented properties
// Traditional property implementation
// Read-only property
// Write-only property |
||||||||||
Delegate Sub MsgArrivedEventHandler(ByVal message As String) Event MsgArrivedEvent As MsgArrivedEventHandler
' or to define an event which declares a delegate implicitly
AddHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback Imports System.Windows.Forms
Dim WithEvents MyButton As Button ' WithEvents can't be used on local variable
Private Sub MyButton_Click(ByVal sender As System.Object, _ |
delegate void MsgArrivedEventHandler(string message); event MsgArrivedEventHandler MsgArrivedEvent;
// Delegates must be used with events in C#
Button MyButton = new Button();
private void MyButton_Click(object sender, System.EventArgs e) { |
||||||||||
' Enforce accepted data type at compile-time
' Subroutine can display any type of List
' Class works on any data type
' Limit T to only types that implement IComparable |
// Enforce accepted data type at compile-time
// Function can display any type of List
// Class works on any data type
// Limit T to only types that implement IComparable |
||||||||||
Dim nums() As Integer = {5, 8, 2, 1, 6} |
int[] nums = { 5, 8, 2, 1, 6 }; // Get all numbers in the array above 4 var results = from value in nums where value > 4 select value; Console.WriteLine(results.Count()); // 3 Console.WriteLine(results.First()); // 5 Console.WriteLine(results.Last()); // 6 Console.WriteLine(results.Average()); // 6.33333 // Displays 5 8 6 foreach (int n in results) Console.Write(n + " "); results = results.Intersect(new[] {5, 6, 7}); // 5 6 results = results.Concat(new[] {5, 1, 5}); // 5 6 5 1 5 results = results.Distinct(); // 5 6 1 Student[] Students = { new Student{ Name = "Bob", GPA = 3.5 }, new Student{ Name = "Sue", GPA = 4.0 }, new Student{ Name = "Joe", GPA = 1.9 } }; // Get an ordered list of all students by GPA with GPA >= 3.0 var goodStudents = from s in Students where s.GPA >= 3.0 orderby s.GPA descending select s; Console.WriteLine(goodStudents.First().Name); // Sue |
||||||||||
Console.Write("What's your name? ") |
Console.Write("What's your name? ");
|
||||||||||
Imports System.IO
' Write out to text file
' Read all lines from text file
' Write out to binary file
' Read from binary file |
using System.IO;
// Write out to text file
// Read all lines from text file
// Write out to binary file
// Read from binary file |