本主题列出用一个语言关键字即可概述的一般性编程任务。 有关需要代码示例的任务的更多信息,请参见 使用代码示例比较不同语言中的编程概念。
| 用途 | 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 声明一个变量,当变量失去并重新获得作用域时,该变量的值仍会保留。