语言支持
Microsoft .NET Platform 目前提供对以下三种语言的内置支持:C#、Visual Basic 和 JScript。
本教程中的练习和代码示例展示如何使用 C#、Visual Basic 和 JScript 生成 .NET 应用程序。有关其他语言语法的信息,请参考 .NET 框架 SDK 的完整文档。
提供下表以帮助您理解本教程中的代码示例以及三种语言之间的差异:
变量声明
int x;
String s;
String s1, s2;
Object o;
Object obj = new Object();
public String name;
Dim x As Integer
Dim s As String
Dim s1, s2 As String
Dim o 'Implicitly Object
Dim obj As New Object()
Public name As String
var x : int;
var s : String;
var s1 : String, s2 : String;
var o;
var obj : Object = new Object();
var name : String;
|
C# |
VB |
JScript |
|
语句
Response.Write("foo");
Response.Write("foo")
Response.Write("foo");
|
C# |
VB |
JScript |
|
注释
// This is a comment
/*
This
is
a
multiline
comment
*/
' This is a comment
' This
' is
' a
' multiline
' comment
// This is a comment
/*
This
is
a
multiline
comment
*/
|
C# |
VB |
JScript |
|
访问索引属性
String s = Request.QueryString["Name"];
String value = Request.Cookies["key"];
Dim s, value As String
s = Request.QueryString("Name")
value = Request.Cookies("Key").Value
'Note that default non-indexed properties
'must be explicitly named in VB
var s : String = Request.QueryString("Name");
var value : String = Request.Cookies("key");
|
C# |
VB |
JScript |
|
声明索引属性
// Default Indexed Property
public String this[String name] {
get {
return (String) lookuptable[name];
}
}
' Default Indexed Property
Public Default ReadOnly Property DefaultProperty(Name As String) As String
Get
Return CStr(lookuptable(name))
End Get
End Property
JScript does not support the creation of indexed or default indexed properties.
To emulate these properties in JScript, use function
declarations instead. Even though you cannot access the functions using indexed property syntax in C#, it will provide the illusion for VB.
public function Item(name:String) : String {
return String(lookuptable(name));
}
|
C# |
VB |
JScript |
|
声明简单属性
public String name {
get {
...
return ...;
}
set {
... = value;
}
}
Public Property Name As String
Get
...
Return ...
End Get
Set
... = Value
End Set
End Property
function get name() : String {
...
return ...;
}
function set name(value : String) {
... = value;
}
|
C# |
VB |
JScript |
|
声明和使用枚举
// Declare the Enumeration
public enum MessageSize {
Small = 0,
Medium = 1,
Large = 2
}
// Create a Field or Property
public MessageSize msgsize;
// Assign to the property using the Enumeration values
msgsize = Small;
' Declare the Enumeration
Public Enum MessageSize
Small = 0
Medium = 1
Large = 2
End Enum
' Create a Field or Property
Public MsgSize As MessageSize
' Assign to the property using the Enumeration values
MsgSize = small
// Declare the Enumeration
public enum MessageSize {
Small = 0,
Medium = 1,
Large = 2
}
// Create a Field or Property
public var msgsize:MessageSize;
// Assign to the property using the Enumeration values
msgsize = Small;
|
C# |
VB |
JScript |
|
枚举集合
foreach ( String s in coll ) {
...
}
Dim S As String
For Each S In Coll
...
Next
var s:String;
for ( s in coll ) {
...
}
|
C# |
VB |
JScript |
|
声明和使用方法
// Declare a void return function
void voidfunction() {
...
}
// Declare a function that returns a value
String stringfunction() {
...
return (String) val;
}
// Declare a function that takes and returns values
String parmfunction(String a, String b) {
...
return (String) (a + b);
}
// Use the Functions
voidfunction();
String s1 = stringfunction();
String s2 = parmfunction("Hello", "World!");
' Declare a void return function
Sub VoidFunction()
...
End Sub
' Declare a function that returns a value
Function StringFunction() As String
...
Return CStr(val)
End Function
' Declare a function that takes and returns values
Function ParmFunction(a As String, b As String) As String
...
Return CStr(A & B)
End Function
' Use the Functions
VoidFunction()
Dim s1 As String = StringFunction()
Dim s2 As String = ParmFunction("Hello", "World!")
// Declare a void return function
function voidfunction() : void {
...
}
// Declare a function that returns a value
function stringfunction() : String {
...
return String(val);
}
// Declare a function that takes and returns values
function parmfunction(a:String, b:String) : String {
...
return String(a + b);
}
// Use the Functions
voidfunction();
var s1:String = stringfunction();
var s2:String = parmfunction("Hello", "World!");
|
C# |
VB |
JScript |
|
自定义属性
// Stand-alone attribute
[STAThread]
// Attribute with parameters
[DllImport("ADVAPI32.DLL")]
// Attribute with named parameters
[DllImport("KERNEL32.DLL", CharSet=CharSet.Auto)]
' Stand-alone attribute
<STAThread>
' Attribute with parameters
<DllImport("ADVAPI32.DLL")>
' Attribute with named parameters
<DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)>
// Stand-alone attribute
STAThreadAttribute
// Attribute with parameters
DllImportAttribute("ADVAPI32.DLL")
// Attribute with named parameters
DllImportAttribute("KERNEL32.DLL", CharSet=CharSet.Auto)
|
C# |
VB |
JScript |
|
数组
String[] a = new String[3];
a[0] = "1";
a[1] = "2";
a[2] = "3";
String[][] a = new String[3][3];
a[0][0] = "1";
a[1][0] = "2";
a[2][0] = "3";
Dim a(2) As String
a(0) = "1"
a(1) = "2"
a(2) = "3"
Dim a(2,2) As String
a(0,0) = "1"
a(1,0) = "2"
a(2,0) = "3"
var a : String[] = new String[3];
a[0] = "1";
a[1] = "2";
a[2] = "3";
var a : String[][] = new String[3][3];
a[0][0] = "1";
a[1][0] = "2";
a[2][0] = "3";
|
C# |
VB |
JScript |
|
初始化
String s = "Hello World";
int i = 1;
double[] a = { 3.00, 4.00, 5.00 };
Dim s As String = "Hello World"
Dim i As Integer = 1
Dim a() As Double = { 3.00, 4.00, 5.00 }
var s : String = "Hello World";
var i : int = 1;
var a : double[] = [ 3.00, 4.00, 5.00 ];
|
C# |
VB |
JScript |
|
If 语句
if (Request.QueryString != null) {
...
}
If Not (Request.QueryString = Nothing)
...
End If
if (Request.QueryString != null) {
...
}
|
C# |
VB |
JScript |
|
Case 语句
switch (FirstName) {
case "John" :
...
break;
case "Paul" :
...
break;
case "Ringo" :
...
break;
default:
...
break;
}
Select Case FirstName
Case "John"
...
Case "Paul"
...
Case "Ringo"
...
Case Else
...
End Select
switch (FirstName) {
case "John" :
...
break;
case "Paul" :
...
break;
case "Ringo" :
...
break;
default:
...
break;
}
|
C# |
VB |
JScript |
|
For 循环
for (int i=0; i<3; i++)
a(i) = "test";
Dim I As Integer
For I = 0 To 2
a(I) = "test"
Next
for (var i : int = 0; i < 3; i++)
a[i] = "test";
|
C# |
VB |
JScript |
|
While 循环
int i = 0;
while (i<3) {
Console.WriteLine(i.ToString());
i += 1;
}
Dim I As Integer
I = 0
Do While I < 3
Console.WriteLine(I.ToString())
I += 1
Loop
var i : int = 0;
while (i < 3) {
Console.WriteLine(i);
i += 1;
}
|
C# |
VB |
JScript |
|
异常处理
try {
// Code that throws exceptions
} catch(OverflowException e) {
// Catch a specific exception
} catch(Exception e) {
// Catch the generic exceptions
} finally {
// Execute some cleanup code
}
Try
' Code that throws exceptions
Catch E As OverflowException
' Catch a specific exception
Catch E As Exception
' Catch the generic exceptions
Finally
' Execute some cleanup code
End Try
try {
// Code that throws exceptions
} catch(e:OverflowException) {
// Catch a specific exception
} catch(e:Exception) {
// Catch the generic exceptions
} finally {
// Execute some cleanup code
}
|
C# |
VB |
JScript |
|
字符串连接
// Using Strings
String s1;
String s2 = "hello";
s2 += " world";
s1 = s2 + " !!!";
// Using StringBuilder class for performance
StringBuilder s3 = new StringBuilder();
s3.Append("hello");
s3.Append(" world");
s3.Append(" !!!");
' Using Strings
Dim s1, s2 As String
s2 = "hello"
s2 &= " world"
s1 = s2 & " !!!"
' Using StringBuilder class for performance
Dim s3 As New StringBuilder()
s3.Append("hello")
s3.Append(" world")
s3.Append(" !!!")
// Using Strings
var s1 : String;
var s2 : String = "hello";
s2 += " world";
s1 = s2 + " !!!";
// Using StringBuilder class for performance
var s3:StringBuilder = new StringBuilder();
s3.Append("hello");
s3.Append(" world");
s3.Append(" !!!");
|
C# |
VB |
JScript |
|
事件处理程序委托
void MyButton_Click(Object sender,
EventArgs E) {
...
}
Sub MyButton_Click(Sender As Object,
E As EventArgs)
...
End Sub
function MyButton_Click(sender : Object,
E : EventArgs) {
...
}
|
C# |
VB |
JScript |
|
声明事件
// Create a public event
public event EventHandler MyEvent;
// Create a method for firing the event
protected void OnMyEvent(EventArgs e) {
MyEvent(this, e);
}
' Create a public event
Public Event MyEvent(Sender as Object, E as EventArgs)
' Create a method for firing the event
Protected Sub OnMyEvent(E As EventArgs)
RaiseEvent MyEvent(Me, E)
End Sub
JScript does not support the creation of events. JScript can only
consume events by declaring event handler delegates and adding those
delegates to the events of another control.
|
C# |
VB |
JScript |
|
向事件添加事件处理程序或从事件移除事件处理程序
Control.Change += new EventHandler(this.ChangeEventHandler);
Control.Change -= new EventHandler(this.ChangeEventHandler);
AddHandler Control.Change, AddressOf Me.ChangeEventHandler
RemoveHandler Control.Change, AddressOf Me.ChangeEventHandler
Control.Change += this.ChangeEventHandler;
Control.Change -= this.ChangeEventHandler;
|
C# |
VB |
JScript |
|
强制类型转换
MyObject obj = (MyObject)Session["Some Value"];
IMyObject iObj = obj;
Dim obj As MyObject
Dim iObj As IMyObject
obj = Session("Some Value")
iObj = CType(obj, IMyObject)
var obj : MyObject = MyObject(Session("Some Value"));
var iObj : IMyObject = obj;
|
C# |
VB |
JScript |
|
转换
int i = 3;
String s = i.ToString();
double d = Double.Parse(s);
Dim i As Integer
Dim s As String
Dim d As Double
i = 3
s = i.ToString()
d = CDbl(s)
' See also CDbl(...), CStr(...), ...
var i : int = 3;
var s : String = i.ToString();
var d : double = Number(s);
|
C# |
VB |
JScript |
|
带继承的类定义
using System;
namespace MySpace {
public class Foo : Bar {
int x;
public Foo() { x = 4; }
public void Add(int x) { this.x += x; }
override public int GetNum() { return x; }
}
}
// csc /out:librarycs.dll /t:library
// library.cs
Imports System
Namespace MySpace
Public Class Foo : Inherits Bar
Dim x As Integer
Public Sub New()
MyBase.New()
x = 4
End Sub
Public Sub Add(x As Integer)
Me.x = Me.x + x
End Sub
Overrides Public Function GetNum() As Integer
Return x
End Function
End Class
End Namespace
' vbc /out:libraryvb.dll /t:library
' library.vb
import System;
package MySpace {
class Foo extends Bar {
private var x : int;
function Foo() { x = 4; }
function Add(x : int) { this.x += x; }
override function GetNum() : int { return x; }
}
}
// jsc /out:libraryjs.dll library.js
|
C# |
VB |
JScript |
|
实现接口
public class MyClass : IEnumerable {
...
IEnumerator IEnumerable.GetEnumerator() {
...
}
}
Public Class MyClass : Implements IEnumerable
...
Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
...
End Function
End Class
public class MyClass implements IEnumerable {
...
function IEnumerable.GetEnumerator() : IEnumerator {
...
}
}
|
C# |
VB |
JScript |
|
带 Main 方法的类定义
using System;
public class ConsoleCS {
public ConsoleCS() {
Console.WriteLine("Object Created");
}
public static void Main (String[] args) {
Console.WriteLine("Hello World");
ConsoleCS ccs = new ConsoleCS();
}
}
// csc /out:consolecs.exe /t:exe console.cs
Imports System
Public Class ConsoleVB
Public Sub New()
MyBase.New()
Console.WriteLine("Object Created")
End Sub
Public Shared Sub Main()
Console.WriteLine("Hello World")
Dim cvb As New ConsoleVB
End Sub
End Class
' vbc /out:consolevb.exe /t:exe console.vb
class ConsoleCS {
function ConsoleCS() {
print("Object Created");
}
static function Main (args : String[]) {
print("Hello World");
var ccs : ConsoleCS = new ConsoleCS();
}
}
// jsc /out:consolejs.exe /exe console.js
|
C# |
VB |
JScript |
|
标准模块
using System;
public class Module {
public static void Main (String[] args) {
Console.WriteLine("Hello World");
}
}
// csc /out:consolecs.exe /t:exe console.cs
Imports System
Public Module ConsoleVB
Public Sub Main()
Console.WriteLine("Hello World")
End Sub
End Module
' vbc /out:consolevb.exe /t:exe console.vb
print("Hello World");
// jsc /out:consolejs.exe /exe console.js
|
C# |
VB |
JScript |
|