C# の式
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro/Team |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
マネージ式エバリュエータでは、C# で記述されたほとんどの式を評価できます。次に示すトピックでは、サポートされている式について詳細に説明します。また、サポートされていない式の種類についても説明します。
識別子と型
メソッドの評価
演算子
オーバーロードされた演算子
文字列
キャスト
typeof 演算子と sizeof 演算子
プロパティの評価
式エバリュエータは、アクセス修飾子、public、protected、internal、および private を無視します。たとえば、[ウォッチ] ウィンドウから private メソッドを呼び出すことができます。式エバリュエータはアクセス修飾子を無視するため、予期しない読み込みが発生する可能性があります。
式エバリュエータは、実行対象のコードが安全かどうかにかかわらず、暗黙的な unsafe コンテキストのすべての評価を実行します。
また、式エバリュエータは checked ブロックと /checked コンパイラ オプションも無視します。すべての式が unchecked コンテキストで評価されます。
属性を使用すると、カスタム データ型の表示をカスタマイズできます。詳細については、「カスタム データ型の表示」を参照してください。
識別子と型
デバッガ式には、現在のスコープで参照できるどの識別子でも使用できます。たとえば、デバッガが Magh メソッドで停止した場合、定数、変数名、メソッド名など、Magh で参照できるどの識別子でも使用できます。
デバッガでは、プリミティブ型、列挙型 (Enum)、または組み込みの型のどの変数でも正しく表示できます。クラス型の変数については、最派生型に基づいた値を正しく表示できます。Cat 型から派生した Lion 型の leo オブジェクトがある場合、leo.Claws を評価し、Lion 型のオブジェクトの正しい値を取得できます。
左辺値である左側の式には、新しい値を割り当てることができます。これには、プリミティブ型、クラス型、および System.Object 型が含まれます。
メソッドの評価
デバッガは、オーバーロードされたメソッドも含め、メソッドの評価をサポートしています。したがって、次のいずれかの式を入力すると、オーバーロードされたメソッドの中から正しいメソッドが呼び出されます。
Time.Set();
Time.Set(atime);
デバッガは、メソッドを評価するときに、そのメソッドのコードを実際に呼び出して実行します。メソッドに副作用がある場合、デバッガ ウィンドウでメソッドを評価するとプログラムの状態が変化するため、予期しない結果になる可能性があります。
オーバーロードされたメソッドにブレークポイントを設定する場合、ブレークポイントの位置はメソッドの指定方法によって変わります。シグネチャ全体 (メソッド名とすべての引数のリスト) を指定した場合は、指定されたオーバーロードに 1 つのブレークポイントが設定されます。メソッド名のみを指定すると、デバッガの動作は、Visual Studio のオプション設定によって変わります。[関数名の確認に IntelliSense を使用する] チェック ボックスをオフにすると、そのメソッド名の各オーバーロードに、1 つのブレークポイントが設定されます。それ以外の場合は、[ブレークポイントの選択] ダイアログ ボックスが開き、ブレークポイントを配置するオーバーロードを指定できます。詳細については、「方法 : 関数ブレークポイントを設定する」を参照してください。
新しい匿名メソッドの作成は、このバージョンの Visual Studio のデバッガではサポートされていません。
演算子
デバッガは、次の演算子を含む大部分の組み込み演算子を正しく評価します。
関係演算子と等値演算子: (expr1 > expr2、expr1 < expr2、expr1 <= expr2、expr1 => expr2、expr1 == expr2、expr1 != expr2)。
ブール演算子: (expr1 && expr2、expr1 || expr2、expr1 ? expr2 : expr3)。
算術演算子 : (expr1 + expr2、expr1 - expr2、expr1 * expr2、expr1 / expr2、expr1 % expr2)。
論理演算子: (expr1 & expr2、expr1 ^ expr2、expr1 | expr2)。
シフト演算子: (expr1 >> expr2、expr1 << expr2)。
代入演算子: (lvalue = expr2、lvalue *= expr2lvalue /= expr2、lvalue %= expr2、lvalue += expr2、lvalue -= expr2、lvalue <<= expr2、lvalue >>= expr2、lvalue &= expr2、lvalue ^= expr2、lvalue |= expr2)。
単項演算子 : (+expr1、- expr1、expr1++、++expr1、expr1--、--expr1)。
オーバーロードされた演算子
デバッガでは、オーバーロードされた演算子の大部分を使用できます。
オーバーロードされた挿入演算子 +、-、/、%、および & は使用できます。
expr1 + expr2
expr1expr2
expr1 / expr2
expr1 % expr2
expr1 & expr2
オーバーロードされた挿入演算子 =、&&、&、および || は使用できません。
expr1 = expr2
expr1 && expr2
expr1 & expr2
expr1 || expr2
オーバーロードされた挿入演算子 << および >> は、どちらのオペランドもクラス変数の場合に機能しません。
object1 <<object2
object1 >> object2
オーバーロードされた前置演算子 +、-、++、--、!、および ~ は使用できます。
+expr1
-expr1
++expr1
--expr1
!expr1
~expr1
オーバーロードされた後置演算子 ++ および -- は使用できます。
expr1++
expr1--
オーバーロードされたインデクサは機能します。
- expr1[expr2]
文字列
デバッガでは、配列のインデックス演算子だけでなく、文字列のインデックス演算子も認識されます。たとえば、次のように入力できます。
"hello world"[0]
[ウォッチ] ウィンドウに、正しい値が表示されます。
'h'
C# では、ネイティブな C/C++ と異なり、デバッガで文字列の値を編集できます。さらに、文字列で Length 演算子を使用できます。
mystring.Length
または
"hello world".Length
C# では、文字列を連結できます。
"hello" + "world"
キャスト
デバッガでは、簡単なキャスト式を使用できます。
(A)x
ポインタを含むキャストは使用できません。
typeof 演算子と sizeof 演算子
デバッガでは、typeof 演算子と sizeof 演算子を使用できます。これらの演算子は、対応する .NET Framework の関数に変換されて使用されます。
typeof ( expression )
これは次のように変換されます。
System.Type.GetType( expression )
デバッガは、変換後の式を評価します。
デバッガでは、sizeof 演算子がサポートされています。
プロパティの評価
デバッガは、どの変数ウィンドウでもプロパティを評価できます。ただし、デバッガでプロパティを評価すると、予測不可能な結果や望ましくない結果が生じる場合があります。予定外の評価によるそのような結果が発生しないようにするには、[オプション] ダイアログ ボックスでプロパティ評価をオフにします。
WebMethods
デバッガ ウィンドウで WebMethods を呼び出すことはできません。