C# IntelliSense

C# IntelliSense は、言語固有のコード補完支援です。 これは、コード エディターで C# コードを記述し、[イミディエイト モード] コマンド ウィンドウでデバッグするときに使用できます。

入力候補一覧

C# での IntelliSense コンプリート リストには、メンバーの一覧や入力候補などからのトークンが含まれています。 コンプリート リストでは、以下にすばやくアクセスできます。

  • 型または名前空間のメンバー

  • 変数、コマンド、関数の名前

  • コード スニペット

  • 言語キーワード

  • 拡張メソッド

C# のコンプリート リストは、コンテキストに基づいて無関係なトークンを除外したり、トークンを事前に選択したりもできます。 詳細については、フィルター処理されたコンプリート リストに関するページを参照してください。

コンプリート リストのコード スニペット

C# のコンプリート リストには、コード スニペットが含まれており、事前に定義されたコードの本体をプログラムに簡単に挿入できます。 コード スニペットは、スニペットのショートカット テキストとしてコンプリート リストに表示されます。 既定で C# で利用できるコード スニペットの詳細については、「C# のコード スニペット」を参照してください。

コンプリート リストの言語キーワード

コンプリート リストには、C# 言語キーワード (keyword)が含まれており、プログラムに挿入するのに役立ちます。 C# の言語キーワードの詳細については、「C# のキーワード」を参照してください。

コンプリート リストでの拡張メソッド

C# のコンプリート リストには、スコープ内にある拡張メソッドが含まれます。

拡張メソッドでは、インスタンス メソッドとは異なるアイコンが使用されます。 同じ名前のインスタンス メソッドと拡張メソッドが両方ともスコープ内にある場合、コンプリート リストには拡張メソッドのアイコンが表示されます。

Note

String オブジェクトの場合、コンプリート リストにはすべての拡張メソッドが表示されるわけではありません。

フィルター処理されたコンプリート リスト

IntelliSense では、フィルターを使用して、不要なメンバーをコンプリート リストから削除します。 C# では、次の項目用に表示されるコンプリート リストをフィルター処理します。

  • インターフェイスと基本クラス: インターフェイスおよび基本クラスのコンプリート リストから不要な項目を自動的に削除します。この削除には、クラス宣言ベース、インターフェイス リスト、および制約リストが含まれます。 たとえば、列挙型は基本クラスのコンプリート リストには表示されません。これは、列挙型が基本クラスで使用できないためです。 基本クラスのコンプリート リストには、インターフェイスおよび名前空間だけが含まれます。 リストで項目を選択し、コンマを入力すると、IntelliSense によりコンプリート リストから基本クラスが削除されます。 これは、C# が多重継承をサポートしていないためです。 制約句の場合も、同様の動作になります。

  • 属性: 属性を型に適用した場合、コンプリート リストはフィルター処理され、 その型を含む名前空間から派生した型のみがリストに残ります。 たとえば、Attribute のようにします。

  • Catch 句: 有効な try-catch キーワードのみがコンプリート リストに表示されます。

  • オブジェクト初期化子: 初期化できるメンバーだけがコンプリート リストに表示されます。

  • 新しいキーワード: 「new」と入力し、Space キーを押すと、コンプリート リストが表示されます。 コードのコンテキストに応じて、リストの項目が IntelliSense によって自動的に選択されます。 たとえば、メソッドの宣言用と return ステートメント用の項目が自動的に選択されます。

  • enum キーワード: 列挙型 (Enum) の割り当ての等号 (=) の次に Space キーを押すと、コンプリート リストが表示されます。 コードのコンテキストに応じて、リストの項目が IntelliSense によって自動的に選択されます。 たとえば、キーワード 「return」の入力後や、宣言の作成時に、コンプリート リストで項目が IntelliSense により自動的に選択されます。

  • as 演算子と is 演算子: IntelliSense では、as または is のキーワードを入力してから Space キーを押すと、フィルター処理されたコンプリート リストが自動的に表示されます。

  • イベント: キーワード「event」を入力した場合、コンプリート リストにはデリゲート型のみが含まれます。

  • パラメーター ヘルプ: IntelliSense では、パラメーターを入力すると、そのパラメーターに一致するメソッド オーバーロードが先頭になるよう、自動的に並べ替えが行われます。 複数のメソッド オーバーロードを使用できる場合は、上向きまたは下向きの矢印を使用し、一覧で次に使用できるオーバーロードに移動できます。

