VB.NET
PRogram Structure
C#
Imports System
Namespace Hello Class HelloWorld Overloads Shared SubMain(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 voidMain(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 + "!"); } } }
VB.NET
Comments
C#
' Single line onlyRem Single line only
// Single line /* Multiple line */ ///xmlcomments on single line /** XML comments on multiple lines */
VB.NET
Data Types
C#
Value TypesBoolean Byte Char (example: "A"c)Short, Integer, Long Single, Double Decimal Date
Reference TypesObject String
DimxAsInteger Console.WriteLine(x.GetType()) ' Prints System.Int32Console.WriteLine(TypeName(x)) ' Prints Integer
' Type conversionDim d As Single = 3.5 Dim i As Integer =CType(d, Integer) ' set to 4 (Banker's rounding)i =CInt(d) ' same result as CTypei =Int(d) ' set to 3 (Int function truncates the decimal)
Value Typesbool byte, sbyte char (example: 'A')short, ushort, int, uint, long, ulong float, double decimal DateTime (not a built-in C# type)
Reference Typesobject string
int x; Console.WriteLine(x.GetType()); // Prints System.Int32Console.WriteLine(typeof(int)); // Prints System.Int32
// Type conversionfloat d = 3.5f; int i =(int)d; // set to 3 (truncates decimal)
VB.NET
Constants
C#
Const MAX_STUDENTSAsInteger = 25 ' Can set to a const or var; may be initialized in a constructorReadOnlyMIN_DIAMETERAsSingle = 4.93
constint MAX_STUDENTS = 25; // Can set to a const or var; may be initialized in a constructorreadonlyfloat MIN_DIAMETER = 4.93f;
VB.NET
Enumerations
C#
EnumAction Start [Stop] ' Stop is a reservedWord Rewind ForwardEnd Enum
Enum Status Flunk = 50 Pass = 70 Excel= 90End EnumDim 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 70Console.WriteLine(Status.Pass.ToString()) ' Prints Pass
enumAction {Start, Stop, Rewind, Forward};enumStatus {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 70Console.WriteLine(Status.Pass); // Prints Pass
VB.NET
Operators
C#
Comparison= < > <= >= <>
Arithmetic+ - * / Mod \ (integer division)^ (raise to a power)
Assignment= += -= *= /= \= ^= <<= >>= &=
BitwiseAnd Or Not << >>
LogicalAndAlso OrElse And Or Xor Not
Note:AndAlso and OrElse perform short-circuit logical evaluations
String Concatenation& +
Comparison== < > <= >= !=
Arithmetic+ - * / % (mod)/ (integer division if both operands are ints)Math.Pow(x, y)
Assignment= += -= *= /= %= &= |= ^= <<= >>= ++ --
Bitwise& | ^ ~ << >>
Logical&& || & | ^ !
Note:&& and || perform short-circuit logical evaluations
String Concatenation+
VB.NET
Choices
C#
greeting =IIf(age < 20, "What's up?", "Hello")
' One line doesn't require "End If", no "Else"Iflanguage = "VB.NET"ThenlangType = "verbose"
' Use : to put two commands on same lineIfx <> 100 And y < 5Thenx *= 5:y *= 2
' PreferredIfx <> 100 And y < 5Then x *= 5 y *= 2End If
' or to break up any long single command use _If whenYouHaveAReally < longLine And itNeedsToBeBrokenInto2 > Lines Then_ UseTheUnderscore(charToBreakItUp)
'Ifx > 5Then x *= yElseIf x = 5Then x += yElseIfx < 10Then x -= yElse x /= yEnd If
Select Casecolor ' Must be a primitive data type Case"pink", "red" r += 1 Case"blue" b += 1 Case"green" g += 1 Case Else other += 1End Select
greeting = age < 20?"What's up?":"Hello";
if(x != 100 && y < 5) { // Multiple statements must be enclosed in {} x *= 5; y *= 2; }
No need for _ or : since ; is used to terminate each statement.
if(x > 5) x *= y;elseif (x == 5) x += y;elseif (x < 10) x -= y;else x /= y;
switch(color) { // Must be integer or string case"pink": case"red": r++;
break; // break is mandatory; no fall-through case"blue": b++;
break; case"green": g++;
break; default: other++;
break; // break necessary on default}
VB.NET
Loops
C#
Pre-test Loops:
Whilec < 10 c += 1End While
Do Untilc = 10 c += 1Loop
Do Whilec < 10 c += 1Loop
Forc = 2To10Step2 Console.WriteLine(c)Next
Post-test Loops:
Do c += 1Loop Whilec < 10
Do c += 1Loop Untilc = 10
' Array or collection loopingDim names As String() = {"Fred", "Sue", "Barney"}For Eachs As String Innames Console.WriteLine(s)Next
' Breaking out of loopsDim i As Integer = 0 While (True) If (i = 5) ThenExit While i += 1 End While
Pre-test Loops: // no "until" keywordwhile(c < 10) c++;
for(c = 2; c < = 10; c += 2) Console.WriteLine(c);
Post-test Loop:
do c++;while(c < 10);
// Array or collection loopingstring[] names = {"Fred", "Sue", "Barney"};foreach(string sinnames) Console.WriteLine(s);
// Breaking out of loopsint i = 0; while (true) { if (i == 5)
break; i++; }
VB.NET
Arrays
C#
Dim nums()As Integer = {1, 2, 3} For i As Integer = 0 To nums.Length - 1 Console.WriteLine(nums(i)) Next
' 4 is the index of the last element, so it holds 5 elementsDim names(4) As String names(0) = "David" names(5) = "Bobby" ' Throws System.IndexOutOfRangeException
' Resize the array, keeping the existing values (Preserve is optional)ReDim Preservenames(6)
Dim twoD(rows-1, cols-1) As Single twoD(2, 0) = 4.5
Dim jagged()()As Integer = { _ New Integer(4) {}, New Integer(1) {}, New Integer(2) {} } jagged(0)(4) = 5
int[]nums = {1, 2, 3}; for (int i = 0; i < nums.Length; i++) Console.WriteLine(nums[i]);
// 5 is the size of the arraystring[] names = new string[5]; names[0] = "David"; names[5] = "Bobby"; // Throws System.IndexOutOfRangeException
// C# can't dynamically resize an array. Just copy into new array.string[] names2 = new string[7]; Array.Copy(names, names2, names.Length); // or names.CopyTo(names2, 0);
float[,]twoD = new float[rows, cols]; twoD[2,0] = 4.5f;
int[][]jagged = new int[3][] { new int[5], new int[2], new int[3] }; jagged[0][4] = 5;
VB.NET
Functions
C#
' Pass by value (in, default), reference (in/out), and reference (out) SubTestFunc(ByValx As Integer,ByRefy As Integer,ByRefz As Integer) x += 1 y += 1 z = 5End Sub
Dim a = 1, b = 1, c As Integer ' c set to zero by default TestFunc(a, b, c) Console.WriteLine("{0} {1} {2}", a, b, c) ' 1 2 5
' Accept variable number of argumentsFunctionSum(ByValParamArraynumsAsInteger()) As Integer Sum = 0 For Each i As Integer In nums Sum += i NextEnd Function ' Or use Return statement like C#
Dim total As Integer = Sum(4, 3, 2, 1) ' returns 10
' Optional parameters must be listed last and must have a default valueSubSayHello(ByVal name As String,OptionalByVal prefix As String = "") Console.WriteLine("Greetings, " & prefix & " " & name)End Sub
SayHello("Strangelove", "Dr.") SayHello("Madonna")
// Pass by value (in, default), reference (in/out), and reference (out)void TestFunc(int x,refint y,outint z) { x++; y++; z = 5; } int a = 1, b = 1, c; // c doesn't need initializingTestFunc(a,refb,outc); Console.WriteLine("{0} {1} {2}", a, b, c); // 1 2 5
// Accept variable number of argumentsint Sum(paramsint[] nums) { int sum = 0; foreach (int i in nums) sum += i; return sum; }
int total = Sum(4, 3, 2, 1); // returns 10
/* C# doesn't support optional arguments/parameters. Just create two different versions of the same function. */ void SayHello(string name, string prefix) { Console.WriteLine("Greetings, " + prefix + " " + name); }
void SayHello(string name) { SayHello(name, ""); }
VB.NET
Strings
C#
Special character constantsvbCrLf, vbCr, vbLf, vbNewLine vbNullString vbTab vbBack vbFormFeed vbVerticalTab ""
' String concatenation (use & or +)Dim school As String = "Harding"&vbTab school = school & "University"' school is "Harding (tab) University"
' CharsDim letter AsChar= school.Chars(0) ' letter is Hletter = Convert.ToChar(65) ' letter is Aletter =Chr(65) ' same thingDim word() As Char = school.ToCharArray()' word holds Harding
' No string literal operator Dim msg As String = "File is c:\temp\x.dat"
' String comparisonDim mascot As String = "Bisons" If (mascot = "Bisons") Then ' trueIf (mascot.Equals("Bisons")) Then ' trueIf (mascot.ToUpper().Equals("BISONS")) Then ' trueIf (mascot.CompareTo("Bisons") = 0) Then ' true
Console.WriteLine(mascot.Substring(2, 3))' Prints "son"
' String matchingIf ("John 3:16"Like"Jo[Hh]? #:*") Then 'true
Imports System.Text.RegularExpressions ' More powerful than LikeDim r As NewRegex("Jo[hH]. \d:*") If (r.Match("John 3:16").Success) Then 'true
' My birthday: Oct 12, 1973Dim dt As New DateTime(1973, 10, 12) Dim s As String = "My birthday: " & dt.ToString("MMM dd, yyyy") Console.WriteLine(s)
' Mutable stringDim buffer As New System.Text.StringBuilder("two ") buffer.Append("three ") buffer.Insert(0, "one ") buffer.Replace("two", "TWO") Console.WriteLine(buffer) ' Prints "one TWO three"
Escape sequences\n, \r \t \\ \"
// String concatenationstringschool = "Harding\t"; school = school + "University"; // school is "Harding (tab) University"
// Charscharletter = school[0]; // letter is Hletter = Convert.ToChar(65); // letter is Aletter =(char)65; // same thingchar[]word = school.ToCharArray(); // word holds Harding
// String literalstring msg =@"File is c:\temp\x.dat";// same asstring msg = "File is c:\\temp\\x.dat";
// String comparisonstring mascot = "Bisons"; if (mascot == "Bisons") // trueif (mascot.Equals("Bisons")) // trueif (mascot.ToUpper().Equals("BISONS")) // trueif (mascot.CompareTo("Bisons") == 0) // true
Console.WriteLine(mascot.Substring(2, 3)); // Prints "son"
// String matching // No Like equivalent - use regular expressions
using System.Text.RegularExpressions;Regexr = newRegex(@"Jo[hH]. \d:*"); if (r.Match("John 3:16").Success) // true
// My birthday: Oct 12, 1973DateTime dt = new DateTime(1973, 10, 12); string s = "My birthday: " + dt.ToString("MMM dd, yyyy");
// Mutable stringSystem.Text.StringBuilderbuffer = new System.Text.StringBuilder("two "); buffer.Append("three "); buffer.Insert(0, "one "); buffer.Replace("two", "TWO"); Console.WriteLine(buffer); // Prints "one TWO three"
VB.NET
Exception Handling
C#
' Throw an exceptionDim ex As New Exception("Something is really wrong.")Throw ex
' Catch an exceptionTry y = 0 x = 10 / yCatchex As Exception Wheny = 0' Argument and When is optional Console.WriteLine(ex.Message)Finally Beep()End Try
' Deprecated unstructured error handlingOnErrorGoToMyErrorHandler ... MyErrorHandler: Console.WriteLine(Err.Description)
// Throw an exceptionException up = new Exception("Something is really wrong.");throwup; // ha ha
// Catch an exceptiontry{ y = 0; x = 10 / y; }catch(Exception ex) { // Argument is optional, no "When" keyword Console.WriteLine(ex.Message); }finally{ // Requires reference to the Microsoft.VisualBasic.dll // assembly (pre .NET Framework v2.0) Microsoft.VisualBasic.Interaction.Beep(); }
VB.NET
Namespaces
C#
NamespaceHarding.Compsci.Graphics ...End Namespace
' or
NamespaceHarding NamespaceCompsci NamespaceGraphics ... End Namespace End Namespace End Namespace
ImportsHarding.Compsci.Graphics
namespaceHarding.Compsci.Graphics { ... }
// or
namespaceHarding { namespaceCompsci { namespaceGraphics { ... } } }
usingHarding.Compsci.Graphics;
VB.NET
Classes / Interfaces
C#
accessibility keywordsPublic Private Friend Protected Protected Friend Shared
' InheritanceClass FootballGame Inherits Competition ...End Class
' Interface definitionInterfaceIAlarmClock ...End Interface
// Extending an interface InterfaceIAlarmClock InheritsIClock ...End Interface
// Interface implementationClassWristWatch ImplementsIAlarmClock, ITimer ...End Class
Accessibility keywordspublic private internal protected protected internal static
// Inheritanceclass FootballGame:Competition { ... }
// Interface definitioninterfaceIAlarmClock { ... }
// Extending an interface interfaceIAlarmClock:IClock { ... }
// Interface implementationclassWristWatch:IAlarmClock, ITimer { ... }
VB.NET
Constructors / Destructors
C#
ClassSuperHero Private _powerLevel As Integer
Public SubNew() _powerLevel = 0 End Sub
Public SubNew(ByVal powerLevel As Integer) Me._powerLevel = powerLevel End Sub
Protected Overrides SubFinalize() ' Desctructor code to free unmanaged resources MyBase.Finalize() End SubEnd Class
classSuperHero { private int _powerLevel;
public SuperHero() { _powerLevel = 0; }
public SuperHero(int powerLevel) { this._powerLevel= powerLevel; }
~SuperHero() { // Destructor code to free unmanaged resources. // Implicitly creates a Finalize method } }
VB.NET
Objects
C#
Dim hero As SuperHero = New SuperHero' orDim hero As New SuperHeroWithhero .Name = "SpamMan" .PowerLevel = 3End With
hero.Defend("Laura Jones") hero.Rest() ' Calling Shared method' orSuperHero.Rest()
Dim hero2 As SuperHero = hero ' Both reference the same objecthero2.Name = "WormWoman" Console.WriteLine(hero.Name) ' Prints WormWoman
hero =Nothing ' Free the object
If heroIsNothingThen _ hero = New SuperHero
Dim obj As Object = New SuperHero IfTypeOfobjIsSuperHero Then _ Console.WriteLine("Is a SuperHero object.")
SuperHero hero = new SuperHero();
// No "With" constructhero.Name = "SpamMan"; hero.PowerLevel = 3;
hero.Defend("Laura Jones"); SuperHero.Rest(); // Calling static method
SuperHero hero2 = hero; // Both reference the same objecthero2.Name = "WormWoman"; Console.WriteLine(hero.Name); // Prints WormWoman
hero =null; // Free the object
if (hero ==null) hero = new SuperHero();
Object obj = new SuperHero(); if (objisSuperHero) Console.WriteLine("Is a SuperHero object.");
VB.NET
Structs
C#
StructureStudentRecord Public name As String Public gpa As Single
Public Sub New(ByVal name As String, ByVal gpa As Single) Me.name = name Me.gpa = gpa End SubEnd Structure
Dim stu As StudentRecord = New StudentRecord("Bob", 3.5) Dim stu2 As StudentRecord = stu
stu2.name = "Sue" Console.WriteLine(stu.name) ' Prints BobConsole.WriteLine(stu2.name) ' Prints Sue
structStudentRecord { public string name; public float gpa;
public StudentRecord(string name, float gpa) { this.name = name; this.gpa = gpa; } }StudentRecord stu = new StudentRecord("Bob", 3.5f); StudentRecord stu2 = stu;
stu2.name = "Sue"; Console.WriteLine(stu.name); // Prints BobConsole.WriteLine(stu2.name); // Prints Sue
VB.NET
Properties
C#
Private _size As Integer
PublicPropertySize() As Integer Get Return _size End Get Set(ByVal Value As Integer) If Value < 0 Then _size = 0 Else _size = Value End If End SetEnd Property
foo.Size += 1
private int _size;
public int Size { get{ return _size; } set{ if (value < 0) _size = 0; else _size = value; } } foo.Size++;
VB.NET
Delegates / Events
C#
DelegateSub MsgArrivedEventHandler(ByVal message As String)
EventMsgArrivedEvent As MsgArrivedEventHandler
' or to define an event which declares a delegate implicitlyEventMsgArrivedEvent(ByVal message As String)
AddHandlerMsgArrivedEvent,AddressOfMy_MsgArrivedCallback' Won't throw an exception if obj is NothingRaiseEventMsgArrivedEvent("Test message")RemoveHandlerMsgArrivedEvent,AddressOfMy_MsgArrivedCallback
Imports System.Windows.Forms
DimWithEventsMyButton As Button ' WithEvents can't be used on local variableMyButton = New Button
Private Sub MyButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs)HandlesMyButton.Click MessageBox.Show(Me, "Button was clicked", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub
delegatevoid MsgArrivedEventHandler(string message);
eventMsgArrivedEventHandler MsgArrivedEvent;
// Delegates must be used with events in C#
MsgArrivedEvent+=new MsgArrivedEventHandler(My_MsgArrivedEventCallback); MsgArrivedEvent("Test message"); // Throws exception if obj is nullMsgArrivedEvent-=new MsgArrivedEventHandler(My_MsgArrivedEventCallback);
using System.Windows.Forms;
Button MyButton = new Button(); MyButton.Click += new System.EventHandler(MyButton_Click);
private void MyButton_Click(object sender, System.EventArgs e) { MessageBox.Show(this, "Button was clicked", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); }
VB.NET
Console I/O
C#
Console.Write("What's your name? ") Dim name As String = Console.ReadLine() Console.Write("How old are you? ") Dim age As Integer = Val(Console.ReadLine()) Console.WriteLine("{0} is {1} years old.", name, age) ' orConsole.WriteLine(name & " is " & age & " years old.")
Dim c As Integer c = Console.Read() ' Read single charConsole.WriteLine(c) ' Prints 65 if user enters "A"
Console.Write("What's your name? "); string name = Console.ReadLine(); Console.Write("How old are you? "); int age = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("{0} is {1} years old.", name, age);// orConsole.WriteLine(name + " is " + age + " years old.");
int c = Console.Read(); // Read single charConsole.WriteLine(c); // Prints 65 if user enters "A"
VB.NET
File I/O
C#
Imports System.IO
' Write out to text fileDim writer AsStreamWriter= File.CreateText("c:\myfile.txt") writer.WriteLine("Out to file.") writer.Close()
' Read all lines from text fileDim reader AsStreamReader= File.OpenText("c:\myfile.txt") Dim line As String = reader.ReadLine() While Not line Is Nothing Console.WriteLine(line) line = reader.ReadLine() End While reader.Close()
' Write out to binary fileDim str As String = "Text data" Dim num As Integer = 123 Dim binWriter As NewBinaryWriter(File.OpenWrite("c:\myfile.dat")) binWriter.Write(str) binWriter.Write(num) binWriter.Close()
' Read from binary fileDim binReader As NewBinaryReader(File.OpenRead("c:\myfile.dat")) str = binReader.ReadString() num = binReader.ReadInt32() binReader.Close()
using System.IO;
// Write out to text fileStreamWriterwriter = File.CreateText("c:\\myfile.txt"); writer.WriteLine("Out to file."); writer.Close();
// Read all lines from text fileStreamReaderreader = File.OpenText("c:\\myfile.txt"); string line = reader.ReadLine(); while (line != null) { Console.WriteLine(line); line = reader.ReadLine(); } reader.Close();
// Write out to binary filestring str = "Text data"; int num = 123;BinaryWriterbinWriter = new BinaryWriter(File.OpenWrite("c:\\myfile.dat")); binWriter.Write(str); binWriter.Write(num); binWriter.Close();
// Read from binary fileBinaryReaderbinReader = new BinaryReader(File.OpenRead("c:\\myfile.dat")); str = binReader.ReadString(); num = binReader.ReadInt32(); binReader.Close();