VB.NET vs. C#


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 = [email protected]
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();

时间: 2024-10-28 21:15:41

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

VB.NET 自动打包程序

因为每次将编译好的程序提交时都要花费很多时间用来打包,因此我需要有一个让程序自动完成这些琐碎的工作. 首先说一下我的目标.我的C#程序(在本文中暂时称作Example.exe)编译后暂时存放在Debug目录中,该程序有两种形态:平台端和客户端,它们分别给不同的用户使用,这两个客户端的不同之处仅在与App.config(可以被看做一个XML文件)中的配置不同.打包时需要先使用NSIS脚本对Debug目录下的内容制作成安装包,再使用WinRAR将安装包进行压缩.除了两个安装包外,还需要提供一些文件放

VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法

在VB.NET调用Web Service提供的服务 技术qq交流群:JavaDream:251572072 下面是一篇文章比较详细,其实具体操作很简单,把Web Service服务地址,利用工具(VS2010),通过添加引用的形式,添加到项目中来就可以应用了. 大家如果这个地方不会操场的话,可以问问我QQ:1606841559 当Web Service已经处于对外提供服务状态,VB.NET就可以通过HTTP"调用"来使用这些服务了.当然前提是要了解Web Service对外提供服务所对

VB.NET视频总结

VB.NET是我们接触到的另一种应用程序开发平台,这次的视频学习知识了解一些基本的概念,为今后的学习奠定基础. 相对来说,这部分的视频还是不太容易理解的.其主要原因是,讲师是台湾人士,语言上有很大的差异,一开始的时候犹如听天书.但是随着学习的深入,慢慢的也就适应了.然后就大都能够听明白了,他们讲的内容其实大部分是我们已经接触过的. 第一部分都是讲.NET的基础知识,为我们更近一步的学习奠定基础,这部分无非就是它的概念.发展等,还有就是它所包含的一些基本物件,跟Vb的一些知识还是有一定的相似的.然

vb.net总结

看完了vb.net视频,感觉理解的不是很好,很多名词都听不懂,于是自己百度了一下,做了个汇总,然后还有自己画的一张图将它们有机的结合在一起,错误之处还请大家多多指教. 下图是我对vb.net的一个总体知识概括,很多地方他都是和vb相似的. com技术: 所谓COM(ComponentObject Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准.通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操

VB.NET-QQ新闻弹窗样式图片制作工具

〇.下载地址 本程序的下载地址(百度网盘):http://pan.baidu.com/s/1qWBGGGG 一.关于本程序 Gnaea是一个QQ新闻弹窗的填字工具,可以在输入新闻标题和新闻内容后生成一张类似QQ新闻弹窗的图片.生成的图片可以被保存为BMP和PNG两种格式,或是直接复制到剪贴板. 效果如下图(注:内容纯属虚构) 二.程序控件 三.程序资源 被用作素材的资源:My.Resources.PopUp,取材于一张PNG格式的图片 四.程序代码 Imports System.Text Pub

游戏“你是XX么”的VB.NET实现

〇.下载地址 本程序可以在 这里 下载到. 一.关于本游戏的玩法 1)刚进程序,会有一个提示性的窗体,单击"开始测试"按钮正式进入游戏 2)正式进入游戏窗体后,当鼠标挪向按钮"不是"后,按钮"不是"上的字样会变成"是",而原来的按钮"是"上面会显示"不是".点击两个按钮的任意一个后,都会被程序"羞辱",然后程序会自动退出. 3)不要试图通过打开右上角的X或是用任务管理

VB 中窗口发现冲突名称,将使用名称...怎么解决?

首先上图: 刚開始敲机房收费系统的时候就出现过这样的情况,当时有八个之多. 解决方法: (1)对窗口进行重命名(比如将frmGongZuoJiLu改成frmGongzuojilu),于是从8个错误降低到了5个. 剩下的3个对于这样的情况不适用. (2)发现我的frm文件里命名为frmXinXiWeiHu,例如以下: 可是我的窗口名字竟然是这种: 将两个名字改成同样的,利用这样的方法又使错误从3个降低到了2个. (3)剩下的两个顽固分子从机房開始到机房项目快结束了一直存留,昨天师傅开会提到了遇到问

vb6转vb.net

一直在用vb6写软件,但最近系统要做web版,但之前的业务规则全在代码中写死了,没用使用存贮过程,如果在web端重写规则,则工作量太大,项目时间也不允许,只好把业务规则转到vb.net中.现在的vb.net版本已不支持从vb6转入,不过可以直接把业务规则复制到新的vb.net中,差异很小,基本改改就行.转换过程中以下几点要特别注意: 1.vb6中过程调用可以不用括号包围参数,如 add a,b这样是合法的,但vb.net中不支持这种写法,必须是add(a,b)这样变动. 2.vb6中支持感叹号(

使用VB创建贪吃蛇

贪吃蛇作为一个经典游戏,在其开发成功后,有很长一段时间令很多人为之振奋,但随着时间的流逝,贪吃蛇也逐渐淡出人们的视野.本次,我利用VB重现贪吃蛇的创建.主要使用到的控件:Label标签,Command按钮,Timer控件. 以下为创建过程: 贪吃蛇作为一个游戏来说,主要分为6个部分: 地图创建部分: 地图坐标初始化部分: 食物创建部分: 贪吃蛇创建部分: 贪吃蛇移动控制部分: 贪吃蛇吃食物身体变化部分. 在创建之前,我们需要为我们需要的变量进行定义: 1 Private MapXy(4900)

VB操作IE浏览器

相信现在绝大多数计算机上使用的是IE浏览器.如何通过编程控制IE的操作呢,本文将一步步介绍如何通过VB   调用IE的对象库来对IE进行控制.   本文使用的编程工具是VB6英文企业版,浏览器是IE5,以下的代码只能在IE4及以上版本下运行.另外为了能深   入了解程序代码,最好能安装MSDN.文中的所有对象.函数.事件在其中都可以查到.       一.如何获得Windows中所有打开的浏览器窗口   首先打开VB,建立一个新工程,点击菜单   Projects   |   Reference