最近使用したメンバー

IntelliSense は、オブジェクト名の自動補完のために、ポップアップ [メンバーの一覧] ボックスで最近選択したメンバーを記憶します。 次にメンバーの一覧を使用するときに、最近使用したメンバーが上部に表示されます。 IntelliSense は、Visual Studio の各セッションごとに、最近使用されたメンバーの履歴を消去します。

override

override」と入力してから Space キーを押すと、オーバーライドできる有効な基本クラス メンバーすべてが、IntelliSense によりポップアップ リスト ボックスに表示されます。 override の後ろにメソッドの戻り値の型を入力すると、IntelliSense により同じ型を返すメソッドのみが表示されます。 IntelliSense で一致が見つからなかった場合は、すべての基本クラスのメンバーが表示されます。

AI で強化された IntelliSense

Visual Studio IntelliCode では、人工知能で強化された IntelliSense 入力候補の一覧が提供されます。 IntelliCode では、ただ API の一覧がアルファベット順に提示されるのではなく、使用する可能性が最も高い API が予測されます。 現在のコードのコンテキストとパターンに基づいて、一覧が動的に提供されます。

自動コード生成

using を追加します。

IntelliSense の using 追加操作では、必須の using ディレクティブがコード ファイルに自動的に追加されます。 この機能によって、作成中のコードにだけ集中できるので、それ以外の部分に注意を払う必要がなくなります。

using の追加操作を実行するには、解決できない型参照にカーソルを置きます。 たとえば、コンソール アプリケーションを作成し、Main メソッドの本体に XmlReader を追加すると、コード行に赤い波線が表示されます。これは、型参照が解決できないためです。 その後、クイック アクションメニューで using の追加走査を呼び出すことができます。 [using <名前空間>] メニュー項目は、カーソルが未解決の参照に配置されている場合にのみ表示されます。

この例では、エラー電球アイコンをクリックし、[using System.Xml;] を選択すると using ディレクティブが自動的に追加されます。

プレビュー イメージを使用して追加操作を示すスクリーンショット。

不足している using ディレクティブを貼り付け時に追加する

IntelliSense では、型をコード ファイルに貼り付けるとき、足りない using ディレクティブをコードに自動追加できます。 この機能によって、型をファイルに貼り付けるとき、足りない using ディレクティブを追加する作業を自動化することで時間が節約されます。

