[转]VB.NET和C#之间的语法不同比较,已经更新到.NET4.0了

今天在看30个asp.net学习必须收藏的网站的时候看到了这篇文章,感觉很好,以前都是自己看MSDN然后自己比较,现在又了这个感觉方便多了,很值得收藏!

这个是原文地址:VB.NET and C# Comparison

正文开始:

Program Structure 
Comments 
Data Types 
Constants 
Enumerations 
Operators 
Choices 
Loops 
Arrays 
Functions 
Strings 
Regular Expressions 
Exception Handling 
Namespaces 
Classes / Interfaces 
Constructors / Destructors 
Using Objects 
Structs 
Properties   Updated! 
Delegates / Events 
Generics   New! 
Console I/O 
File I/O

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 
''' XML comments

// Single line 
/* Multiple 
    line  */ 
///

XML comments on single line 
/** XML comments on multiple lines */

VB.NET Data Types C#

Value Types 
Boolean 
Byte, SByte 
Char 
Short, UShort, Integer, UInteger, Long, ULong 
Single, Double 
Decimal 
Date

Reference Types 
Object 
String

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/2007 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

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 
If TypeOf c Is Shape Then _ 
    Console.WriteLine("c is a Shape")

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 o As Object = 2 
i = DirectCast(o, Integer)   ' Throws InvalidCastException if type cast fails 

Dim s As New Shape 
Dim c As Circle = TryCast(s, Circle)   ' Returns Nothing 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)

Reference Types 
object 
string

Initializing 
bool correct = true; 
byte b = 0x2A;   // hex 
object person = null; 
string name = "Dwight"; 
char grade = 'B'; 
DateTime today = DateTime.Parse("12/31/2007 12:15:00"); 
decimal amount = 35.99m; 
float gpa = 2.9f; 
double pi = 3.14159265; 
long lTotal = 123456L; 
short sTotal = 123; 
ushort usTotal = 123; 
uint uiTotal = 123; 
ulong ulTotal = 123;

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(); 
if (c is Shape) 
    Console.WriteLine("c is a Shape");

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


object o = 2; 
int i = (int)o;   // Throws InvalidCastException if type cast fails 

Shape s = new Shape(); 
Circle c = s as Circle;   // Returns null 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#

' Ternary/Conditional operator (Iff 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 *= 5 : y *= 2 

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

' To break up any long single line use _ 
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

// 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 < 5; 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 


// 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)  
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"

' 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 msg As String = "File is 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"

// 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 msg = @"File is c:\temp\x.dat"; 
// same as 
string msg = "File is 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

' Inheritance 
Class FootballGame 
  Inherits Competition 
  ... 
End Class 

' Interface definition 
Interface IAlarmClock  
  ... 
End Interface

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

// Interface implementation 
Class WristWatch  
  Implements IAlarmClock, ITimer  
   ... 
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 

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


// Interface definition
 
interface IAlarmClock { 
  ... 
}

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


// Interface implementation
 
class WristWatch : IAlarmClock, ITimer { 
   ... 
}

VB.NET Constructors / Destructors C#
Class SuperHero 
  Private powerLevel As Integer 

  Public Sub New() 
    powerLevel = 0 
  End Sub 

  Public Sub New(ByVal powerLevel As Integer) 
    Me.powerLevel = powerLevel 
  End Sub 

  Shared Sub New() 
    ' Shared constructor invoked before 1st instance is created 
  End Sub 

  Protected Overrides Sub Finalize()  
   ' Destructor to free unmanaged resources 
    MyBase.Finalize() 
  End Sub 
End Class

class SuperHero { 
  private int powerLevel; 

  public SuperHero() { 
     powerLevel = 0; 
  } 

  public SuperHero(int powerLevel) { 
    this.powerLevel = powerLevel;  
  } 

  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" construct 
hero.Name = "SpamMan"; 
hero.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 StudentRecord 
  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 StudentRecord = New StudentRecord("Bob", 3.5) 
Dim stu2 As StudentRecord = stu   

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

struct StudentRecord { 
  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 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 Delegates / 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

Private 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);

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

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 numbers = new List(); 
numbers.Add(2); 
numbers.Add(4); 
DisplayList(numbers);

// Function can display any type of List 
void DisplayList(List list) { 
    foreach (T item in list) 
        Console.WriteLine(item); 


// Class works on any data type 
class SillyList { 
    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(params T[] items) where T : IComparable { 
    T max = items[0]; 
    foreach (T item in items) 
        if (item.CompareTo(max) > 0) 
            max = item; 
    return max; 
}

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();




本文转自kyo-yo博客园博客,原文链接:http://www.cnblogs.com/kyo-yo/archive/2010/06/01/vbnet-csharp-comparison.html,如需转载请自行联系原作者


你可能感兴趣的:([转]VB.NET和C#之间的语法不同比较,已经更新到.NET4.0了)