C#和VB.net的语法相差还是比较大的. 可能你会C#,可能你会VB.
将它们俩放在一起对比一下你就会很快读懂,并掌握另一门语言.
相信下面这张图会对你帮助很大.
注释 |
VB.NET- 'Single line only
- Rem Single line only
复制代码 | C#- // Single line
- /* Multiple
- line */
- /// XML comments on single line
- /** XML comments on multiple lines */
复制代码 |
数据类型 |
VB.NET- 'Value Types
- Boolean
- Byte
- Char (example: "A")
- Short, Integer, Long
- Single, Double
- Decimal
- Date
- 'Reference Types
- Object
- String
- Dim x As Integer
- System.Console.WriteLine(x.GetType())
- System.Console.WriteLine(TypeName(x))
- 'Type conversion
- Dim d As Single = 3.5
- Dim i As Integer = CType (d, Integer)
- i = CInt (d)
- i = Int(d)
复制代码 | C#- //Value Types
- bool
- byte, sbyte
- char (example: 'A')
- short, ushort, int, uint, long, ulong
- float, double
- decimal
- DateTime
- //Reference Types
- object
- string
- int x;
- Console.WriteLine(x.GetType())
- Console.WriteLine(typeof(int))
- //Type conversion
- float d = 3.5;
- int i = (int) d
复制代码 |
常量和变量 |
VB.NET- Const MAX_AUTHORS As Integer = 25
- ReadOnly MIN_RANK As Single = 5.00
复制代码 | C#- const int MAX_AUTHORS = 25;
- readonly float MIN_RANKING = 5.00;
复制代码 |
枚举 |
VB.NET- Enum Action
- Start
- 'Stop is a reserved word
- [Stop]
- 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 _
- 'Prints "Stop is 1"
- System.Console.WriteLine(a.ToString & " is " & a)
- 'Prints 70
- System.Console.WriteLine(Status.Pass)
- 'Prints Pass
- System.Console.WriteLine(Status.Pass.ToString())
复制代码 | C#- enum Action {Start, Stop, Rewind, Forward};
- enum Status {Flunk = 50, Pass = 70, Excel = 90};
- Action a = Action.Stop;
- if (a != Action.Start)
- //Prints "Stop is 1"
- System.Console.WriteLine(a + " is " + (int) a);
- // Prints 70
- System.Console.WriteLine((int) Status.Pass);
- // Prints Pass
- System.Console.WriteLine(Status.Pass);
复制代码 |
运算 |
VB.NET- 'Comparison
- = < > <= >= <>
- 'Arithmetic
- + - * /
- Mod
- (integer division)
- ^ (raise to a power)
- 'Assignment
- = += -= *= /= = ^= <<= >>= &=
- 'Bitwise
- And AndAlso Or OrElse Not << >>
- 'Logical
- And AndAlso Or OrElse Not
- 'String Concatenation
- &
复制代码 | C#- //Comparison
- == < > <= >= !=
- //Arithmetic
- + - * /
- % (mod)
- / (integer division if both operands are ints)
- Math.Pow(x, y)
- //Assignment
- = += -= *= /= %= &= |= ^= <<= >>= ++ --
- //Bitwise
- & | ^ ~ << >>
- //Logical
- && || !
- //String Concatenation
- +
复制代码 |
条件 |
VB.NET- 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 And y < 5 Then x *= 5 : y *= 2
- 'Preferred
- If x <> 100 And y < 5 Then
- x *= 5
- y *= 2
- End If
- 'or to break up any long single command use _
- If henYouHaveAReally < 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
- 'Must be a primitive data type
- Select Case color
- Case "black", "red"
- r += 1
- Case "blue"
- b += 1
- Case "green"
- g += 1
- Case Else
- other += 1
- End Select
复制代码 | C#- greeting = age < 20 ? "What's up?" : "Hello";
- if (x != 100 && y < 5)
- {
- // Multiple statements must be enclosed in {}
- x *= 5;
- y *= 2;
- }
- if (x > 5)
- x *= y;
- else if (x == 5)
- x += y;
- else if (x < 10)
- x -= y;
- else
- x /= y;
- //Must be integer or string
- switch (color)
- {
- case "black":
- case "red": r++;
- break;
- case "blue"
- break;
- case "green": g++;
- break;
- default: other++;
- break;
- }
复制代码 |
循环 |
VB.NET- 'Pre-test Loops:
- While c < 10
- c += 1
- End While
- Do Until c = 10
- c += 1
- Loop
- 'Post-test Loop:
- Do While c < 10
- c += 1
- Loop
- For c = 2 To 10 Step 2
- System.Console.WriteLine(c)
- Next
- 'Array or collection looping
- Dim names As String() = {"Steven", "SuOk", "Sarah"}
- For Each s As String In names
- System.Console.WriteLine(s)
- Next
复制代码 | C#- //Pre-test Loops: while (i < 10)
- i++;
- for (i = 2; i < = 10; i += 2)
- System.Console.WriteLine(i);
- //Post-test Loop:
- do
- i++;
- while (i < 10);
- // Array or collection looping
- string[] names = {"Steven", "SuOk", "Sarah"};
- foreach (string s in names)
- System.Console.WriteLine(s);
复制代码 |
数组 |
VB.NET- 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) = "Steven"
- 'Throws System.IndexOutOfRangeException
- names(5) = "Sarah"
- '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
复制代码 | C#- 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] = "Steven";
- // Throws System.IndexOutOfRangeException
- names[5] = "Sarah"
- // C# can't dynamically resize an array.
- //Just copy into new array.
- string[] names2 = new string[7];
- // or names.CopyTo(names2, 0);
- Array.Copy(names, names2, names.Length);
- float[,] twoD = new float[rows, cols];
- twoD[2,0] = 4.5;
- int[][] jagged = new int[3][] {
- new int[5], new int[2], new int[3] };
- jagged[0][4] = 5;
复制代码 |
函数 |
VB.NET- '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
- 'c set to zero by default
- Dim a = 1, b = 1, c As Integer
- TestFunc(a, b, c)
- System.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 a 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 = "")
- System.Console.WriteLine("Greetings, " & prefix
- & " " & name)
- End Sub
- SayHello("Steven", "Dr.")
- SayHello("SuOk")
复制代码 | C#- // 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);
- System.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) {
- System.Console.WriteLine("Greetings, "
- + prefix + " " + name);
- }
- void SayHello(string name) {
- SayHello(name, "");
- }
复制代码 |
错误处理 |
VB.NET- 'Deprecated unstructured error handling
- On Error GoTo MyErrorHandler
- ...
- MyErrorHandler: System.Console.WriteLine(Err.Description)
- Dim ex As New Exception("Something has really gone wrong.")
- Throw ex
- Try
- y = 0
- x = 10 / y
- Catch ex As Exception When y = 0 'Argument and When is optional
- System.Console.WriteLine(ex.Message)
- Finally
- DoSomething()
- End Try
复制代码 | C#- 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{
- // Do something
- }
复制代码 |
命名空间 |
VB.NET- Namespace ASPAlliance.DotNet.Community
- ...
- End Namespace
- 'or
- Namespace ASPAlliance
- Namespace DotNet
- Namespace Community
- ...
- End Namespace
- End Namespace
- End Namespace
- Imports ASPAlliance.DotNet.Community
复制代码 | C#- namespace ASPAlliance.DotNet.Community {
- ...
- }
- // or
- namespace ASPAlliance {
- namespace DotNet {
- namespace Community {
- ...
- }
- }
- }
- using ASPAlliance.DotNet.Community;
复制代码 |
类 / 接口 |
VB.NET- 'Accessibility keywords
- Public
- Private
- Friend
- Protected
- Protected Friend
- Shared
- 'Inheritance
- Class Articles
- Inherits Authors
- ...
- End Class
- 'Interface definition
- Interface IArticle
- ...
- End Interface
- 'Extending an interface
- Interface IArticle
- Inherits IAuthor
- ...
- End Interface
- 'Interface implementation</span>
- Class PublicationDate
- Implements</strong> IArticle, IRating
- ...
- End Class
复制代码 | C#- //Accessibility keywords
- public
- private
- internal
- protected
- protected internal
- static
- //Inheritance
- class Articles: Authors {
- ...
- }
- //Interface definition
- interface IArticle {
- ...
- }
- //Extending an interface
- interface IArticle: IAuthor {
- ...
- }
- //Interface implementation
- class PublicationDate: IArticle, IRating {
- ...
- }
复制代码 |
创建 / 销毁 |
VB.NET- Class TopAuthor
- Private _topAuthor As Integer
- Public Sub New()
- _topAuthor = 0
- End Sub
- Public Sub New(ByVal topAuthor As Integer)
- Me._topAuthor = topAuthor
- End Sub
- Protected Overrides Sub Finalize()
- 'Desctructor code to free unmanaged resources
- MyBase.Finalize()
- End Sub
- End Class
复制代码 | C#- class TopAuthor {
- private int _topAuthor;
- public TopAuthor() {
- _topAuthor = 0;
- }
- public TopAuthor(int topAuthor) {
- this._topAuthor= topAuthor
- }
- ~TopAuthor() {
- // Destructor code to free unmanaged resources.
- // Implicitly creates a Finalize method
- }
- }
复制代码 |
对象 |
VB.NET- Dim author As TopAuthor = New TopAuthor
- With author
- .Name = "Steven"
- .AuthorRanking = 3
- End With
- author.Rank("Scott")
- author.Demote() 'Calling Shared method
- 'or
- TopAuthor.Rank()
- Dim author2 As TopAuthor = author 'Both refer to same object
- author2.Name = "Joe"
- System.Console.WriteLine(author2.Name) 'Prints Joe
- author = Nothing 'Free the object
- If author Is Nothing Then _
- author = New TopAuthor
- Dim obj As Object = New TopAuthor
- If TypeOf obj Is TopAuthor Then _
- System.Console.WriteLine("Is a TopAuthor object.")
复制代码 | C#- TopAuthor author = new TopAuthor();
- //No "With" construct
- author.Name = "Steven";
- author.AuthorRanking = 3;
- author.Rank("Scott");
- TopAuthor.Demote() //Calling static method
- TopAuthor author2 = author //Both refer to same object
- author2.Name = "Joe";
- System.Console.WriteLine(author2.Name) //Prints Joe
- author = null //Free the object
- if (author == null)
- author = new TopAuthor();
- Object obj = new TopAuthor();
- if (obj is TopAuthor)
- SystConsole.WriteLine("Is a TopAuthor object.");
复制代码 |
结构 |
VB.NET- Structure AuthorRecord
- Public name As String
- Public rank As Single
- Public Sub New(ByVal name As String, ByVal rank As Single)
- Me.name = name
- Me.rank = rank
- End Sub
- End Structure
- Dim author As AuthorRecord = New AuthorRecord("Steven", 8.8)
- Dim author2 As AuthorRecord = author
- author2.name = "Scott"
- System.Console.WriteLine(author.name) 'Prints Steven
- System.Console.WriteLine(author2.name) 'Prints Scott
复制代码 | C#- struct AuthorRecord {
- public string name;
- public float rank;
- public AuthorRecord(string name, float rank) {
- this.name = name;
- this.rank = rank;
- }
- }
- AuthorRecord author = new AuthorRecord("Steven", 8.8);
- AuthorRecord author2 = author
- author.name = "Scott";
- SystemConsole.WriteLine(author.name); //Prints Steven
- System.Console.WriteLine(author2.name); //Prints Scott
复制代码 |
属性 |
VB.NET- 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
复制代码 | C#- private int _size;
- public int Size {
- get {
- return _size;
- }
- set {
- if (value < 0)
- _size = 0;
- else
- _size = value;
- }
- }
- foo.Size++;
复制代码 |
委派 / 事件 |
VB.NET- 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
- 'WithEvents can't be used on local variable
- Dim WithEvents MyButton As Button
- 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
复制代码 | C#- delegate void MsgArrivedEventHandler(string message);
- event MsgArrivedEventHandler MsgArrivedEvent;
- //Delegates must be used with events in C#
- MsgArrivedEvent += new MsgArrivedEventHandler
- (My_MsgArrivedEventCallback);
- //Throws exception if obj is null
- MsgArrivedEvent("Test message");
- 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);
- }
复制代码 |
控制台 I/O |
VB.NET- 'Special character constants
- vbCrLf, vbCr, vbLf, vbNewLine
- vbNullString
- vbTab
- vbBack
- vbFormFeed
- vbVerticalTab
- ""
- Chr(65) 'Returns 'A'
- System.Console.Write("What's your name? ")
- Dim name As String = System.Console.ReadLine()
- System.Console.Write("How old are you? ")
- Dim age As Integer = Val(System.Console.ReadLine())
- System.Console.WriteLine("{0} is {1} years old.", name, age)
- 'or
- System.Console.WriteLine(name & " is " & age & " years old.")
- Dim c As Integer
- c = System.Console.Read() 'Read single char
- System.Console.WriteLine(c) 'Prints 65 if user enters "A"
复制代码 | C#- //Escape sequences
- n, r
- t
-
- Convert.ToChar(65)
- //Returns 'A' - equivalent to Chr(num) in VB
- // or
- (char) 65
- System.Console.Write("What's your name? ");
- string name = SYstem.Console.ReadLine();
- System.Console.Write("How old are you? ");
- int age = Convert.ToInt32(System.Console.ReadLine());
- System.Console.WriteLine("{0} is {1} years old.", name, age);
- //or
- System.Console.WriteLine(name + " is " + age + " years old.");
- int c = System.Console.Read(); //Read single char
- System.Console.WriteLine(c);
- //Prints 65 if user enters "A"
复制代码 |
文件 I/O |
VB.NET- 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()
复制代码 | C#- 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();
复制代码 |