各言語のキーワードの比較

更新 : 2007 年 11 月

ここでは、言語のキーワードにまとめることができる共通のプログラミング タスクを示します。コード例の必要なタスクの詳細については、「コード例による各言語のプログラミング概念の比較」を参照してください。

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

変数の宣言

Dim ステートメント (Visual Basic)

Public (Visual Basic)

Friend (Visual Basic)

Protected (Visual Basic)

Private (Visual Basic)

Shared (Visual Basic)

Static (Visual Basic)1

宣言子 (概念であり、キーワードではありません)

declarators (ユーザー定義型と組み込み型を含むキーワード)

var

[暗黙の宣言]

PUBLIC

LOCAL

PRIVATE

名前付き定数の宣言

Const

const

const

readonly

const

#DEFINE

クラスの新規インスタンスの作成

New

new

gcnew

new

new

NEWOBJECT( ) 関数

新規オブジェクトの作成

New (Visual Basic)

CreateObject() (COM オブジェクトの場合)

CoCreateInstance() (COM オブジェクトの場合)

new 

new ActiveXObject()

CREATEOBJECT( ) 関数

オブジェクト変数へのオブジェクト割り当て

=

=

=

=

=

STORE

関数またはメソッド (値を返さない)

Sub2

void

void

void

Void (COM サーバーのみ)

関数またはメソッドのオーバーロード (Visual Basic : プロシージャまたはメソッドのオーバーロード)

Overloads

(言語のキーワードは必要ありません。)

(言語のキーワードは必要ありません。)

(言語のキーワードは必要ありません。)

(言語のキーワードは必要ありません。)

現在のオブジェクトへの参照

Me3

this

this

this

this

thisform

現在のオブジェクトにおける仮想メソッドの非仮想呼び出し

MyClass

MyClass::Func1()、ここで MyClass はメンバ関数 Func1 を持つ C++ クラス

適用なし

適用なし

適用なし

文字列からの文字の取得

GetChar 関数

*(p + 10) または p[10]、ここで p は char* または wchar_t*

str[10]、ここで str は文字列

文字列型4

str[10]、ここで str はstring

charAt

substring

substr

SUBSTR( )

複合データ型の宣言 (構造体)

Structure

class

struct

union

__interface

struct

class

interface

class, interface

適用なし

オブジェクトの初期化 (コンストラクタ)

Sub New()5

コンストラクタ (キーワードではなく概念)

コンストラクタ、またはシステム既定のタイプのコンストラクタ

クラス コンストラクタ

コンストラクタ (キーワードではなく概念)6

Init イベント

オブジェクトの直接終了

適用なし

~ClassName

適用なし

適用なし

適用なし

ガベージ コレクションがオブジェクトをクリアする直前の、システムによるメソッドの呼び出し 7

Finalize (Visual Basic 6.0 では、Class_Terminate)

Destructors (C++) (キーワードではなく概念)

デストラクタ

適用なし

Destroy イベント

変数の宣言時の初期化

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();

var x = 5

var y : car = new car()

LOCAL x

x = 5

関数のアドレスの取得

AddressOf (この演算子はデリゲート インスタンスとして関数への参照を返します)

delegate

delegate

かっこなしで関数名を使用

適用なし

コールバック

呼び出し元をコールバックする関数に、関数のアドレスを渡します。例については、「方法 : Visual Basic でプロシージャを別のプロシージャに渡す」を参照してください。

CALLBACK (標準データ型)

callback (IDL 属性)

delegate

適用なし

適用なし

オブジェクトが非同期で修正できることの宣言

適用なし

volatile

volatile

適用なし

適用なし

変数の明示的な宣言の強制

[Option Explicit]

n/a (すべての変数は使用前に宣言する必要あり)

n/a (すべての変数は使用前に宣言する必要あり)

高速モード (既定値)

_VFP.LanguageOptions NEW 

ローカル型の推論の有効化

Option Infer

オブジェクトを参照していないオブジェクト変数のテスト

obj Is Nothing

pobj == NULL

obj == null

obj == undefined

obj == null

VARTYPE(obj)=="0"

オブジェクトを参照していないオブジェクト変数の値

Nothing

nullptr

null

null

undefined

.F.

データベースの Null 式のテスト

IsDbNull

適用なし

適用なし

x == null

ISNULL( )

バリアント変数が初期化されたかどうかのテスト

適用なし

適用なし

適用なし

x == undefined

EMPTY( )

既定のプロパティの定義

Default

property: マネージ コードを参照する property キーワードです。

インデクサ

適用なし

適用なし

オブジェクト指向プログラミング

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

基本クラスの参照

MyBase

__super

base

super

BaseClass プロパティ

ParentClass プロパティ

DODEFAULT()

Class::member

インターフェイスの宣言

