|   | 
| 
 .NET TIPS 
C#やVB.NETでキーワードを識別子として使用するには?
デジタルアドバンテージ 遠藤 孝信 
2005/01/14
 | 
  | 
 
 | 
   コード内に記述するクラスやメソッド、変数などの識別子には、その言語仕様で予約されているキーワードと同じ名前を使用することはできない。しかし、C#では識別子の前に「@」を付け、VB.NETでは識別子を角カッコ([ ])で囲むことにより、キーワードを識別子として使用できる。これらの識別子は、C#では「逐語的識別子」、VB.NETでは「エスケープ識別子」と呼ばれる。
 これらの識別子を使えば、次のようなプログラムも記述可能だ。
// identifier.cs 
 
namespace @namespace { 
  class @class { 
    void @void(int @int) { 
      System.Console.WriteLine(@int); 
    } 
 
    static void Main() { 
      @class @new = new @class(); 
      @new.@void(2005); 
    } 
  } 
} 
 
// コンパイル方法:csc identifier.cs
 | 
 
 
 | 
 
| キーワードを識別子として使用したC#のサンプル・プログラム(identifier.cs) | 
| 
 | 
 
' identifier.vb 
 
Namespace [Namespace] 
  Class [Class] 
    Sub [Sub](ByVal [Integer] As Integer) 
      System.Console.WriteLine([Integer]) 
    End Sub 
 
    Shared Sub Main() 
      Dim [Dim] As New [Class] 
      [Dim].[Sub](2005) ' ここは[Dim].Sub(2005)でもOK 
    End Sub 
  End Class 
End Namespace 
 
' コンパイル方法:vbc identifier.vb
 | 
 
 
 | 
 
| キーワードを識別子として使用したVB.NETのサンプル・プログラム(identifier.vb) | 
| 
 | 
 例えばVB.NETのサンプル・プログラムでは、「Class」はクラスを記述するためのキーワードであり、これをクラスの識別子(クラス名)としては利用できない。しかし、この文字列を角カッコで囲むことにより(「[Class]」と記述することにより)、識別子として利用できるようになる。この場合には、識別子として記述したこのクラスを利用する個所でもクラス名として「[Class]」と記述しなければならない(ただしC#では「Class」はキーワードではないため、C#からこのVB.NETのクラスを使用する場合には、単に「Class」と記述して利用できる)。
 逐語的識別子やエスケープ識別子は、クラス・ライブラリで使用されている識別子が言語のキーワードと重複している場合に必要となる。例えばSystem.Reflection名前空間にはAssemblyクラスが標準で用意されているが、VB.NETには属性の適用範囲を指定するAssembly修飾子がキーワードとして定義されている。このため、このクラスを使用するときには、
Dim asm As [Assembly]
のように、エスケープ識別子の使用が必須である。
カテゴリ:Visual Basic .NET 処理対象:言語構文 
カテゴリ:C# 処理対象:言語構文 
使用ライブラリ:Assemblyクラス(System.Reflection名前空間) | 
 
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間