C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 引数の型


(過去ログ 43 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■22593 / inTopicNo.1)  引数の型
  
□投稿者/ TRT (1回)-(2008/07/28(Mon) 11:01:11)

分類:[VB.NET/VB2005] 


vb.netにおいて、引数の型を大かっこで囲む意味はなんでしょうか。
ヘルプの使用例にてString型を[]で囲んでいて気になって
自分なりに調べたのですが、わかりませんでした。

□使用例
Shared Sub Connect(server As [String], message As [String])
...
End Sub 'Connect

よろしくお願いします。

引用返信 編集キー/
■22597 / inTopicNo.2)  Re[1]: 引数の型
□投稿者/ よねKEN (167回)-(2008/07/28(Mon) 11:57:28)
No22593 (TRT さん) に返信
> vb.netにおいて、引数の型を大かっこで囲む意味はなんでしょうか。

識別子を[]で括弧で囲むのは、予約語をエスケープするために使います。
例えば、Dimはキーワードのため変数名に使用して、
Dim Dim As Integer
と記述することは文法上できませんが、
Dim [Dim] As Integer
という風に[]で囲むことでキーワードでも識別子として使用できます。

> □使用例
> Shared Sub Connect(server As [String], message As [String])

http://msdn.microsoft.com/ja-jp/library/system.net.sockets.tcpclient(VS.80).aspx

にある例ですね。
この例での[String]や[Byte]は、結果としては動作上に何ら差異はありませんが、
文法上の解釈は[]なしとでは意味が違います。

VBでは、StringやByteはキーワードで、これらは文法上System.String、System.Byteの別名であると定義されているので、
この型として解釈されます。それに対して[String]や[Byte]と記述した際の、StringやByteはキーワードではなく
単なる識別子としてのそれになり、その名前のクラス/構造体が検索されます。
これも結果的にはSystem.StringとSystem.Byteが該当します。結果は同じですが、解釈の過程が異なります。

#このサンプルが微妙に違和感のあるサンプルになっている理由は同ページの
#C#のサンプルを機械的にコンバートしたものだからだろうと思います。

引用返信 編集キー/
■22601 / inTopicNo.3)  Re[2]: 引数の型
□投稿者/ TRT (2回)-(2008/07/28(Mon) 13:28:46)
返信ありがとうございます。

No22597 (よねKEN さん) に返信
> ■No22593 (TRT さん) に返信
>>vb.netにおいて、引数の型を大かっこで囲む意味はなんでしょうか。
>
> 識別子を[]で括弧で囲むのは、予約語をエスケープするために使います。
> 例えば、Dimはキーワードのため変数名に使用して、
> Dim Dim As Integer
> と記述することは文法上できませんが、
> Dim [Dim] As Integer
> という風に[]で囲むことでキーワードでも識別子として使用できます。

ここまでは自分なりに調べたら分かりました。

>>□使用例
>>Shared Sub Connect(server As [String], message As [String])
>
> http://msdn.microsoft.com/ja-jp/library/system.net.sockets.tcpclient(VS.80).aspx
>
> にある例ですね。
> この例での[String]や[Byte]は、結果としては動作上に何ら差異はありませんが、
> 文法上の解釈は[]なしとでは意味が違います。
>
> VBでは、StringやByteはキーワードで、これらは文法上System.String、System.Byteの別名であると定義されているので、
> この型として解釈されます。それに対して[String]や[Byte]と記述した際の、StringやByteはキーワードではなく
> 単なる識別子としてのそれになり、その名前のクラス/構造体が検索されます。
> これも結果的にはSystem.StringとSystem.Byteが該当します。結果は同じですが、解釈の過程が異なります。
>

[Integer]とすると「型'Integer'が定義されていません。」となるのは、どうしてでしょうか。
なんとなくは、想像できるのですが、納得する言葉に変換できません。

> #このサンプルが微妙に違和感のあるサンプルになっている理由は同ページの
> #C#のサンプルを機械的にコンバートしたものだからだろうと思います。
>
そういうことなんですね。


引用返信 編集キー/
■22606 / inTopicNo.4)  Re[3]: 引数の型
□投稿者/ よねKEN (168回)-(2008/07/28(Mon) 14:02:19)
> [Integer]とすると「型'Integer'が定義されていません。」となるのは、どうしてでしょうか。
> なんとなくは、想像できるのですが、納得する言葉に変換できません。

System.Stringクラスが.NET Frameworkにはあります。
VBのImportsステートメントを使って

Imports System

とファイルの先頭に記述しておけば、System.Stringの「System.」を省略して単に「String」
と記述することができます。また、VBのキーワードにはStringがあります。

つまり、.NET FrameworkのSystem.Stringクラスの略称としての「String」と
VBのキーワードとしての「String」があり、これらは結果的に同じものを意味しますが、
たまたま名前が同一であったというだけです。

同様に、VBのキーワードIntegerは.NET FrameworkではSystem.Int32構造体が対応します。
Integerというキーワードはありますが、Integerというクラス(構造体)は.NET Frameworkには存在しません。

[Integer]と書いた場合、コンパイラはキーワードのIntegerではなく、クラスのIntegerを探そうとします。
しかし、Integerクラスはありませんので、「定義されていません」となります。


引用返信 編集キー/
■22609 / inTopicNo.5)  Re[4]: 引数の型
□投稿者/ TRT (3回)-(2008/07/28(Mon) 14:30:03)
No22606 (よねKEN さん) に返信
>>[Integer]とすると「型'Integer'が定義されていません。」となるのは、どうしてでしょうか。
>>なんとなくは、想像できるのですが、納得する言葉に変換できません。
>
> System.Stringクラスが.NET Frameworkにはあります。
> VBのImportsステートメントを使って
>
> Imports System
>
> とファイルの先頭に記述しておけば、System.Stringの「System.」を省略して単に「String」
> と記述することができます。また、VBのキーワードにはStringがあります。
>
> つまり、.NET FrameworkのSystem.Stringクラスの略称としての「String」と
> VBのキーワードとしての「String」があり、これらは結果的に同じものを意味しますが、
> たまたま名前が同一であったというだけです。
>
> 同様に、VBのキーワードIntegerは.NET FrameworkではSystem.Int32構造体が対応します。
> Integerというキーワードはありますが、Integerというクラス(構造体)は.NET Frameworkには存在しません。
>
> [Integer]と書いた場合、コンパイラはキーワードのIntegerではなく、クラスのIntegerを探そうとします。
> しかし、Integerクラスはありませんので、「定義されていません」となります。
>
>

とてもよくわかりました。
ありがとうございました。
(気になって仕事が進まなかったのですが、納得したのですっきりです)

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -