不同语言中的关键字的比较
更新:2007 年 11 月
本主题列出用一个语言关键字即可概述的一般性编程任务。有关需要代码示例的任务的更多信息,请参见 使用代码示例比较不同语言中的编程概念。
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
声明变量 |
声明符(概念,不是关键字) |
声明符(关键字包括用户定义的类型和内置类型) |
var |
[隐式声明] PUBLIC LOCAL PRIVATE |
|
声明已命名的常数 |
const |
#DEFINE |
|||
创建类的一个新实例 |
new |
NEWOBJECT( ) 函数 |
|||
创建新对象 |
CoCreateInstance()(用于 COM 对象) |
新的 ActiveXObject() |
CREATEOBJECT( ) 函数 |
||
将对象赋值给对象变量 |
= |
= |
= |
= STORE |
|
函数/方法不返回值 |
Sub2 |
void |
Void(仅用于 COM 服务器) |
||
重载函数或方法(Visual Basic:重载过程或方法) |
(为达此目的不需要任何语言关键字) |
(为达此目的不需要任何语言关键字) |
(为达此目的不需要任何语言关键字) |
(为达此目的不需要任何语言关键字) |
|
引用当前对象 |
Me3 |
this |
this thisform |
||
对当前对象的虚方法进行非虚拟调用 |
MyClass::Func1(),其中 MyClass 是包含成员函数 Func1 的 C++ 类。 |
n/a |
n/a |
n/a |
|
从字符串中检索字符 |
str(10),其中 str 为字符串 |
*(p + 10) 或 p[10],其中 p 为 char* 或 wchar_t* |
str[10],其中 str 为字符串 |
str[10],其中 str 为 string charAt substring substr |
SUBSTR( ) |
声明一个复合数据类型(结构) |
class, interface |
n/a |
|||
初始化对象(构造函数) |
构造函数(概念,不是关键字) |
构造函数或系统默认类型构造函数 |
构造函数(概念,不是关键字)6 |
Init 事件 |
|
直接终止对象 |
n/a |
~ClassName |
n/a |
n/a |
n/a |
紧接在垃圾回收回收对象之前系统所调用的方法7 |
Finalize(在 Visual Basic 6.0 中为 Class_Terminate) |
Destructors (C++)(概念,不是关键字) |
n/a |
Destroy 事件 |
|
在声明变量处对其进行初始化 |
Dim x As Long = 5 Dim c As New Car(FuelTypeEnum.Gas) |
// 初始化为值: int x=5; // 使用适当的构造函数: C c(10); |
// 初始化为值: int x = 123; // 或使用默认构造函数: int x = new int(); |
var x = 5 var y : car = new car() |
LOCAL x x = 5 |
获取函数的地址 |
AddressOf(此运算符以委托实例的形式返回对函数的引用) |
使用不带括号的函数名称 |
n/a |
||
回调 |
将一个函数的地址传递给另外一个回调调用器的函数。有关示例,请参见如何:在 Visual Basic 中将过程传递给另一过程。 |
CALLBACK(标准类型) callback(IDL 属性) |
n/a |
n/a |
|
声明对象可以被异步修改 |
n/a |
n/a |
n/a |
||
强制显式声明变量 |
n/a(所有变量必须先声明才能使用) |
n/a(所有变量必须先声明才能使用) |
快速模式(默认情况下打开) |
_VFP.LanguageOptions NEW |
|
启用局部类型推理 |
|||||
测试不引用对象的对象变量 |
pobj == NULL |
obj == null |
obj == undefined obj == null |
VARTYPE(obj)=="0" |
|
不引用对象的对象变量的值 |
nullptr |
null undefined |
.F. |
||
测试数据库空表达式 |
n/a |
n/a |
x == null |
ISNULL( ) |
|
测试 Variant 变量是否已被初始化 |
n/a |
n/a |
n/a |
x == undefined |
EMPTY( ) |
定义默认属性 |
property: property 关键字引用托管代码 |
n/a |
n/a |
面向对象的编程
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
引用基类 |
super |
BaseClass 属性 ParentClass 属性 DODEFAULT() Class::member |
|||
声明接口 |
interface |
DEFINE CLASS |
|||
指定要实现的接口 |
Implements(语句) |
(仅从接口派生) class C1 : public I1 |
class C1 : I1 接口 |
IMPLEMENTS |
IMPLEMENTS NEW |
声明类 |
class |
DEFINE CLASS MyClass AS <ParentClass> |
|||
声明模块 |
static class |
static class |
n/a |
n/a |
|
声明类或结构的分部定义 |
n/a |
n/a |
n/a |
||
指定一个类只能被继承。不能创建该类的实例 |
abstract |
n/a |
|||
指定一个类不能被继承。 |
final |
n/a |
|||
声明一个枚举类型 |
enum |
n/a |
|||
声明一个类常数 |
const(应用于字段声明) |
const |
#DEFINE |
||
从基类派生一个类 |
Class C1 : public Base(为达此目的不需要任何语言关键字) |
class C1 : C2 |
Class c1 extends c2 |
DEFINE CLASS MyClass AS ParentClass |
|
重写方法或属性 |
(除了进行 /clr 编译需要 override 外,为达此目的不需要任何语言关键字,请参见 Derived Classes) |
(为达此目的不需要任何语言关键字) |
(为达此目的不需要任何语言关键字) |
||
声明一个必须在派生类中实现的方法 |
将 = 0 置于声明结尾处(纯虚方法) |
abstract |
(为达此目的不需要任何语言关键字) |
||
声明一个不能重写的方法 |
NotOverridable(默认为 NotOverridable 的方法。) |
final |
n/a |
||
声明虚方法或属性,或属性访问器 |
(默认情况下,方法为虚拟) |
n/a |
|||
在派生类中隐藏基类成员 |
n/a |
||||
声明一个对类方法的类型安全的引用 |
使用不带括号的函数名称 |
n/a |
|||
指定变量可以包含一个要处理其事件的对象 |
n/a |
(编写代码 - 没有特定的关键字) |
(编写代码 - 没有特定的关键字) |
EVENTHANDLER( ) NEW |
|
指定要为其调用事件过程的事件 |
Handles(仍可通过命名模式将事件过程与 WithEvents 变量关联起来) |
n/a |
event += eventHandler; |
n/a |
BINDEVENTS( ) |
一次性评定对象表达式的值以访问其多个成员 |
n/a |
with9 |
WITH ... ENDWITH |
异常处理
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
结构化异常处理 |
Try <attempt> Catch <处理错误> Finally <总是执行> End Try Throw |
try catch finally throw |
TRY [ tryCommands ] [ CATCH [ To VarName ] [ WHEN IExpression ] ] [ catchCommands ] ] [ THROW [ eUserExpression ] ] [ EXIT ] [ FINALLY [ finallyCommands ] ] ENDTRY |
||
C++ 异常处理 |
n/a |
n/a |
n/a |
n/a |
决策结构
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
决策结构(选择) |
Select Case ...Case、Case Else、End Select |
case |
switch case break |
CASE ICASE |
|
决策结构 (if ... then) |
If ... Then、ElseIf ... Then、Else、EndIf |
if else |
IF ... ENDIF IIF( ) |
||
循环结构(有条件的) |
While、Do [While、Until] ...Loop [While、Until] |
do、while break、continue |
DO、WHILE(子句) |
||
循环结构(迭代) |
For ...[Exit For]、Next For Each ...[Exit For]、Next |
for (x=0;x<10;x++){...} for (prop in obj) { print (obj[prop]);} |
FOR(子句) FOR ... ENDFOR Continue NEXT FOR EACH(子句)、FOR ... ENDFOR、Continue、Next |
数组
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
声明一个数组 |
int[] x = new int[5]; |
var x : int[] var arr = Array() |
DIMENSION DECLARE |
||
初始化一个数组 |
var x : int[] = [1, 2, 3, 4, 5] var arr = new Array(1, 2, 3, 4, 5)] |
x[1] = 1 x[2] = 2 |
|||
重新分配数组 |
n/a |
n/a |
arr.length=newSize(仅用于 JScript 数组)10 |
DIMENSION DECLARE |
类范围
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
在项目或程序集外可见 |
public |
n/a |
|||
在程序集外或包内不可见 |
internal |
n/a |
|||
仅在当前类或派生类中可见 |
n/a |
n/a |
n/a |
||
访问仅限于从包含类派生的当前程序集或类型。 |
Protected Friend |
protected internal |
n/a |
n/a |
|
仅在项目内可见(对于嵌套的类,在包含类内可见) |
private |
n/a |
成员范围
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
可在类、项目和模块外访问 |
public |
(为达此目的不需要任何语言关键字) |
|||
可在类外、但在项目或包内访问 |
public private: |
internal |
n/a |
||
仅能由当前类和派生类访问 |
protected |
PROTECTED |
|||
仅可在类或模块内访问 |
private |
HIDDEN |
|||
指定一个函数或另一个类可以访问声明类的私有成员 |
n/a |
friend(C++ 中不允许) |
friend |
n/a |
n/a |
在程序集内受保护,对其他程序集来说是私有的 |
n/a |
protected private |
n/a |
n/a |
n/a |
访问仅限于从包含类派生的当前程序集或类型 |
Protected Friend |
protected internal |
n/a |
n/a |
杂项生存期
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
保留过程的局部变量 |
Static11 |
n/a |
n/a |
||
由一个类的所有实例共享 |
static |
n/a |
杂项
用途 |
Visual Basic |
C++ |
C# |
JScript |
Visual FoxPro |
---|---|---|---|---|---|
注释代码 |
//、/* */ 用于多行注释 |
* && NOTE |
|||
区分大小写? |
否 |
是 |
是 |
是 |
否 |
调用 Windows API |
n/a |
n/a |
DECLARE - DLL |
||
声明并引发一个事件 |
n/a |
n/a |
RAISEEVENT( ) 函数 |
||
线程基元 |
n/a |
n/a |
n/a |
||
转到(分支) |
n/a |
n/a |
1 在 Visual Basic 中,可以单独使用 Static 声明变量(例如,Static x As Long)的唯一位置是在过程之内。
2 在 Visual Basic 中,使用 Sub 关键字声明的过程不能返回值。如果一个过程需要返回值,则必须使用 Function 关键字声明它。
3 在 Visual Basic 中,在编译时不解析 Me,因此可以将它用作属性或方法的返回值。
4 在 JScript 中仍然支持 substr 函数,但它已不再是访问字符串中字符的首选方式。从字符串中的特定位置访问某个字符最有效方法是使用括号。例如,若要访问字符串 str 中的第十个字符,请使用 str[10]。
5 在 Visual Basic 中,从 .NET Framework System.Object 派生的类的构造函数始终被命名为 New。
6 在 JScript 中,不允许对构造函数进行重写。
7 通常,此方法中的代码释放不能由垃圾回收器自动释放的系统资源。
8 在 C++ 中,一个抽象类至少包含一个纯虚拟成员。
9 在 JScript 中,没有像在 Visual Basic 中使用的前导句点。这个特点容易造成混淆,原因是变量可能会被误认为属性,反之亦然。还应注意 with 语句会产生效率低下的代码。
10 在 JScript 中,这不会重新分配数组,也不会扩大数组。JScript 数组(声明为 Array 类型)总是稀疏的动态数组。本机数组(声明为 System.Array 或 type[])不是动态数组。
11 在 Visual Basic 中,非共享类方法的静态局部变量是按照类实例存储的,而不是像其他语言那样共享一个副本。如果使用 Static 声明一个变量,当变量失去并重新获得作用域时,该变量的值仍会保留。