目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
声明变量 | keywords="vastmDim" />Private、Public、Friend、Protected、Static1、Shared、Dim | public, private, protected static, final, volatile, transient | keywords="_clang_Declarators_and_Variable_Declarations" />声明符(概念,不是关键字) | 声明符(关键字包括用户定义的类型和内置类型) | keywords="jsstmvar" />var | [隐式声明];或 PUBLIC、LOCAL、PRIVATE |
声明已命名的常量 | keywords="vastmConst" />Const | final | keywords="_langref_const" />const | keywords="vclrfConstPG" />const keywords="vclrfReadonlyPG" />readonly | keywords="jsstmconst" />const NEW | #DEFINE |
创建新对象 | keywords="vakeyNew" />New | new | keywords="_pluslang_new_Operator" />new | keywords="vclrfNewOpPG" />new | keywords="jsoprnew" />new | n/a |
keywords="vafctCreateObject" />CreateObject() | n/a | keywords="vclrfCComPtrBaseCoCreateInstance" />CoCreateInstance()(用于 COM 对象) | new ActiveXObject() | CREATEOBJECT; NEWOBJECT | ||
将对象赋值给对象变量 | keywords="vaoprAssign" />= | = | = | = | keywords="jsoprAssign" />= | =;或 STORE |
函数/方法不返回值 | keywords="vastmSub" />Sub2 | void | keywords="_langref_void" />void | keywords="vcgrfVoid" />void | void | Void(仅用于 COM 服务器) |
重载函数或方法(Visual Basic:重载过程或方法) | keywords="vakeyOverloads" />Overloads NEW | (达到此目的时不需要任何语言关键字) | (达到此目的时不需要任何语言关键字) | (达到此目的时不需要任何语言关键字) | (达到此目的时不需要任何语言关键字) | (达到此目的时不需要任何语言关键字) |
引用当前对象 | keywords="vakeyMe" />Me3 | this | keywords="_pluslang_The_this_Pointer" />this | keywords="vclrfThisPG" />this | keywords="jsstmthis" />this | This; Thisform |
对当前对象的虚拟方法进行非虚拟调用 | keywords="vakeyMyClass" />MyClass | n/a | MyClass:Func1() ,其中 MyClass 是包含成员函数 Func1 的 C++ 类。 | n/a | n/a | n/a |
从字符串中检索字符 | keywords="valrfGetCharFunction" />GetChar 函数 NEW | "" | *(p + 10) 或 p[10],其中 p 为 char* | [] | str[10],此处的 str 是一个字符串, keywords="jsmthcharat" />charAt, keywords="jsmthsubstring" />substring, keywords="jsmthsubstr" />substr4 | SUBSTR( ) |
声明复合数据类型(Visual Basic:结构) | keywords="vastmStructure" />Structure <members> End Structure | class, interface | keywords="vcsmpClass" />class, keywords="vcsmpStruct" />struct, keywords="_pluslang_Unions" />union keywords="vcrefInterface" />__interface | keywords="vcrefStructTypes" />struct, keywords="vcrefTheClassType" />class, keywords="vcrefTheInterfaceType" />interface | keywords="jsstmClass" />class, keywords="jsstmInterface" />interface NEW | n/a |
初始化对象(构造函数) | keywords="vaconUsingConstructorsDestructors" />Sub New()5 | 构造函数(概念,不是关键字) | keywords="_pluslang_Constructors" />构造函数(概念,不是关键字) | 构造函数或系统默认类型构造函数 | keywords="jsconCreatingOwnObjects" />构造函数(概念,不是关键字)6 | Init 事件 |
直接终止对象 | n/a | n/a | ~ClassName | n/a | n/a | n/a |
紧接在垃圾回收回收对象之前系统所调用的方法7 | keywords="vaconFinalizeDestructors" />Finalize NEW (在 Visual Basic 6.0 中为 Class_Terminate) | finally | 析构函数 | 析构函数 | n/a | Destroy 事件 |
在声明变量处对其进行初始化 | keywords="vastmDim" />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(); | keywords="jsstmvar" />var x = 5 keywords="jsstmvar" />var y : car = new car() | n/a |
获取函数的地址 | keywords="vaoprAddressOf" />AddressOf(对于类成员,此运算符以委托实例的形式返回对函数的引用) | delegate、multicast、/** @delgate */ | keywords="vclrf__delegate" />__delegate | keywords="vcrefTheDelegateType" />delegate | 使用不带括号的函数名称 | n/a |
回调 | n/a | 将一个函数的地址传递给另外一个回调调用器的函数。有关示例,请参见 keywords="cpconUsingCallbackFunctions" />使用回调函数。 | CALLBACK(标准类型); callback(IDL 属性) | n/a | n/a | n/a |
声明对象可以被异步修改 | n/a | volatile | keywords="_langref_volatile" />volatile | keywords="vclrfVolatile" />volatile | n/a | n/a |
强制显式声明变量 | keywords="vastmOptionExplicit" />Option Explicit | 无法使用。所有变量在使用前必须先声明。 | 无法使用。所有变量在使用前必须先声明。 | 无法使用。(所有变量必须先声明才能使用) | 快速模式(默认情况下打开) | _VFP.LanguageOptions NEW |
测试不引用对象的对象变量 | keywords="vaconObjVarAssign" />obj = Nothing | pObj == null | pobj == NULL | obj == null | obj == undefined obj == null | EMPTY();ISNULL() |
不引用对象的对象变量的值 | keywords="vakeyNothing" />Nothing | null | n/a | keywords="vclrfNull" />null | null undefined | n/a |
测试数据库空表达式 | keywords="vafctIsNull" />IsDbNull | 受 keywords="frlrfSystemDataSqlTypes" />System.Data.SqlTypes 命名空间中的各种数据类型的支持 | n/a | n/a | x == null | ISNULL( ) |
测试 Variant 变量是否已被初始化 | n/a | n/a | n/a | n/a | x == undefined | EMPTY( ) |
定义默认属性 | keywords="vakeyDefault" />Default NEW | "" | n/a | keywords="vcerrUsingIndexers" />通过使用索引器 | n/a | n/a |
面向对象的编程
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
引用基类 | keywords="vakeyMyBase" />MyBase NEW | super | keywords="vcrefDefault" />__super | keywords="vclrfBasePG" />base | keywords="jsstmSuper" />super NEW | BaseClass 属性;ParentClass 属性;DODEFAULT() |
声明接口 | keywords="vastmInterface" />Interface NEW | interface | keywords="vcrefInterface" />__interface | keywords="vcrefTheInterfaceType" />interface | keywords="jsstmInterface" />interface NEW | DEFINE CLASS |
指定要实现的接口 | keywords="vastmImplements" />Implements(语句) | implements(类声明上的子句) | (仅从接口派生) class C1 : public I1 | class C1 : I1 | keywords="jsstmClass" />implements NEW | IMPLEMENTS NEW |
声明类 | keywords="vastmClass" />Class NEW <实现> | class | keywords="vcsmpClass" />class | keywords="vcrefTheClassType" />class | keywords="jsstmClass" />class NEW | DEFINE CLASS Myclass AS <基类> |
指定一个类只能被继承。不能创建该类的实例。 | keywords="vakeyMustInherit" />MustInherit NEW | abstract | keywords="vclrf__abstract" />__abstract8(仅用在 C++ 的托管扩展中) | keywords="vclrfAbstract" />abstract | keywords="jsrefAbstractAttribute" />abstract NEW | n/a |
指定一个类不能被继承。 | keywords="vakeyNotInheritable" />NotInheritable NEW | final | keywords="vchowFinal" />__sealed(仅用在 C++ 的托管扩展中) | keywords="vclrfSealed" />sealed | keywords="jsrefFinalAttribute" />final NEW | n/a |
声明一个枚举类型 | keywords="vastmEnum" />Enum <members> End Enum | n/a | keywords="_pluslang_C.2b2b_.Enumeration_Declarations" />enum | keywords="vcrefTheEnumerationTypes" />enum | keywords="jsstmenum" />enum NEW | n/a |
声明一个类常数 | keywords="vastmConst" />Const | static final(应用于字段声明) | keywords="_langref_const" />const | keywords="vclrfConstPG" />const(应用于字段声明) | keywords="jsstmconst" />const NEW | #DEFINE |
从基类派生一个类 | keywords="vastmInherits" />Inherits C2 NEW | class C1 extends C2 | Class C1 : public Base(达到此目的不需要任何语言关键字) | class C1 : C2 | keywords="jsstmClass" />class c1 extends c2 NEW | DEFINE CLASS MyClass AS ParentClass |
重写方法 | keywords="vakeyOverrides" />Overrides NEW | (达到此目的时不需要任何语言关键字) | (达到此目的时不需要任何语言关键字) | keywords="vclrfOverridePG" />override | (达到此目的时不需要任何语言关键字) | (达到此目的时不需要任何语言关键字) |
声明一个必须在派生类中实现的方法 | keywords="vakeyMustOverride" />MustOverride NEW | abstract | 将 = 0 置于声明结尾(纯虚拟方法) | keywords="vclrfAbstract" />abstract | keywords="jsrefAbstractAttribute" />abstract NEW | (达到此目的时不需要任何语言关键字) |
声明一个不能重写的方法 | keywords="vakeyNotOverridable" />NotOverridable NEW (默认情况下方法是不能重写的。) | final | keywords="vchowFinal" />__sealed(仅用在 C++ 的托管扩展中) | keywords="vclrfcsharpspec_10_5_5" />sealed | keywords="jsrefFinalAttribute" />final NEW | n/a |
声明一个虚拟方法、属性 (Visual Basic) 或属性访问器(C#、C++) | keywords="vakeyOverridable" />Overridable | (默认情况下,方法为虚拟) | keywords="_langref_virtual" />virtual | keywords="vclrfVirtualPG" />virtual | (默认情况下,方法为虚拟) | n/a |
在派生类中隐藏基类成员 | keywords="vakeyShadows" />Shadowing | n/a | n/a | n/a | keywords="vclrfNewOpPG" />new Modifier | n/a |
声明一个对类方法的类型安全的引用 | keywords="vastmDelegate" />Delegate NEW | delegate、multicast、/** @delgate */ | keywords="vclrf__delegate" />__delegate(仅用在 C++ 的托管扩展中) | keywords="vcrefTheDelegateType" />delegate | 使用不带括号的函数名称 | n/a |
指定变量可以包含一个要处理其事件的对象 | keywords="vakeyWithEvents" />WithEvents | n/a | n/a | (编写代码 - 没有特定的关键字) | (编写代码 - 没有特定的关键字) | EVENTHANDLER( ) NEW |
指定要为其调用事件过程的事件 | keywords="vakeyHandles" />Handles NEW (事件过程仍然可以通过命名模式与一个 WithEvents 变量相关联。) | n/a | n/a | n/a | n/a | n/a |
一次性评定对象表达式的值以访问其多个成员 | keywords="vastmWith" />With objExpr <.member> <.member> End With | n/a | n/a | n/a | keywords="jsstmwith" />with9 | WITH ... ENDWITH |
异常处理
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
结构化异常处理 | keywords="vastmTryCatchFinally" />Try NEW <attempt> Catch <handle errors> Finally <always execute> End Try | try, catch, finally, throw | keywords="_langref_try_except_Statement" />__try, __except, keywords="_langref_try_finally_Statement" />__finally | keywords="vclrfUsingCatchFinallyTogether_PG" />try, catch, finally, keywords="vclrfTheThrowStatement" />throw | keywords="jsstmtrycatch" />try, catch, finally, keywords="jsstmThrow" />throw | ONERROR( )、COMRETURNERROR( )、ERROR();MESSAGE()、AERROR() |
C++ 异常处理 | n/a | n/a | keywords="_pluslang_The_try.2c_.catch.2c_.and_throw_Statements" />try, catch, throw | n/a | n/a | n/a |
决策结构
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
决策结构(选择) | keywords="vaconUsingSelectCase" />Select Case ..., Case, Case Else, End Select | switch、case、break、default | keywords="_pluslang_The_C.2b2b_.switch_Statement" />switch, case, default, keywords="_pluslang_The_goto_Statement" />goto, keywords="_pluslang_The_C.2b2b_.break_Statement" />break | keywords="vclrfTheSwitchStatement" />switch, case, default, goto, break | keywords="jsstmswitch" />switch, case, keywords="jsstmbreak" />break | CASE |
决策结构 (if ... then) | keywords="vaconUsingIfThen" />If ...Then, ElseIf ...Then, Else, End If | if、else | keywords="_pluslang_The_C.2b2b_.if_Statement" />if, else | keywords="vclrfTheIfStatement" />if, else | keywords="jsstmif" />if, else | IF ...ENDIF |
循环结构(有条件的) | keywords="vaconUsingDoLoop" />While, Do [While, Until] ..., Loop [While, Until] | do、while、continue | keywords="_pluslang_The_do_Statement" />do, while, keywords="_pluslang_The_C.2b2b_.continue_Statement" />continue | keywords="vclrfTheDoStatement" />do, keywords="vclrfTheWhileStatementX" />while, keywords="vclrfTheContinueStatement" />continue | keywords="jsconUsingwhileLoops" />do, while, keywords="jsconUsingbreakandcontinueStatements" />break, continue | DO, WHILE(子句) |
循环结构(迭代) | keywords="vaconUsingForNext" />For ..., [Exit For,] Next keywords="vaconUsingForEach" />For Each ..., [Exit For,] Next | for, break | keywords="_pluslang_The_C.2b2b_.for_Statement" />for | keywords="vclrfTheForStatement" />for, keywords="vclrfTheForeachStatement" />foreach | keywords="jsconUsingforLoops" />for (x=0;x<10;x++){...} keywords="jsconUsingforinLoops" />for (prop in obj) { print (obj[prop]);} | FOR(子句),FOR ... ENDFOR, Continue, Next |
数组
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
声明一个数组 | keywords="vaconDeclaringArrays" />Dim a() As Long | int[] x = new int[5]; | keywords="_pluslang_Array" />int x[5]; | keywords="vclrfArraysPG" />int[] x = new int[5]; | keywords="jsconDeclaringArrays" />var x : int[], keywords="jsconDeclaringArrays" />var arr = Array() | DIMENSION、DECLARE |
初始化一个数组 | keywords="vaconUsingArrays" />Dim a() As Long = {3, 4, 5} | int[] x = {1,2,3,4,5}; | keywords="_pluslang_Initializing_Arrays" />int x[5]= {1,2,3,4,5}; | keywords="conArrays" />int[] x = new int[5] {1, 2, 3, 4, 5}; | keywords="jsconDeclaringArrays" />var x : int[] = [1, 2, 3, 4, 5], keywords="jsconDeclaringArrays" />var arr = new Array(1, 2, 3, 4, 5) | DIMENSION、DECLARE |
重新分配数组 | keywords="vastmReDim" />Redim | n/a | n/a | n/a | keywords="jsprolengtharray" />arr.length=newSize(仅用于 JScript 数组)10 | DIMENSION、DECLARE |
类范围
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
在项目或程序集外可见 | keywords="vastmDim" />Public | public | keywords="_langref_public" />public | keywords="vclrfPublicPG" />public | keywords="jsrefPublicAttribure" />public NEW | PUBLIC |
在程序集 (C#/Visual Basic) 外或包(Visual J#、JScript)内不可见 | keywords="vastmDim" />Friend | (省略范围关键字将指定“包范围”) | keywords="_langref_private" />private | keywords="vclrfInternalPG" />internal | keywords="jsrefInternalAttribute" />internal NEW | n/a |
仅在项目内可见(对于嵌套的类,在包含类内可见) | keywords="vastmDim" />Private | private | keywords="_langref_private" />private | keywords="vclrfPrivatePG" />private | keywords="jsrefPrivateAttribute" />private NEW | HIDDEN |
成员范围
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
在类和项目 (Visual J#/JScript/C++/Visual Basic) 或模块 (Visual Basic) 外可访问 | keywords="vastmDim" />Public | public | keywords="_langref_public" />public | keywords="vclrfPublicPG" />public | keywords="jsrefPublicAttribure" />public NEW | PUBLIC |
在类外可访问,但在项目内(C#、Visual Basic、C++)或包(Visual J#、JScript)内不可访问 | keywords="vastmDim" />Friend | (省略范围关键字将指定“包范围”) | public private: | keywords="vclrfInternalPG" />internal | keywords="jsrefInternalAttribute" />internal NEW | n/a |
仅在类 (Visual J#/JScript/C++/Visual Basic) 或模块 (Visual Basic) 内可访问 | keywords="vastmDim" />Private | private | keywords="_langref_private" />private | keywords="vclrfPrivatePG" />private | keywords="jsrefPrivateAttribute" />private NEW | HIDDEN |
仅能被当前类和派生类访问 | keywords="vastmDim" />Protected NEW | protected | keywords="_langref_protected" />protected | keywords="vclrfProtectedPG" />protected | keywords="jsrefProtectedAttribute" />protected NEW | PROTECTED |
指定一个函数或另一个类可以访问声明类的私有成员 | n/a | n/a | keywords="_pluslang_Friends" />friend(在 C++ 的托管扩展中不允许) | n/a | n/a | n/a |
在程序集内受保护,对其他程序集来说是私有的 | n/a | n/a | protected private: (仅用于 C++ 的托管扩展) | n/a | n/a | n/a |
杂项生存期
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
保留过程的局部变量 | keywords="vastmDim" />Static11 | static | keywords="_pluslang_Static" />static | n/a | n/a | PRIVATE |
由一个类的所有实例共享 | keywords="vastmDim" />Shared NEW | static | keywords="_pluslang_Static" />static | keywords="vclrfStaticPG" />static | keywords="jsrefStaticAttribute" />static NEW | n/a |
杂项
目的 | Visual Basic | Visual J# | C++ | C# NEW | JScript | Visual FoxPro |
---|---|---|---|---|---|---|
注释代码 | keywords="vaconCommentsInCode" />' keywords="vastmRem" />Rem | // /** */ /* */ | keywords="_pluslang_C.2b2b_.Comments" />//、/* */ 用于多行注释 | keywords="vclrfYourFirstCSharpProgram_PG" />//、/* */ 用于多行注释 | keywords="jsconComments" />//、/* */ 用于多行注释 | *; && |
区分大小写? | 否 | 是 | 是 | 是 | 是 | 否 |
调用 Windows API | keywords="vastmDeclare" />Declare <API> | 使用 J/Direct 或平台调用 | n/a | keywords="vcwlkPlatformInvokeTutorial" />使用平台调用 | n/a | DECLARE - DLL |
声明并引发一个事件 | keywords="vastmEvent" />Event, keywords="vastmRaiseEvent" />RaiseEvent | 使用 java.awt.Event 类或 /** @event */ | n/a | keywords="vclrfEventPG" />event | n/a | n/a |
线程基元 | keywords="vastmSyncLock" />SyncLock | synchronized | keywords="vclrfLockStatement" />lock | n/a | n/a | |
转到 | keywords="vastmGoto" />Goto | n/a | keywords="_pluslang_The_goto_Statement" />goto | keywords="vclrfTheGotoStatement" />goto | n/a | n/a |
1. Static 可由其本身使用以声明变量的唯一一种情况(例如,Static x As Long
)是在过程中。
2. 在 Visual Basic 中,使用 Sub 关键字声明的过程不能返回值。如果一个过程需要返回值,则必须使用 Function 关键字声明它。
3. 在编译时不解析 Me,因此可以将它用作属性或方法的返回值。
4. 仍然支持 substr 函数,但它已不再是访问字符串中的字符的首选方法。从字符串中的特定位置访问某个字符最有效方法是使用括号。例如,若要访问字符串 str 中的第十个字符,请使用 str[10]。
5. 在 Visual Basic 中,从 .NET Framework System.Object 派生的类的构造函数始终命名为 New。
6. JScript 中不允许对构造函数进行重载。
7. 通常,此方法中的代码释放不能由垃圾回收器自动释放的系统资源。
8. 在 C++ 中,一个抽象类至少包含一个纯虚拟成员。
9. 请注意,没有 Visual Basic 中使用的那种前导句号。这个特点容易造成混淆,原因是变量可能会被误认为属性,反之亦然。还应注意 with 语句会产生效率低下的代码。
10. 不重新分配数组,也不会使其“增长”。JScript 数组(声明为 Array 类型)总是稀疏的动态数组。本机数组(声明为 System.Array 或 type[])不是动态数组。
11. 在 Visual Basic 中,非共享类方法的静态局部变量是按每个类实例存储的,而不是像在其他语言中那样共享一个副本。如果使用 Static 声明一个变量,当变量失去并重新获得作用域时,该变量的值仍会保持。