不同语言中的关键字的比较
本主题列出用一个语言关键字即可概述的一般性编程任务。 有关需要代码示例的任务的更多信息,请参见 使用代码示例比较不同语言中的编程概念。
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
声明变量 |
静态1 |
声明符(概念,不是关键字) |
声明符(关键字包括用户定义的类型和内置类型) |
|
声明已命名的常数 |
||||
创建类的一个新实例 |
new |
|||
创建新对象 |
CreateObject(用于 COM 对象) |
CoCreateInstance()(用于 COM 对象) |
new |
|
将对象赋值给对象变量 |
= |
= |
<- |
|
函数/方法不返回值 |
Sub2 |
|||
重载函数或方法(Visual Basic:重载过程或方法) |
(为达此目的不需要任何语言关键字) |
(为达此目的不需要任何语言关键字) |
||
引用当前对象 |
Me3 |
|||
对当前对象的虚方法进行非虚拟调用 |
MyClass::Func1(),其中 MyClass 是包含成员函数 Func1 的 C++ 类。 |
不适用 |
不适用 |
|
从字符串中检索字符 |
*(p + 10) 或 p[10],其中 p 为 char* 或 wchar_t* |
str[10],其中 str 为字符串 |
str.Chars(10),其中 str 为字符串 |
|
声明一个复合数据类型(结构) |
||||
初始化对象(构造函数) |
构造函数(概念,不是关键字) |
构造函数或系统默认类型构造函数 |
||
直接终止对象 |
不适用 |
~ClassName |
不适用 |
不适用 |
紧接在垃圾回收回收对象之前系统所调用的方法5 |
Finalize(在 Visual Basic 6.0 中为 Class_Terminate) |
Destructors (C++)(概念,不是关键字) |
||
保证在使用后释放非托管资源 |
不适用 |
|||
在声明变量处对其进行初始化 |
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(); |
let x = 123 |
获取函数的地址 |
AddressOf(此运算符以委托实例的形式返回对函数的引用) |
|||
回调 |
将一个函数的地址传递给另外一个回调调用器的函数。 有关示例,请参见如何:在 Visual Basic 中将过程传递给另一过程。 |
CALLBACK(标准类型) callback(IDL 特性) |
不适用 |
|
声明对象可以被异步修改 |
不适用 |
不适用 |
||
强制显式声明变量 |
不可用(所有变量必须先声明才能使用) |
不可用(所有变量必须先声明才能使用) |
不可用(所有变量必须先声明才能使用) |
|
启用局部类型推理 |
自动启用类型推理 |
|||
测试不引用对象的对象变量 |
pobj == NULL |
obj == null |
在 match 表达式中使用选项类型 |
|
不引用对象的对象变量的值 |
nullptr |
|||
测试数据库空表达式 |
不适用 |
不适用 |
不适用 |
|
测试 Variant 变量是否已被初始化 |
不适用 |
不适用 |
不适用 |
不适用 |
定义默认属性 |
property: property 关键字引用托管代码 |
面向对象编程
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
引用基类 |
||||
声明接口 |
||||
指定要实现的接口 |
(仅从接口派生) class C1 : public I1 |
class C1 : I1 接口 |
||
声明类 |
||||
声明模块 |
static class |
static class |
||
声明类或结构的分部定义 |
不适用 |
无直接等效项。 请参见类型扩展 (F#)。 |
||
指定一个类只能被继承。 不能创建该类的实例 |
||||
指定一个类不能被继承。 |
||||
声明一个枚举类型 |
||||
声明一个类常数 |
const(应用于字段声明) |
默认情况下,值不可变(常量)。 请参见值 (F#)。 |
||
从基类派生一个类 |
Class C1 : public Base(为达此目的不需要任何语言关键字) |
class C1 : C2 |
||
重写方法或属性 |
(除了进行 /clr 编译需要 override 外,为达此目的不需要任何语言关键字,请参见 Derived Classes) |
|||
声明一个必须在派生类中实现的方法 |
将 = 0 置于声明结尾处(纯虚方法) |
|||
声明一个不能重写的方法 |
NotOverridable(默认为 NotOverridable 的方法。) |
使用密封特性 |
||
声明虚方法或属性,或属性访问器 |
abstract,如方法中所述。 |
|||
在派生类中隐藏基类成员 |
不允许隐藏虚拟或抽象方法 |
|||
声明一个对类方法的类型安全的引用 |
myObj.myFunction,其中 myObj 为一个对象,并且 myMethod 是可用于该对象的方法。 |
|||
指定变量可以包含一个要处理其事件的对象 |
不适用 |
(编写代码 - 没有特定的关键字) |
不适用 |
|
指定要为其调用事件过程的事件 |
Handles(仍可通过命名模式将事件过程与 WithEvents 变量关联起来) |
不适用 |
event += eventHandler; |
不适用 |
一次性评定对象表达式的值以访问其多个成员 |
不适用 |
不适用 |
不适用 |
异常处理
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
异常处理 |
结构化异常处理:__try、__except C++ 异常处理: CLR 异常处理: |
决策结构
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
决策结构(选择) |
||||
决策结构 (if ... then) |
||||
循环结构(有条件的) |
||||
循环结构(迭代) |
数组
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
声明一个数组 |
int[] x = new int[5]; |
let x = [| 1; 2; 3; 4; 5 |] |
||
初始化一个数组 |
let x = [| 1; 2; 3; 4; 5 |] |
|||
重新分配数组 |
不适用 |
不适用 |
不适用 |
类范围
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
在项目或程序集外可见 |
||||
仅在声明它的程序集内可见 |
||||
仅在当前类或派生类中可见 |
不适用 |
不适用 |
||
访问仅限于从包含类派生的当前程序集或类型。 |
protected internal |
不适用 |
||
仅在项目内可见(对于嵌套的类,在包含类内可见) |
成员范围
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
可在类、项目和模块外访问 |
||||
可在类外、但在项目或包内访问 |
public private |
|||
仅能由当前类和派生类访问 |
不适用 |
|||
仅可在类或模块内访问 |
||||
指定一个函数或另一个类可以访问声明类的私有成员 |
不适用 |
不适用 |
不适用 |
|
在程序集内受保护,对其他程序集来说是私有的 |
不适用 |
protected private |
不适用 |
不适用 |
访问仅限于从包含类派生的当前程序集或类型 |
protected internal |
不适用 |
杂项生存期
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
保留过程的局部变量 |
静态7 |
不适用 |
||
由一个类的所有实例共享 |
杂项
用途 |
Visual Basic |
C++ |
C# |
F# |
---|---|---|---|---|
注释代码 |
//、(* *) 用于多行注释 |
|||
是否区分大小写 |
否 |
是 |
是 |
是 |
调用 Windows API |
不适用 |
使用平台调用。 请参见外部函数 (F#)。 |
||
声明并引发一个事件 |
不适用 |
|||
线程基元 |
不适用 |
|||
转到(分支) |
不适用 |
1 在 Visual Basic 中,可以单独使用 Static 声明变量(例如,Static x As Long)的唯一位置是在过程之内。
2 在 Visual Basic 中,使用 Sub 关键字声明的过程不能返回值。 如果一个过程需要返回值,则必须使用 Function 关键字声明它。
3 在 Visual Basic 中,在编译时不解析 Me,因此可以将它用作属性或方法的返回值。
4 在 Visual Basic 中,从 .NET Framework System.Object 派生的类的构造函数始终被命名为 New。
5 通常,此方法中的代码释放不能由垃圾回收器自动释放的系统资源。
6 在 C++ 中,一个抽象类至少包含一个纯虚拟成员。
7 在 Visual Basic 中,非共享类方法的静态局部变量是按照类实例存储的,而不是像其他语言那样共享一个副本。 如果使用 Static 声明一个变量,当变量失去并重新获得作用域时,该变量的值仍会保留。