不同语言中的关键字的比较

本主题列出用一个语言关键字即可概述的一般性编程任务。 有关需要代码示例的任务的更多信息,请参见 使用代码示例比较不同语言中的编程概念

用途

Visual Basic

C++

C#

F#

声明变量

Dim

Public

Friend

Protected

Private

Shared

静态1

声明符(概念,不是关键字)

声明符(关键字包括用户定义的类型和内置类型)

let 绑定

声明已命名的常数

Const

const

const

readonly

let 绑定

创建类的一个新实例

新建

new

ref new、gcnew(C++ 组件扩展)

new

new

创建新对象

新建

CreateObject(用于 COM 对象)

CoCreateInstance()(用于 COM 对象)

new 

new

将对象赋值给对象变量

=

=

=

<-

函数/方法不返回值

Sub2

void

void

单位类型

重载函数或方法(Visual Basic:重载过程或方法)

Overloads

(为达此目的不需要任何语言关键字)

(为达此目的不需要任何语言关键字)

override

引用当前对象

Me3

this

this

使用自我标识符,如方法成员中所述

对当前对象的虚方法进行非虚拟调用

MyClass

MyClass::Func1(),其中 MyClass 是包含成员函数 Func1 的 C++ 类。

不适用

不适用

从字符串中检索字符

GetChar或 str(10)str 是字符串的位置

*(p + 10) 或 p[10],其中 p 为 char* 或 wchar_t*

str[10],其中 str 为字符串

string

str.Chars(10),其中 str 为字符串

Strings

声明一个复合数据类型(结构)

结构

接口

class

struct

union

__interface

struct

class

接口

初始化对象(构造函数)

Sub New()4

构造函数(概念,不是关键字)

构造函数或系统默认类型构造函数

类构造函数

构造函数

直接终止对象

不适用

~ClassName

不适用

不适用

紧接在垃圾回收回收对象之前系统所调用的方法5

Finalize(在 Visual Basic 6.0 中为 Class_Terminate)

析构函数(C++)(概念,不是关键字)

析构函数

Finalize

保证在使用后释放非托管资源

Using

不适用

使用

资源管理

在声明变量处对其进行初始化

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(此运算符以委托实例的形式返回对函数的引用)

委托(C++ 组件扩展)

Delegate — 委托

函数

回调

将一个函数的地址传递给另外一个回调调用器的函数。 有关示例,请参见如何:在 Visual Basic 中将过程传递给另一过程

CALLBACK(标准类型)

callback(IDL 特性)

Delegate — 委托

不适用

声明对象可以被异步修改

不适用

volatile

volatile

不适用

强制显式声明变量

Option Explicit

不可用(所有变量必须先声明才能使用)

不可用(所有变量必须先声明才能使用)

不可用(所有变量必须先声明才能使用)

启用局部类型推理

Option Infer

自动启用类型推理

测试不引用对象的对象变量

obj Is Nothing

pobj == NULL

obj == null

在 match 表达式中使用选项类型

选项

match 表达式

不引用对象的对象变量的值

Nothing

nullptr

null

Null 值

测试数据库空表达式

IsDBNull

不适用

不适用

不适用

测试 Variant 变量是否已被初始化

不适用

不适用

不适用

不适用

定义默认属性

默认

property: property"关键字来引用该托管代码

索引器

索引属性

面向对象编程

用途

Visual Basic

C++

C#

F#

引用基类

MyBase

__super

base

base

声明接口

接口

__interface

接口类(C++ 组件扩展)

接口

接口

指定要实现的接口

Implements

(仅从接口派生)

class C1 : public I1

class C1 : I1

接口

接口

声明类

class

类和结构(C++ 组件扩展)

class

type

声明模块

模块

static class

static class

Module — 模块

声明类或结构的分部定义

Partial

不适用

Partial