Interface

__interface

interface class

インターフェイス

interface

DEFINE CLASS

実装されるインターフェイスの指定

Implements

(インターフェイスより派生)

class C1 : public I1

class C1 : I1

インターフェイス

IMPLEMENTS

IMPLEMENTS NEW 

クラスの宣言

Class

クラス

Classes and Structs (Managed)

クラス

class

DEFINE CLASSMyClassAS <ParentClass>

モジュールの宣言

Module

static class

static class

適用なし

適用なし

クラスまたは構造体の部分定義

Partial

適用なし

Partial

適用なし

適用なし

クラスが継承だけできることの指定。クラスのインスタンスは作成できない。

MustInherit

abstract (C++)8

abstract

abstract

適用なし

クラスが継承できないことの指定

NotInheritable

sealed

sealed

final

適用なし

列挙型の宣言

Enum

enum

enum

enum

適用なし

クラス定数の宣言

Const

const

const (フィールド宣言に適用)

const

#DEFINE

基本クラスからのクラスの派生

クラス C1 はクラス C2 を継承します。

Class C1 : public Base (言語のキーワードは必要ありません。)

class C1 : C2

クラス

Class c1 extends c2

DEFINE CLASS MyClass AS ParentClass

メソッドやプロパティのオーバーライド

Overrides

(/clr コンパイルの override を除き、言語のキーワードは必要ありません。Derived Classes を参照してください。)

override

(言語のキーワードは必要ありません。)

(言語のキーワードは必要ありません。)

派生クラスに実装しなければならないメソッドの宣言

MustOverride

宣言の最後に = 0 を置く (純粋仮想メソッド)

abstract

abstract

(言語のキーワードは必要ありません。)

オーバーライドできないメソッドの宣言

NotOverridable (メソッドは既定で NotOverridable)

sealed

sealed

final

適用なし

仮想メソッド/プロパティ、またはプロパティ アクセサの宣言

Overridable

virtual

virtual

(メソッドは既定で仮想)

適用なし

派生クラスにおける基本クラスのメンバの隠ぺい

Shadowing

new (new slot in vtable)

new (C# リファレンス)

new 修飾子

適用なし

クラス メソッドへのタイプセーフな参照の宣言

Delegate

delegate

delegate

かっこなしで関数名を使用

適用なし

処理するイベントを持つオブジェクトを含むことができる変数の指定

WithEvents

適用なし

(コードを記述。固有のキーワードはなし)

(コードを記述。固有のキーワードはなし)

EVENTHANDLER( ) NEW 

イベント プロシージャが呼び出されるイベントの指定

Handles (名前付けパターンにより、WithEvents 変数とイベントのプロシージャを関連付けることもできます。)

適用なし

event += eventHandler;

適用なし

BINDEVENTS( )

複数メンバがアクセスするためのオブジェクト式の評価

With...End With

適用なし

using ステートメント (C# リファレンス)

with9

WITH ... ENDWITH

例外処理

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

構造化例外処理

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

Throw

__try、__except

__finally

try、catch、finally

throw

try

catch

finally

throw

TRY

   [ tryCommands ]

[ CATCH [ To VarName ] [ WHEN IExpression ] ]

   [ catchCommands ] ]

[ THROW [ eUserExpression ] ]

[ EXIT ]

[ FINALLY

   [ finallyCommands ] ]

ENDTRY

C++ 例外処理

適用なし

try、catch、throw

適用なし

適用なし

適用なし

条件判断構造

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

条件判断構造 (選択)

Select...Case...End Select

switch、case、default

goto

break

switch

case

default

goto

break

switch

case

break

CASE

ICASE

条件判断構造 (if ... then)

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

ElseIf

if、else

if、else

if

else

IF ... ENDIF

IIF( )

ループ構造 (条件)

While...End While

Do...Loop

do、while

continue

do

while

continue

do、while

break、continue

DO、WHILE (句)

ループ構造 (反復処理)

For...Next

For Each...Next

for

for

foreach

for (x=0;x<10;x++){...}

for (prop in obj) { print (obj[prop]);}

FOR (句)

FOR ... ENDFOR

Continue

NEXT

FOR EACH (句)、FOR ... ENDFOR、Continue、Next

配列

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

配列の宣言

Dim a() As Long

int x[5];

int[] x = new int[5];

var x : int[]

var arr = Array()

DIMENSION

DECLARE

配列の初期化

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};

var x : int[] = [1, 2, 3, 4, 5]

var arr = new Array(1, 2, 3, 4, 5)]

x[1] = 1

x[2] = 2

配列の再割り当て

Redim

適用なし

適用なし

arr.length=newSize (JScript の配列のみ) 10

DIMENSION

DECLARE

クラス スコープ

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

プロジェクトやアセンブリの外部からの参照