この機能を有効にするには:

  1. [ツール]>[オプション] の順に選びます。
  2. 左側のウィンドウから [テキスト エディター]>[C#] (または [Visual Basic]) >[詳細設定] を選択します。
  3. [ディレクティブの使用] で、[不足している using ディレクティブを貼り付け時に追加する] を選択します。

using の削除と並べ替え

[using の削除と並べ替え] オプションは、ソース コードの動作を変更することなく、usingextern の宣言を並べ替えおよび削除します。 時間の経過に伴い、不要で整理されていない using ディレクティブのために、ソース ファイルが肥大化して読みにくくなる場合があります。 [using の削除と並べ替え] オプションは、使用されない using ディレクティブを削除してソース コードをコンパクトにし、並べ替えて読みやすくします。

このオプションを使用するには、メニュー バーから [編集]>[IntelliSense]>[using の並び替え] を選択するか、コード エディターで右クリックして [using の削除と並べ替え] を選択します。

インターフェイスの実装

IntelliSense には、コード エディターでの作業でインターフェイスを実装するのに役立つオプションが用意されています。 通常、インターフェイスを適切に実装するには、クラス内で、インターフェイスのすべてのメンバーについてメソッド宣言を作成する必要があります。 クラス宣言でインターフェイスの名前を入力すると、IntelliSense によりクイック アクションの電球が表示されます。 この電球には、インターフェイスを自動的に実装する際のオプションが表示され、名前付けを明示的に行うか、暗黙的に行うかを選択できます。 明示的な名前付けでは、メソッドの宣言にインターフェイスの名前が含まれます。 暗黙的な名前付けでは、メソッドの宣言に、それが属するインターフェイスが示されません。 明示的に名前付けされたインターフェイス メソッドには、インターフェイスのインスタンスからアクセスすることしかできず、クラスのインスタンスからアクセスすることはできません。 詳細については、「明示的なインターフェイスの実装」を参照してください。

インターフェイスを実装すると、そのインターフェイスに必要な最小の数のメソッド スタブが生成されます。 基本クラスにインターフェイスの一部だけが実装される場合、これらのスタブは再生成されません。

抽象基本クラスの実装

IntelliSense には、コード エディターでの作業中、抽象基本クラスのメンバーを自動的に実装するためのオプションが用意されています。 通常、抽象基本クラスのメンバーを実装するには、派生クラスで抽象基本クラスのメソッドごとに新しいメソッド定義を作成する必要があります。 IntelliSense を使用した場合、クラス宣言で抽象基本クラスの名前を入力すると、クイック アクションの電球が表示されます。 この電球で、基本クラスのメソッドを自動的に実装するためのオプションを選択できます。

抽象基本クラスの実装機能によって生成されるメソッド スタブは、MethodStub.snippet ファイルで定義されたコード スニペットがベースになります。 コード スニペットは変更できます。 詳細については、「チュートリアル: Visual Studio でコード スニペットを作成する」を参照してください。

使用法から生成

[使用法から生成] 機能では、クラスとメンバーを定義する前にそれらを使用することができます。 使用されますが、まだ定義されていないクラス、コンストラクター、メソッド、プロパティ、フィールド、または列挙型に対してスタブを生成することができます。 コード内の現在の場所を離れずに、新しい型とメンバーを生成することができます。 これにより、ワークフローの中断を最小限にします。

未定義の各識別子の下に、波状の赤い下線が表示されます。 識別子の上にマウス ポインターを置くと、ヒントにエラー メッセージが表示されます。 適切なオプションを表示するには、次の手順のいずれかを使用することができます。

  • 未定義の識別子を選択します。 クイック アクションのエラー電球が識別子の下に表示されます。 エラー電球を選択します。

  • 未定義の識別子をクリックして、Ctrl+ピリオド (.) を押します。

  • 未定義の識別子を右クリックして、[クイック アクションとリファクタリング] を選択します。

以下のオプションが表示される場合があります。

  • プロパティの生成

  • フィールドの生成

  • メソッドの生成

  • クラスの生成

  • 新しい型の生成 (クラス、構造体、インターフェイス、または列挙型)

イベント ハンドラーの生成

コード エディターで、IntelliSense はイベント フィールドにメソッド (イベント ハンドラー) をフックするのに役立ちます。

.cs ファイルのイベント フィールドの後に += 演算子を入力すると、IntelliSense では Tab キーを押すオプションの使用が求められます。 これで、イベントを処理するメソッドを示すデリゲートの新しいインスタンスを挿入します。

メッセージが表示されたフック アップ イベント ハンドラー メソッドを示すスクリーンショット。

Tab キーを押すと、IntelliSense によってステートメントが自動的に完了し、イベント ハンドラー参照が選択されたテキストとしてコード エディターに表示されます。 自動イベント フックアップを完了するには、IntelliSense はイベント ハンドラーの空のスタブを作成するために、もう一度 Tab キーを押すように要求します。

生成されたイベント ハンドラー メソッドを示すスクリーンショット。

Tab キーをもう一度押すと、IntelliSense は正しい署名でメソッドをスタブして、イベント ハンドラーの本体にカーソルを置きます。

IntelliSense によって作成された新しいデリゲートが既存のイベント ハンドラーを参照する場合、IntelliSense はヒントのこの情報と通信します。 その後、この参照を変更できます。テキストはコード エディターで既に選択されています。 それ以外の場合、自動イベント フックアップはこれで完了します。

Note

[ビュー] メニュー (Ctrl+- ) の [戻る] コマンドを使用して、イベント フックアップ ステートメントに戻ります。