您当前的位置: 首页 >  .net

VB.NET and C# 语法比较手册

发布时间:2004-10-24 22:46:00 ,浏览量:0

VB.NET and C# Comparison This is a quick reference guide to highlight some key syntactical differences between VB.NETand C#. Hope you find this useful! Thank you to Tom Shelton, Fergus Cooney, and others for your input.

Comments Data Types Constants Enumerations Operators Choices Loops Arrays Functions Exception Handling Namespaces Classes / Interfaces Constructors / Destructors Objects Structs Properties Delegates / Events Console I/O File I/O

VB.NET C# Comments ' Single line only Rem Single line only

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

Data Types

Value Types Boolean Byte Char   (example: "A"c) Short, Integer, Long Single, Double Decimal Date

Reference Types Object String

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

' Type conversion Dim numDecimal As Single = 3.5 Dim numInt As Integer numInt = CType(numDecimal, Integer)   ' set to 4 (Banker's rounding) numInt = CInt(numDecimal)  ' same result as CType numInt = Int(numDecimal)    ' set to 3 (Int function truncates the decimal)

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

Reference Types object string

int x; Console.WriteLine(x.GetType());    // Prints System.Int32 Console.WriteLine(typeof(int));      // Prints System.Int32

// Type conversion double numDecimal = 3.5; int numInt = (int) numDecimal;   // set to 3  (truncates decimal)

Constants Const MAX_STUDENTS As Integer = 25 const int MAX_STUDENTS = 25; Enumerations 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)     ' Prints 1 Console.WriteLine(Status.Pass)     ' Prints 70 Dim s As Type = GetType(Status) Console.WriteLine([Enum].GetName(s, Status.Pass))    ' 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(Status.Pass);    // Prints Pass Operators

Comparison =  <  >  <=  >=  <>

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

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

Bitwise And  AndAlso  Or  OrElse  Not  <<  >>

Logical And  AndAlso  Or  OrElse  Not

Note: AndAlso and OrElse are for short-circuiting 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 +

Choices

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

' One line doesn't require "End If", no "Else" If language = "VB.NET" Then langType = "verbose"

' Use : to put two commands on same line If x <> 100 Then x *= 5 : y *= 2  

' or to break up any long single command use _ If whenYouHaveAReally < longLine And itNeedsToBeBrokenInto2 > Lines Then _   UseTheUnderscore(charToBreakItUp)

'If x > 5 Then   x *= y ElseIf x = 5 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

greeting = age < 20 ? "What's up?" : "Hello";

if (x != 100) {    // Multiple statements must be enclosed in {}   x *= 5;   y *= 2; }

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

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

switch (color) {                          // Must be integer or string   case "pink":   case "red":    r++;    break;        // break is mandatory; no fall-through   case "blue":   b++;   break;   case "green": g++;   break;   default:    other++;   break;       // break necessary on default }

Loops 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

Pre-test Loops:  

// no "until" keyword while (i < 10)   i++; for (i = 2; i < = 10; i += 2)   Console.WriteLine(i);

Post-test Loop: do   i++; while (i < 10); // Array or collection looping string[] names = {"Fred", "Sue", "Barney"}; foreach (string s in names)   Console.WriteLine(s);

Arrays

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# doesn't 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;

Functions

' 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("Madonna")

// 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# doesn't support optional arguments/parameters.  Just create two different versions of the same function. */  void SayHello(string name, string prefix) {   Console.WriteLine("Greetings, " + prefix + " " + name); }  void SayHello(string name) {   SayHello(name, ""); }

Exception Handling

' Deprecated unstructured error handling On Error GoTo MyErrorHandler ... MyErrorHandler: Console.WriteLine(Err.Description) Dim ex As New Exception("Something is really wrong.") Throw  ex 

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

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

try {    y = 0;   x = 10 / y; } catch (Exception ex) {   // Argument is optional, no "When" keyword    Console.WriteLine(ex.Message); } finally {   // Must use unmanaged MessageBeep API function to beep }

Namespaces

Namespace Harding.Compsci.Graphics    ... End Namespace

' or

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

Import Harding.Compsci.Graphics

namespace Harding.Compsci.Graphics {   ... }

// or

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

using Harding.Compsci.Graphics;

Classes / Interfaces

Accessibility keywords Public Private Friend                    Protected Protected Friend Shared

' 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 

Accessibility keywords public private internal protected protected internal static

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

// Interface definition interface IAlarmClock {   ... }

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

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

Constructors / Destructors 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   Protected Overrides Sub Finalize ()     ' Desctructor code 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;    }   ~SuperHero() {     // Destructor code to free unmanaged resources.     // Implicitly creates a Finalize method   } }

Objects

Dim hero As SuperHero = 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 refer to 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.")

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 refer to 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.");

Structs

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

Properties

Private _size As Integer Public Property Size() As Integer   Get     Return _size   End Get   Set (ByVal Value As Integer)     If Value < 0 Then       _size = 0     Else       _size = Value     End If   End Set End Property

foo.Size += 1

private int _size; public int Size {   get {     return _size;   }   set {     if (value < 0)       _size = 0;     else       _size = value;   } }

foo.Size++;

Delegates / Events

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

Console I/O

Special character constants vbCrLf, vbCr, vbLf, vbNewLine vbNullString vbTab vbBack vbFormFeed vbVerticalTab "" Chr(65)  ' Returns 'A'

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"

Escape sequences /n, /r /t // /"

Convert.ToChar(65)  // Returns 'A' - equivalent to Chr(num) in VB // or (char) 65

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"

File I/O

Imports System.IO

Dim writer As StreamWriter = File.CreateText("c:/myfile.txt") writer.WriteLine("Out to file.") writer.Close()

Dim reader As StreamReader = File.OpenText("c:/myfile.txt") Dim line As String = reader.ReadLine() While Not line Is Nothing   Console.WriteLine("line=" & line)   line = reader.ReadLine() End While reader.Close()

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

Dim binReader As New BinaryReader (File.OpenRead("c:/myfile.dat")) str = binReader.ReadString() num = binReader.ReadInt32() binReader.Close()

using System.IO;

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

StreamReader reader = File.OpenText("c://myfile.txt"); string line = reader.ReadLine(); while (line != null) {   Console.WriteLine(line);   line = reader.ReadLine(); } reader.Close();

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

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

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109273博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.1316s