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