VB.NET

Program Structure

C#

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 + "!");
      }
   }
}

VB.NET

Comments

C#

' Single line
only

REM Single
line only

''' <summary>XML comments</summary>

// Single line
/* Multiple
    line  */
/// <summary>XML comments on single line</summary>
/** <summary>XML comments on multiple lines</summary> */

VB.NET

Data Types

C#

Value Types
Boolean
Byte, SByte
Char
Short, UShort, Integer, UInteger, Long, ULong
Single, Double
Decimal
Date   (alias of System.DateTime)
structures
enumerations

Reference Types
Object
String
arrays
delegates

Initializing
Dim correct As Boolean = True
Dim b As Byte = &H2A   'hex or
&O52 for octal

Dim person As Object = Nothing
Dim name As String = "Dwight"
Dim grade As Char = "B"c
Dim today As Date = #12/31/2010 12:15:00 PM#
Dim amount As Decimal = 35.99@
Dim gpa As Single = 2.9!
Dim pi As Double = 3.14159265
Dim lTotal As Long = 123456L
Dim sTotal As Short = 123S
Dim usTotal As UShort = 123US
Dim uiTotal As UInteger = 123UI
Dim ulTotal As ULong = 123UL

Nullable Types
Dim x? As Integer = Nothing

Anonymous Types
Dim stu = New With {.Name = "Sue", .Gpa = 3.4}
Dim stu2 = New With {Key .Name = "Bob", .Gpa = 2.9}

Implicitly Typed Local Variables
Dim s = "Hello!"
Dim nums = New Integer() {1, 2, 3}
Dim hero = New SuperHero With {.Name = "Batman"}

Type Information
Dim x As Integer 
Console.WriteLine(x.GetType())          ' Prints System.Int32 
Console.WriteLine(GetType(Integer))   ' Prints System.Int32 
Console.WriteLine(TypeName(x))        ' Prints Integer

Dim c as New Circle
isShape = TypeOf c Is Shape   ' True if c is a Shape

isSame = o1 Is o2   //
True if o1 and o2 reference same object

Type Conversion / Casting
Dim d As Single = 3.5 
Dim i As Integer = CType(d, Integer)   ' set to 4 (Banker's rounding)
i = CInt(d)  ' same result
as CType

i = Int(d)    '
set to 3 (Int function truncates the decimal)

Dim s As New Shape
Dim c As Circle = TryCast(s, Circle)   ' Returns Nothing if type cast fails
c = DirectCast(s, Circle)   '
Throws InvalidCastException if type cast fails

Value Types
bool
byte, sbyte
char
short, ushort, int, uint, long, ulong
float, double
decimal
DateTime   (not a built-in
C# type)

structs
enumerations

Reference Types
object
string
arrays
delegates

Initializing
bool correct = true;
byte b = 0x2A;   // hex
object person = null;
string name = "Dwight";
char grade = 'B';
DateTime today = DateTime.Parse("12/31/2010 12:15:00 PM");
decimal amount = 35.99m;
float gpa = 2.9f;
double pi = 3.14159265;   // or
3.14159265D

long lTotal = 123456L;
short sTotal = 123;
ushort usTotal = 123;
uint uiTotal = 123;   // or 123U
ulong ulTotal = 123;   // or 123UL

Nullable Types
int? x = null;

Anonymous
Types

var stu = new {Name = "Sue", Gpa = 3.5};
var stu2 = new {Name = "Bob", Gpa = 2.9};   // no Key equivalent

Implicitly Typed Local Variables
var s = "Hello!";
var nums = new int[] { 1, 2, 3 };
var hero = new SuperHero() { Name = "Batman" };

Type Information
int x;
Console.WriteLine(x.GetType());        
     // Prints System.Int32
Console.WriteLine(typeof(int));         
     // Prints System.Int32 
Console.WriteLine(x.GetType().Name);   // prints Int32

Circle c = new Circle();
isShape = c is Shape;   // true if c is a Shape

isSame = Object.ReferenceEquals(o1, o2)   // true if o1 and o2 reference same object

Type Conversion / Casting 
float d = 3.5f; 
i = Convert.ToInt32(d);     // Set to 4 (rounds) 
int i = (int)d;     //
set to 3 (truncates decimal)

Shape s = new Shape();
Circle c = s as Circle;   // Returns null if type cast fails
c = (Circle)s;   // Throws
InvalidCastException if type cast fails

VB.NET

Constants

C#

Const MAX_STUDENTS As Integer
= 25

' Can set to a const or var;
may be initialized in a constructor

ReadOnly MIN_DIAMETER As Single = 4.93

const int MAX_STUDENTS =
25;

// Can set to a const or var; may be
initialized in a constructor 

readonly float MIN_DIAMETER = 4.93f;

VB.NET

Enumerations

C#

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

VB.NET

Operators

C#

Comparison
=  <  >  <=  >=  <>

Arithmetic
+  -  *  /
Mod
\  (integer division)
^  (raise to a power)

Assignment
=  +=  -=  *=  /=  \=  ^=  <<=
 >>=  &=

Bitwise
And   Or   Xor   Not   <<   >>

Logical
AndAlso   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#

' Null-coalescing operator if called
with 2 arguments

x = If(y, 5)   ' if y is
not Nothing then x = y, else x = 5

' Ternary/Conditional operator (IIf
evaluates 2nd and 3rd expressions)

greeting = If(age < 20, "What's up?",
"Hello")

' One line doesn't require "End
If"

If age < 20 Then greeting = "What's
up?" 
If age < 20 Then greeting = "What's
up?" Else greeting = "Hello"

' Use : to put two commands on same
line

If x <> 100 AndAlso y < 5 Then x *=
: y *= 2

' Preferred
If x <> 100 AndAlso y < 5 Then
  x *= 5 
  y *= 2
End If

' Use _ to break up long single line
or use implicit line break

If whenYouHaveAReally < longLine And 
  itNeedsToBeBrokenInto2 > Lines Then _
  UseTheUnderscore(charToBreakItUp)

'If x > 5 Then 
  x *= y 
ElseIf x = 5 OrElse y Mod 2 = 0 Then 
  x += y 
ElseIf x < 10 Then 
  x -= y 
Else 
  x /= y 
End If

Select Case color   ' Must be a primitive data type
  Case "pink", "red"
    r += 1 
  Case "blue" 
    b += 1 
  Case "green" 
    g += 1 
  Case Else 
    other += 1 
End Select

// Null-coalescing operator
x = y ?? 5;   // if y
!= null then x = y, else x = 5

// Ternary/Conditional operator
greeting = age < 20 ? "What's up?" : "Hello";

if (age < 20)
  greeting = "What's up?";
else
  greeting = "Hello";

// Multiple statements must be
enclosed in {}

if (x != 100 && y < 5) {   
  x *= 5;
  y *= 2;
}

No need for _ or : since ; is used
to terminate each statement.


if
 (x > 5) 
  x *= y; 
else if (x == 5 || y % 2 == 0) 
  x += y; 
else if (x < 10) 
  x -= y; 
else 
  x /= y;

// Every case must end with break or goto case 
switch (color) {                          // Must be integer or string
  case "pink":
  case "red":   
r++;    break; 
  case "blue":  
b++;   break;
  case "green": g++;   break;
  default:    other++;   break;       // break necessary on default
}

VB.NET

Loops

C#

Pre-test Loops:

While c < 10 
  c += 1 
End While

Do Until c = 10 
  c += 1 
Loop

Do While c < 10 
  c += 1 
Loop

For c
= 2 To 10 Step 2 
  Console.WriteLine(c) 
Next


Post-test Loops:

Do 
  c += 1 
Loop While c < 10

Do 
  c += 1 
Loop Until c = 10

'  Array or collection looping
Dim names As String() = {"Fred", "Sue",
"Barney"} 
For Each s As String In names 
  Console.WriteLine(s) 
Next

' Breaking out of loops
Dim i As Integer = 0
While (True)
  If (i = 5) Then Exit While
  i += 1
End While

' Continue to next iteration
For i = 0 To 4
  If i < 4 Then Continue For
  Console.WriteLine(i)   ' Only
prints 4

Next

Pre-test
Loops:

// no "until" keyword
while (c < 10) 
  c++;

for (c = 2; c <= 10; c += 2) 
  Console.WriteLine(c);

Post-test Loop:

do 
  c++; 
while (c < 10);

// Array or collection looping
string[] names = {"Fred", "Sue", "Barney"};
foreach (string s in names)
  Console.WriteLine(s);

// Breaking out of loops
int i = 0;
while (true) {
  if (i == 5)
    break;
  i++;
}

// Continue to next iteration
for (i = 0; i <= 4; i++) {
  if (i < 4)
    continue;
  Console.WriteLine(i);   // Only
prints 4

}

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 elements

Dim names(4) As String 
names(0) = "David"
names(5) = "Bobby"  ' Throws
System.IndexOutOfRangeException

' Resize the array, keeping the existing values
(Preserve is optional)

ReDim Preserve names(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 array
string[] names = new string[5];
names[0] = "David";
names[5] = "Bobby";   //
Throws System.IndexOutOfRangeException

// Add two elements, keeping the existing values
Array.Resize(ref names, 7);

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)
  
Sub TestFunc(ByVal x As Integer, ByRef y
As Integer, ByRef z As Integer)
  x += 1
  y += 1 
  z = 5 
End 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
arguments
 
Function Sum(ByVal ParamArray nums As Integer())
As Integer 
  Sum = 0  
  For Each i As Integer In nums 
    Sum += i 
  Next 
End 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 value
 
Sub SayHello(ByVal name As String, Optional ByVal
prefix As String = "")
  Console.WriteLine("Greetings, " & prefix &
" " & name) 
End Sub

SayHello("Strangelove", "Dr.")
SayHello("Mom")

// 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
TestFunc(a, ref b, out c);
Console.WriteLine("{0} {1} {2}", a, b, c);  // 1 2 5

// Accept variable number of
arguments

int Sum(params int[] nums) {
  int sum = 0;
  foreach (int i in nums)
    sum += i;
  return sum;
}

int total = Sum(4, 3, 2, 1);   // returns 10

/* C# 4.0 supports optional
parameters. Previous versions required function overloading. */
  
void SayHello(string name, string prefix = "") {
  Console.WriteLine("Greetings, " + prefix + " " +
name);
}

SayHello("Strangelove",
"Dr.");
SayHello("Mom");

VB.NET

Strings

C#

Special character constants (all
also accessible from ControlChars class)

vbCrLf, 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"
school &= "University"   ' Same thing (+= does the same)

' Chars
Dim letter As Char = school.Chars(0)   ' letter is H 
letter = "Z"c              
                     
    ' letter is Z 
letter =
Convert.ToChar(65)              
 ' letter is A 
letter = Chr(65)                                 ' same thing 
Dim word() As Char = school.ToCharArray() ' word holds Harding

' No string literal operator 
Dim filename As String = "c:\temp\x.dat"

' String comparison
Dim mascot As String = "Bisons"
If (mascot = "Bisons") Then   '
true

If (mascot.Equals("Bisons")) Then   ' true
If (mascot.ToUpper().Equals("BISONS")) Then
 ' true
If (mascot.CompareTo("Bisons") = 0) Then   ' true

' String matching with Like - Regex
is more powerful

If ("John 3:16" Like "Jo[Hh]? #:*") Then
  'true

' Substring
s = mascot.Substring(2, 3)) ' s is
"son"

' Replacement
s = mascot.Replace("sons", "nomial")) ' s is "Binomial"

' Split
Dim names As String = "Michael,Dwight,Jim,Pam"
Dim parts() As String = names.Split(",".ToCharArray())
  ' One name in each slot

' Date to string
Dim dt As New DateTime(1973, 10, 12)
Dim s As String = "My birthday: " & dt.ToString("MMM dd,
yyyy")   ' Oct 12, 1973

' Integer to String
Dim x As Integer = 2
Dim y As String = x.ToString()     '
y is "2"

' String to Integer
Dim x As Integer = Convert.ToInt32("-5")     ' x is -5

' Mutable string 
Dim 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
\r    // carriage-return
\n    // line-feed
\t    // tab
\\    // backslash
\"    // quote

// String concatenation
string school = "Harding\t";
school = school + "University";   // school is "Harding (tab) University" 
school += "University";   // Same thing

// Chars
char letter = school[0]; 
          // letter is H 
letter = 'Z';                  
            //
letter is Z
 
letter = Convert.ToChar(65);     //
letter is A
 
letter = (char)65;                    // same thing 
char[] word = school.ToCharArray();   // word holds Harding

// String literal 
string filename = @"c:\temp\x.dat";   // Same as "c:\\temp\\x.dat"

// String comparison
string mascot = "Bisons"; 
if (mascot == "Bisons")    // true
if (mascot.Equals("Bisons"))   // true
if (mascot.ToUpper().Equals("BISONS"))   // true
if (mascot.CompareTo("Bisons") == 0)    // true

// String matching - No Like
equivalent, use Regex

// Substring
s = mascot.Substring(2, 3))     // s is "son"

// Replacement
s = mascot.Replace("sons", "nomial"))  
  // s is "Binomial"

// Split
string names = "Michael,Dwight,Jim,Pam";
string[] parts = names.Split(",".ToCharArray());
  // One name in each slot

// Date to string
DateTime dt = new DateTime(1973, 10, 12);
string s = dt.ToString("MMM dd, yyyy");     // Oct 12, 1973

// int to string
int x = 2;
string y = x.ToString();     // y
is "2"

// string to
int

int x = Convert.ToInt32("-5");     // x is -5

// Mutable string 
System.Text.StringBuilder buffer = 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

Regular Expressions

C#

Imports System.Text.RegularExpressions

' Match a string pattern
Dim r As New Regex("j[aeiou]h?. \d:*",
RegexOptions.IgnoreCase Or _
        RegexOptions.Compiled)
If (r.Match("John 3:16").Success) Then   'true
    Console.WriteLine("Match")
End If

' Find and remember all matching
patterns

Dim s As String = "My number is 305-1881, not 305-1818."
Dim r As New Regex("(\d+-\d+)")
Dim m As Match = r.Match(s)     ' Matches 305-1881 and 305-1818
While m.Success
    Console.WriteLine("Found number: " &
m.Groups(1).Value & " at position " _
            & m.Groups(1).Index.ToString)
    m = m.NextMatch() 
End While

' Remeber multiple parts of matched
pattern

Dim r As New Regex("(\d\d):(\d\d) (am|pm)")
Dim m As Match = r.Match("We left at 03:15 pm.")
If m.Success Then
    Console.WriteLine("Hour: " &
m.Groups(1).ToString)       '
03

    Console.WriteLine("Min: " & m.Groups(2).ToString)
        ' 15
    Console.WriteLine("Ending: " &
m.Groups(3).ToString)   ' pm
End If

' Replace all occurrances of a
pattern

Dim r As New Regex("h\w+?d", RegexOptions.IgnoreCase)
Dim s As String = r.Replace("I heard this was HARD!",
"easy")   ' I easy this was
easy!

' Replace matched patterns
Dim s As String = Regex.Replace("123 < 456", "(\d+)
. (\d+)", "$2 > $1")   ' 456 > 123

' Split a string based on a pattern
Dim names As String = "Michael, Dwight, Jim, Pam"
Dim r As New Regex(",\s*")
Dim parts() As String = r.Split(names)   ' One name in each slot

using System.Text.RegularExpressions;

// Match a string pattern 
Regex r = new Regex(@"j[aeiou]h?. \d:*",
RegexOptions.IgnoreCase | 
        RegexOptions.Compiled);
if (r.Match("John 3:16").Success)   // true
    Console.WriteLine("Match");

// Find and remember all matching patterns
string s = "My number is 305-1881, not 305-1818.";
Regex r = new Regex("(\\d+-\\d+)");
// Matches 305-1881 and 305-1818
for (Match m = r.Match(s); m.Success; m = m.NextMatch()) 
    Console.WriteLine("Found number: " + m.Groups[1] +
" at position " + 
        m.Groups[1].Index);

// Remeber multiple parts of matched pattern
Regex r = new Regex("@(\d\d):(\d\d) (am|pm)");
Match m = r.Match("We left at 03:15 pm.");
if (m.Success) {
    Console.WriteLine("Hour: " + m.Groups[1]);  
    // 03 
    Console.WriteLine("Min: " + m.Groups[2]);  
      // 15 
    Console.WriteLine("Ending: " + m.Groups[3]);
  // pm 
}

// Replace all occurrances of a
pattern

Regex r = new Regex("h\\w+?d", RegexOptions.IgnoreCase);
string s = r.Replace("I heard this was HARD!",
"easy"));   // I easy this
was easy!

// Replace matched patterns
string s = Regex.Replace("123 < 456", @"(\d+) .
(\d+)", "$2 > $1");   //
456 > 123

// Split a string based on a pattern
string names = "Michael, Dwight, Jim, Pam";
Regex r = new Regex(@",\s*");
string[] parts = r.Split(names);   // One name in each slot

VB.NET

Exception Handling

C#

' Throw an exception
Dim ex As New Exception("Something is really wrong.") 
Throw  ex

' Catch an exception
Try 
  y = 0
  x = 10 / y
Catch ex As Exception When y = 0 ' Argument and When is optional
  Console.WriteLine(ex.Message) 
Finally 
  Beep() 
End Try

' Deprecated unstructured error
handling

On Error GoTo MyErrorHandler
...
MyErrorHandler: Console.WriteLine(Err.Description)

// Throw an exception
Exception up = new Exception("Something is really wrong."); 
throw up;  // ha ha

// Catch an exception
try { 
  y = 0; 
  x = 10 / y; 

catch (Exception ex) {   // Argument is optional, no "When" keyword 
  Console.WriteLine(ex.Message); 

finally { 
  Microsoft.VisualBasic.Interaction.Beep(); 
}

VB.NET

Namespaces

C#

Namespace Harding.Compsci.Graphics 
  ...
End Namespace

' or

Namespace Harding 
  Namespace Compsci 
    Namespace Graphics 
      ...
    End Namespace 
  End Namespace 
End Namespace

Imports Harding.Compsci.Graphics

namespace Harding.Compsci.Graphics {
  ...
}

// or

namespace Harding {
  namespace Compsci {
    namespace Graphics {
      ...
    }
  }
}

using Harding.Compsci.Graphics;

VB.NET

Classes &
Interfaces

C#

Access Modifiers 
Public
Private
Friend
Protected
Protected Friend

Class Modifiers
MustInherit
NotInheritable

Method Modifiers 
MustOverride
NotInheritable
Shared
Overridable

' All members are Shared
Module

' Partial classes
Partial Class Competition
  ...
End Class

' Inheritance
Class FootballGame
  Inherits Competition
  ...
End Class

' Interface definition
Interface IAlarmClock
  Sub Ring()
  Property TriggerDateTime() As DateTime
End Interface

' Extending an interface
Interface IAlarmClock 
  Inherits IClock
  ...
End Interface

' Interface implementation
Class WristWatch 
  Implements IAlarmClock, ITimer

Public Sub Ring() Implements IAlarmClock.Ring
    Console.WriteLine("Wake up!")
  End Sub

Public Property TriggerDateTime As DateTime Implements IAlarmClock.TriggerDateTime
  ...
End Class

Access Modifiers 
public
private
internal
protected
protected internal

Class Modifiers 
abstract
sealed
static

Method Modifiers 
abstract
sealed
static
virtual

No Module equivalent - just use
static class

// Partial classes
partial class Competition {
  ...
}

// Inheritance
class FootballGame : Competition {
  ...
}


// Interface definition

interface IAlarmClock {
  void Ring(); 
  DateTime CurrentDateTime { get; set; }
}

// Extending an interface 
interface IAlarmClock : IClock {
  ...
}


// Interface implementation

class WristWatch : IAlarmClock, ITimer {

public void Ring() {
    Console.WriteLine("Wake up!");
  }

public DateTime TriggerDateTime { get; set; }
  ...
}

VB.NET

Constructors &
Destructors

C#

Class SuperHero
  Inherits Person

Private powerLevel As Integer
  Private name As String

' Default constructor
  Public Sub New() 
    powerLevel = 0
    name = "Super Bison" 
  End Sub

Public Sub New(ByVal powerLevel As Integer) 
    Me.New("Super Bison")   ' Call other constructor
    Me.powerLevel = powerLevel 
  End Sub

Public Sub New(ByVal name As String) 
    MyBase.New(name)   ' Call base classes' constructor 
    Me.name = name
  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 : Person {

private int powerLevel;
  private string name;

// Default constructor
  public SuperHero() {
    powerLevel = 0;
    name = "Super Bison";
  }

public SuperHero(int powerLevel) 
    : this("Super Bison") {   // Call other constructor
    this.powerLevel = powerLevel; 
  }

public SuperHero(string name)
    : base(name) {   // Call base classes' constructor
    this.name = name;
  }

static SuperHero() {
    // Static constructor invoked
before 1st instance is created

  }

~SuperHero() {
    // Destructor implicitly
creates a Finalize method

  }

}

VB.NET

Using Objects

C#

Dim hero As SuperHero = New SuperHero
' or
Dim hero As New SuperHero

With hero 
  .Name = "SpamMan" 
  .PowerLevel = 3 
End With

hero.Defend("Laura Jones") 
hero.Rest()     '
Calling Shared method

' or
SuperHero.Rest()

Dim hero2 As SuperHero = hero  ' Both reference the same object 
hero2.Name = "WormWoman" 
Console.WriteLine(hero.Name)   '
Prints WormWoman

hero = Nothing    ' Free the object

If hero Is Nothing Then

  hero = New SuperHero

Dim obj As Object = New SuperHero 
If TypeOf obj Is SuperHero Then _
  Console.WriteLine("Is a SuperHero object.")

' Mark object for quick disposal
Using reader As StreamReader = File.OpenText("test.txt")
  Dim line As String = reader.ReadLine()
  While Not line Is Nothing
    Console.WriteLine(line)
    line = reader.ReadLine()
  End While
End Using

SuperHero hero = new SuperHero();

// No "With" but can use
object initializers

SuperHero hero = new SuperHero() { Name = "SpamMan", PowerLevel = 3
};

hero.Defend("Laura Jones");
SuperHero.Rest();   // Calling
static method

SuperHero hero2 = hero;   // Both
reference the same object
 
hero2.Name = "WormWoman"; 
Console.WriteLine(hero.Name);   //
Prints WormWoman

hero = null ;   // Free the object

if (hero == null)
  hero = new SuperHero();

Object obj = new SuperHero(); 
if (obj is SuperHero) 
  Console.WriteLine("Is a SuperHero object.");

// Mark
object for quick disposal

using (StreamReader reader = File.OpenText("test.txt"))
{
  string line;
  while ((line = reader.ReadLine()) != null)
    Console.WriteLine(line);
}

VB.NET

Structs

C#

Structure Student 
  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 Sub 
End Structure

Dim stu As Student = New
Student("Bob", 3.5) 
Dim stu2 As Student = stu

stu2.name = "Sue" 
Console.WriteLine(stu.name)    '
Prints Bob
 
Console.WriteLine(stu2.name)  ' Prints Sue

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);
Student stu2 = stu;

stu2.name = "Sue";
Console.WriteLine(stu.name);    //
Prints Bob

Console.WriteLine(stu2.name);   //
Prints Sue

VB.NET

Properties

C#

' Auto-implemented properties are
new to VB10

Public Property Name As String
Public Property Size As Integer = -1     ' Default value, Get and Set both Public

' Traditional property
implementation

Private mName As String
Public Property Name() As String
    Get
        Return mName
    End Get
    Set(ByVal value As String)
        mName = value
    End Set
End Property

' Read-only property
Private mPowerLevel As Integer
Public ReadOnly Property PowerLevel() As Integer
    Get
        Return mPowerLevel
    End Get
End Property

' Write-only property
Private mHeight As Double
Public WriteOnly Property Height() As Double
    Set(ByVal value As Double)
        mHeight = If(value < 0, mHeight = 0, mHeight =
value)
    End Set
End Property

// Auto-implemented properties
public string Name { get; set; }
public int Size { get; protected set; }
    // Set default value in
constructor

// Traditional property implementation
private string name;
public string Name {
  get {
    return name;
  }
  set {
    name = value;
  }
}

// Read-only property
private int powerLevel;
public int PowerLevel {
  get {
    return powerLevel;
  }
}

// Write-only property
private double height;
public double Height {
  set {
    height = value < 0 ? 0 : value;
  }
}

VB.NET

Generics

C#

' Enforce accepted data type at
compile-time 

Dim numbers As New List(Of Integer)
numbers.Add(2)
numbers.Add(4)
DisplayList(Of Integer)(numbers)

' Subroutine can display any type of
List 

Sub DisplayList(Of T)(ByVal list As List(Of T))
    For Each item As T In list
        Console.WriteLine(item)
    Next
End Sub

' Class works on any data type 
Class SillyList(Of T)
    Private list(10) As T
    Private rand As New Random

Public Sub Add(ByVal item As T)
        list(rand.Next(10)) = item
    End Sub

Public Function GetItem() As T
        Return list(rand.Next(10))
    End Function
End Class

' Limit T to only types that
implement IComparable

Function Maximum(Of T As IComparable)(ByVal ParamArray items As T())
As T
    Dim max As T = items(0)
    For Each item As T In items
        If item.CompareTo(max) > 0 Then max = item
    Next
    Return max
End Function

// Enforce accepted data type at
compile-time 

List<int> numbers = new List<int>();
numbers.Add(2);
numbers.Add(4);
DisplayList<int>(numbers);

// Function can display any type of
List 

void DisplayList<T>(List<T> list) {
    foreach (T item in list)
        Console.WriteLine(item);
}

// Class works on any data type 
class SillyList<T> {
    private T[] list = new T[10];
    private Random rand = new Random();

public void Add(T item) {
        list[rand.Next(10)] = item;
    }

public T GetItem() {
        return list[rand.Next(10)];
    }
}

// Limit T to only types that
implement IComparable

T Maximum<T>(params T[] items) where
T : IComparable<T>
 {
    T max = items[0];
    foreach (T item in items)
        if (item.CompareTo(max) > 0)
            max = item;
    return max;
}

VB.NET

Delegates & Lambda Expressions

C#

Delegate Sub HelloDelegate(ByVal s As String)

Sub SayHello(ByVal s As String)
  Console.WriteLine("Hello, " & s)
End Sub

' Create
delegate that calls SayHello

Dim hello As HelloDelegate = AddressOf SayHello
hello("World")   ' Or
hello.Invoke("World")

' Use lambda expression (anonymous
method) instead of a delegate

Dim hello2 = Sub(x) Console.WriteLine("Hello, " & x)
hello2("World")

' Use Func(Of T, TResult) delegate
to call Uppercase

Dim convert As Func(Of String, String) = AddressOf Uppercase
Console.WriteLine(convert("test"))

Function Uppercase(s As String) As String
  Return s.ToUpper()
End Function

' Declare and invoke lambda
expression

Console.WriteLine((Function(num As Integer) num + 1)(2))

' Pass lambda expression as an
argument

TestValues(Function(x, y) x Mod y = 0)

Sub TestValues(ByVal f As Func(Of
Integer, Integer, Boolean))
  If f(8, 4) Then
    Console.WriteLine("true")
  Else
    Console.WriteLine("false")
  End If
End Sub

delegate void HelloDelegate(string s);

void SayHello(string s) {
  Console.WriteLine("Hello, " + s);
}

// C# 1.0 delegate syntax with named
method

HelloDelegate hello = new HelloDelegate(SayHello);
hello("World");   // Or
hello.Invoke("World");

// C# 2.0 delegate syntax with
anonymous method

HelloDelegate hello2 = delegate(string s) { 
  Console.WriteLine("Hello, " + s); 
};
hello2("World");

// C# 3.0 delegate syntax with
lambda expression

HelloDelegate hello3 = s => {
Console.WriteLine("Hello, " + s); };
hello3("World");

// Use Func<in T, out TResult>
delegate to call Uppercase

Func<string, string> convert = Uppercase;
Console.WriteLine(convert("test"));

string Uppercase(string s) {
  return s.ToUpper();
}

// Declare and invoke Func using a
lambda expression

Console.WriteLine(new Func<int, int>(num => num
+ 1)(2));

// Pass lamba expression as an
argument

TestValues((x, y) => x % y == 0);

void TestValues(Func<int, int,
bool> f) {
  if (f(8, 4))
    Console.WriteLine("true");
  else
    Console.WriteLine("false");
}

VB.NET

Events

C#

Delegate Sub MsgArrivedEventHandler(ByVal message
As String)

Event MsgArrivedEvent As MsgArrivedEventHandler

' or to define an event which
declares a delegate implicitly

Event MsgArrivedEvent(ByVal message As String)

AddHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback 
' Won't throw an exception if obj is Nothing
RaiseEvent MsgArrivedEvent("Test
message") 
RemoveHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback

Imports System.Windows.Forms

Dim WithEvents MyButton As
Button   ' WithEvents can't be
used on local variable

MyButton = New Button

Sub MyButton_Click(ByVal sender As
System.Object, _
  ByVal e As System.EventArgs) Handles MyButton.Click 
  MessageBox.Show(Me, "Button was clicked", "Info",
_
    MessageBoxButtons.OK, MessageBoxIcon.Information) 
End Sub

delegate void MsgArrivedEventHandler(string
message);

event MsgArrivedEventHandler MsgArrivedEvent;

// Delegates must be used with
events in C#

MsgArrivedEvent += new
MsgArrivedEventHandler(My_MsgArrivedEventCallback);
MsgArrivedEvent("Test message");    // Throws exception if obj is null
MsgArrivedEvent -= new
MsgArrivedEventHandler(My_MsgArrivedEventCallback);

using System.Windows.Forms;

Button MyButton = new Button(); 
MyButton.Click += new System.EventHandler(MyButton_Click);

void MyButton_Click(object sender,
System.EventArgs e) { 
  MessageBox.Show(this, "Button was clicked",
"Info", 
    MessageBoxButtons.OK, MessageBoxIcon.Information); 
}

VB.NET

LINQ

C#

Dim nums() As Integer = {5, 8, 2, 1, 6}

' Get all numbers in the array above 4
Dim results = From n In nums
                  Where n
> 4
                  Select n

' Same thing using lamba expression
results = nums.Where(Function(n) n > 4)

' Displays 5 8 6 
For Each n As Integer In results
    Console.Write(n & " ")
Next

Console.WriteLine(results.Count())     ' 3 
Console.WriteLine(results.First())     ' 5 
Console.WriteLine(results.Last())     ' 6 
Console.WriteLine(results.Average())     ' 6.33333

results = results.Intersect({5, 6, 7})     ' 5 6 
results = results.Concat({5, 1, 5})     ' 5 6 5 1 5 
results = results.Distinct()     ' 5 6 1

Dim Students() As Student = {
    New Student With {.Name = "Bob", .Gpa = 3.5},
    New Student With {.Name = "Sue", .Gpa = 4.0},
    New Student With {.Name = "Joe", .Gpa = 1.9}
}

' Get a list of students ordered by Gpa with Gpa
>= 3.0

Dim goodStudents = From s In Students
            Where s.Gpa >=
3.0
            Order By s.Gpa Descending
            Select s

Console.WriteLine(goodStudents.First.Name)     ' Sue

int[] nums = { 5, 8, 2,
1, 6 };

// Get all numbers in the array above 4
var results = from n in nums
                where n
> 4
                select n;

// Same thing using lamba expression
results = nums.Where(n => n > 4);

// Displays 5 8 6 
foreach (int n in results)
    Console.Write(n + " ");

Console.WriteLine(results.Count());     // 3 
Console.WriteLine(results.First());     // 5 
Console.WriteLine(results.Last());     // 6 
Console.WriteLine(results.Average());     // 6.33333

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 a list of students ordered 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

VB.NET

Attributes

C#

' Attribute can be applied to
anything

Public Class IsTestedAttribute
    Inherits Attribute
End Class

' Attribute can only be applied to classes or structs
<AttributeUsage(AttributeTargets.Class Or
AttributeTargets.Struct)>
Public Class AuthorAttribute
    Inherits Attribute

Public Property Name As String
    Public Property Version As Integer = 0

Public Sub New(ByVal name As String)
        Me.Name = name
    End Sub
End Class

<Author("Sue", Version:=3)>
Class Shape

<IsTested()>
    Sub Move()
        ' Do
something...

    End Sub
End Class

// Attribute
can be applied to anything

public class IsTestedAttribute : Attribute
{
}

// Attribute can only be applied to classes or
structs

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class AuthorAttribute : Attribute {

public string Name { get; set; }
    public int Version { get; set; }

public AuthorAttribute(string name) {
        Name = name;
        Version = 0;
    }
}

[Author("Sue", Version = 3)]
class Shape {

[IsTested]
    void Move() {
        // Do
something...

    }
}

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)  
' or 
Console.WriteLine(name & " is " & age & " years
old.")

Dim c As Integer 
c = Console.Read()    ' Read
single char
 
Console.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);
// or
Console.WriteLine(name + " is " + age + " years old.");

int c = Console.Read();  // Read
single char

Console.WriteLine(c);    //
Prints 65 if user enters "A"

VB.NET

File I/O

C#

Imports System.IO

' Write out to text file
Dim writer As StreamWriter =
File.CreateText("c:\myfile.txt") 
writer.WriteLine("Out to file.") 
writer.Close()

' Read all lines from text file
Dim reader As StreamReader =
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 file
Dim str As String = "Text data" 
Dim num As Integer = 123 
Dim binWriter As New BinaryWriter(File.OpenWrite("c:\myfile.dat"))  
binWriter.Write(str)  
binWriter.Write(num) 
binWriter.Close()

' Read from binary file
Dim binReader As New BinaryReader(File.OpenRead("c:\myfile.dat")) 
str = binReader.ReadString() 
num = binReader.ReadInt32() 
binReader.Close()

using System.IO;

// Write out to text file
StreamWriter writer =
File.CreateText("c:\\myfile.txt"); 
writer.WriteLine("Out to file."); 
writer.Close();

// Read all lines from text file
StreamReader reader =
File.OpenText("c:\\myfile.txt"); 
string line = reader.ReadLine(); 
while (line != null) {
  Console.WriteLine(line); 
  line = reader.ReadLine(); 

reader.Close();

// Write out to binary file
string str = "Text data"; 
int num = 123; 
BinaryWriter binWriter = new BinaryWriter(File.OpenWrite("c:\\myfile.dat")); 
binWriter.Write(str); 
binWriter.Write(num); 
binWriter.Close();

// Read from binary file
BinaryReader binReader = new
BinaryReader(File.OpenRead("c:\\myfile.dat")); 
str = binReader.ReadString(); 
num = binReader.ReadInt32(); 
binReader.Close();

VB.NET vs. C#的更多相关文章

  1. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  2. VB.NET设置控件和窗体的显示级别

    前言:在用VB.NET开发射频检测系统ADS时,当激活已存在的目标MDI子窗体时,被其他子窗体遮住了,导致目标MDI子窗体不能显示. 这个问题怎么解决呢?网上看到一篇帖子VB.NET设置控件和窗体的显 ...

  3. 用VB脚本批到导入字段到PowerDesigner

    在PowerDesigner使用脚本批量导入excel中记录的表结构信息,由于需要通过powerdesigner逆向工程创建一些sybase IQ的表,由于是接口数据,只有excel表,手动导入太耗时 ...

  4. C#/VB.NET Excel数据分列

    C#/VB.NET Excel数据分列 有时候我们需要将保存在Excel单元格中的组合型数据拆分为多列(如将全名拆分为姓和名两列)以方便我们处理.记忆或保存.为了避免重复和大量的手动输入工作,Exce ...

  5. VB编程的键盘控制

    在VB中,很多控件都提供了键盘输入功能(如文本框.组合框等),但它们对键盘的处理较简单,遇到复杂一点的要求即无能为力. 因而VB提供了KeyPress.KeyUp.KeyDown三种键盘事件,当用户按 ...

  6. VB常用字符串操作函数

    1. ASC(X),Chr(X):转换字符字符码 [格式]: P=Asc(X) 返回字符串X的第一个字符的字符码 P=Chr(X) 返回字符码等于X的字符 [范例]: (1)P=Chr(65) ‘ 输 ...

  7. VB操作EXCEL文件

    用VB操作Excel(VB6.0)(整理) 首先创建Excel对象,使用ComObj:Dim ExcelID as Excel.ApplicationSet ExcelID as new Excel. ...

  8. VB中PictureBox控件使用教程

    PictureBox对象可以说是任何对象的原始型态,它可以加载图片.显示文字.画图外,它还能与Frame对象一样,在自己本身里头加载其它的对象而自成一个小群组,用PictureBox可以仿真出任何对象 ...

  9. VB.NET操作Excel

    VB.NET操作Excel的基本方法与例子:

  10. 转:Delphi的类与继承(VB与delphi比较)

    既然已经做出了com程序用delphi来开发的决定,那当然就要对delphi进行一些深入的了解.有人说delphi是一个用控件堆砌起来的工具,和vb没什么两样:也有人说dephi实际上是面向过程的,他 ...

随机推荐

  1. PHP读文件的一个乱码问题

    D:/3.txt是utf-8文件 $f1 = fopen('D:/3.txt','r');$str = fread($f1,10000);fclose($f1);echo substr($str,1, ...

  2. linux命令学习(1):grep 命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  3. 3D touch的 使用心得

    一.设置图标touch 快捷进入 1.静态标签 静态标签是我们在项目的配置plist文件中配置的标签,在用户安装程序后就可以使用,并且排序会在动态标签的前面. 我们先来看静态标签的配置: 首先,在in ...

  4. blcok的总结

    没有引用外部变量的block  为 __NSGlobalBlock__ 类型(全局block) MRC: 引用外部变量的block  为 __NSStackBlock__ 类型(栈区block)  栈 ...

  5. Wordpress基础:文章和页面的区别

    页面: 页面是你可以单独建立一个固定页面,可以作为留言板,或者通知的单页面,发布之后是固定的网址. 页面并不能被分类.亦不能拥有标签,但是它们可以有层级关系.您可将页面附属在另一个页面之下. 对应模板 ...

  6. iOS开发之音频口通信-通过方波来收发数据

    之前做过的项目有需要通过音频口通信用方波来收发数据,由于这方面的资料比较少,下面就介绍下其原理,希望能给大家帮助. 一. 音频通信简介大家应该都知道支付宝声波支付和拉卡拉吧,它们都是利用手机的音频口( ...

  7. mysql-四舍五入

    四舍五入:1.format函数:select FORMAT(2.567,2); 返回:2.57select FORMAT(12562.6655,2); 返回:12,562.67 //整数部分超过三位的 ...

  8. 【Android测试】【第十二节】Uiautomator——API详解

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4921701.html 简单的例子 以一个 ...

  9. mongoose升级后遇到的问题

    由于想在mongoose中使用Q,所以将mongoose升级到了4.1.0,而线上mongoDB的版本是2.6.7,升级的时候,node-modules存在mongoose的残渣,所以调用 npm i ...

  10. js 新窗口打开

    <script> function tj(){ window.open ('http://www.baidu.com', 'newwindow', 'height=500px, width ...