无直接等效项。 请参见 类型扩展 (F#)

指定一个类只能被继承。 不能创建该类的实例

MustInherit

abstract(C++ 组件扩展)6

abstract

抽象类

指定一个类不能被继承。

NotInheritable

sealed(C++ 组件扩展)

sealed

SealedAttribute

声明一个枚举类型

Enum

enum

enum

type

声明一个类常数

Const

const

const(应用于字段声明)

默认情况下,值不可变(常量)。 请参见 值 (F#)

从基类派生一个类

Class C1 Inherits C2

Class C1 : public Base(为达此目的不需要任何语言关键字)

class C1 : C2

class

继承

重写方法或属性

Overrides

(除了进行 /clr 编译需要 重写(C++ 组件扩展) 外,为达此目的不需要任何语言关键字,请参见 派生类

override

override

声明一个必须在派生类中实现的方法

MustOverride

将 = 0 置于声明结尾处(纯虚方法)

abstract

abstract

声明一个不能重写的方法

NotOverridable(默认为 NotOverridable 的方法。)

sealed(C++ 组件扩展)

sealed

使用密封特性

声明虚方法或属性,或属性访问器

Overridable

virtual

virtual

abstract,如方法中所述。

在派生类中隐藏基类成员

Shadowing

new(vtable 中的新槽)(C++ 组件扩展)

new

不允许隐藏虚拟或抽象方法

声明一个对类方法的类型安全的引用

Delegate

委托(C++ 组件扩展)

Delegate — 委托

myObj.myFunction,其中 myObj 为一个对象,并且 myMethod 是可用于该对象的方法。

指定变量可以包含一个要处理其事件的对象

WithEvents

不适用

(编写代码 - 没有特定的关键字)

不适用

指定要为其调用事件过程的事件

Handles(仍可通过命名模式将事件过程与 WithEvents 变量关联起来)

不适用

event += eventHandler;

不适用

一次性评定对象表达式的值以访问其多个成员

With... End With

不适用

不适用

不适用

异常处理

用途

Visual Basic

C++

C#

F#

异常处理

Try... Catch... Finally... End Try

Throw

结构化异常处理:__try、__except

__finally

C++ 异常处理:

try、catch、throw

CLR 异常处理:

异常处理(C++ 组件扩展)

try、catch、finally

throw

try

with

finally

决策结构

用途

Visual Basic

C++

C#

F#

决策结构(选择)

选择... Case... End Select

switch、case、default

goto

break

switch、case

默认

goto

break

match 表达式

决策结构 (if ... then)

If... Then... Else... End If

ElseIf

if、else

if、else

if...then...else

循环结构(有条件的)

While... End While

Do...Loop

do、while

continue

do

while

continue

while...do

循环结构 (迭代)

For... 下一页

For Each... 下一页

for

for

foreach

for...to

for...in

数组

用途

Visual Basic

C++

C#

F#

声明一个数组

Dim a() As Long

int x[5];

int[] x = new int[5];

let x = [| 1; 2; 3; 4; 5 |]

数组

初始化一个数组

Dim a() As Long = {3, 4, 5}

int x[5]= {1,2,3,4,5};

int[] x = new int[5] {1, 2, 3, 4, 5};

let x = [| 1; 2; 3; 4; 5 |]

数组

重新分配数组

Redim

不适用

不适用

不适用

类范围

用途

Visual Basic

C++

C#

F#

在项目或程序集外可见

Public

public

public

public

仅在声明它的程序集内可见

Friend

private

internal

internal

仅在当前类或派生类中可见

Protected

不适用

Protected

不适用

访问仅限于从包含类派生的当前程序集或类型。

Protected Friend

类型和成员可见性

protected internal

可访问性级别

不适用

仅在项目内可见(对于嵌套的类,在包含类内可见)

Private

private

private

private

成员范围

用途

Visual Basic

C++

C#

F#

可在类、项目和模块外访问

Public

public

public

public

可在类外、但在项目或包内访问

Friend

public private

internal

internal

仅能由当前类和派生类访问

Protected

protected

protected

不适用

仅可在类或模块内访问

Private

private

private

private

指定一个函数或另一个类可以访问声明类的私有成员

不适用

friend

不适用

不适用

在程序集内受保护,对其他程序集来说是私有的

不适用

protected private

不适用

不适用

访问仅限于从包含类派生的当前程序集或类型

Protected Friend

类型和成员可见性

protected internal

可访问性级别

不适用

杂项生存期

用途

Visual Basic

C++

C#

F#

保留过程的局部变量

静态7

static

static

不适用

由一个类的所有实例共享

Shared

static

static

static

杂项

用途

Visual Basic

C++

C#

F#

注释代码

'

Rem

//、/* */ 用于多行注释

//、/* */ 用于多行注释

/// 用于 XML 注释

//、(* *) 用于多行注释

是否区分大小写

调用 Windows API

Declare <API>

不适用

使用平台调用

使用平台调用。

请参见 外部函数 (F#)

声明并引发一个事件

Event

RaiseEvent

不适用

事件

事件

线程基元

SyncLock

不适用

lock

lock

转到(分支)

Goto

goto

goto

不适用

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 声明一个变量,当变量失去并重新获得作用域时,该变量的值仍会保留。

请参见

参考

使用代码示例比较不同语言中的编程概念

不同语言中的运算符的比较

不同语言中的数据类型的比较

不同语言和库中的控件和可编程对象的比较

其他资源

等效语言