Public

public

public

public

適用なし

宣言元のアセンブリ内でのみアクセス可能

Friend

private

internal

internal

適用なし

現在のクラスまたは派生クラスでのみ参照

Protected

適用なし

Protected

適用なし

適用なし

現在のアセンブリ、またはコンテナ クラスから派生した型に制限されるアクセス

Protected Friend

Type and Member Visibility

protected internal

アクセシビリティ レベル

適用なし

適用なし

プロジェクト内部だけで参照 (入れ子になった外側のクラス内のクラス)

Private

private

private

private

適用なし

メンバ スコープ

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

クラス、プロジェクト、およびモジュールの外部からアクセス可能

Public

public

public

public

(言語のキーワードは必要ありません。)

クラスの外部 (ただし、プロジェクトまたはパッケージ内) からアクセス可能

Friend

public private:

internal

internal

適用なし

現在のクラスおよび派生クラスからのみアクセス可能

Protected

protected

protected

protected

PROTECTED

クラスまたはモジュール内でのみアクセス可能

Private

private

private

private

HIDDEN

関数またはほかのクラスが派生クラスのプライベート メンバへアクセスできることの指定

適用なし

friend (C++ では使用できません)

friend

適用なし

適用なし

アセンブリ内部ではプロテクト、ほかのアセンブリにはプライベート

適用なし

protected private

適用なし

適用なし

適用なし

現在のアセンブリ、またはコンテナ クラスから派生した型のみアクセス可能

Protected Friend

Type and Member Visibility

protected internal

アクセシビリティ レベル

適用なし

適用なし

変数の有効期間

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

プロシージャのローカル変数として予約

Static11

static

static (C# リファレンス)

適用なし

適用なし

クラスの全インスタンスで共有

Shared

static

static

static

適用なし

その他

目的

Visual Basic

C++

C#

JScript

Visual FoxPro

コメント コード

'

Rem

//、複数行にわたるコメントの場合は /* */

//、複数行にわたるコメントの場合は /* */

XML コメントの場合は ///

//、複数行にわたるコメントの場合は /* */

*

&&

NOTE

大文字と小文字の区別

×

×

Windows API の呼び出し

Declare <API>

適用なし

use Platform Invoke

適用なし

DECLARE - DLL

イベントの宣言と発生

Event

RaiseEvent

適用なし

event

適用なし

RAISEEVENT( ) 関数

プリミティブのスレッド処理

SyncLock

適用なし

lock

適用なし

適用なし

Go to (分岐)

Goto

goto

goto

適用なし

適用なし

1Visual Basic では、Static を変数の宣言として使用できるのは、プロシージャ内部だけです。たとえば、Static x As Long をプロシージャの外部で宣言することはできません。

2Visual Basic では、Sub キーワードで宣言されたプロシージャは値を返すことができません。プロシージャが値を返すようにするには、Function キーワードで宣言する必要があります。

3Visual Basic では、Me はコンパイル時に解決されないため、プロパティやメソッドの戻り値として使用できます。

4 JScript では、substr 関数はサポートされていますが、文字列内の文字にアクセスする方法としては、現在は推奨されていません。文字列の特定の位置から文字にアクセスする最も効率的な方法は、角かっこを使うことです。たとえば、文字列 str の 10 番目の文字にアクセスするには、str[10] を使用します。

5Visual Basic では、.NET Framework の System.Object から派生するクラスのコンストラクタは、常に New という名前になります。

6 JScript では、コンストラクタのオーバーロードは使用できません。

7 通常、このようなメソッドのコードは、ガベージ コレクタによって自動的に解放されないシステム リソースを解放します。

8 C++ では、抽象クラスに 1 つ以上の純粋な仮想メンバを含めます。

9 JScript では、Visual Basic と異なり、先行するピリオドは使用されません。変数とプロパティは互いに間違えられることがあるので、この機能は混乱を招きやすいと考えられます。また、with ステートメントを使うとコードの実行速度が低下することにも注意してください。

10 JScript では、これによって配列が再配置されることも、"増加" することもありません。JScript の配列 (Array 型として宣言) は、常に疎であり、また動的です。ネイティブ配列 (System.Array または type[] として宣言) は動的ではありません。

11 非共有のクラス メソッドにおける静的なローカル変数は、Visual Basic ではクラス インスタンスごとに格納され、その他の言語では単一のコピーを共有します。Static を変数の宣言に使用したとき、変数が解放されてから再度スコープを入手しても、その変数の値は予約されています。

参照

参照

コード例による各言語のプログラミング概念の比較

各言語の演算子の比較

各言語のデータ型の比較

各言語およびライブラリにおける、コントロールとプログラミング可能オブジェクトの比較

その他の技術情報

各言語の比較

Visual J#