次の方法で共有


CodeElement2.ElementID プロパティ

要素を一意に識別する値を取得します。 Visual C# には実装されていません。

名前空間:  EnvDTE80
アセンブリ:  EnvDTE80 (EnvDTE80.dll 内)

構文

'宣言
ReadOnly Property ElementID As String
string ElementID { get; }
property String^ ElementID {
    String^ get ();
}
abstract ElementID : string with get
function get ElementID () : String

プロパティ値

型 : String
要素の一意な値を表す文字列。

解説

ElementID プロパティは、要素を一意に識別する要素名および他の情報に基づいて計算された値です。 ID の正確な計算は、言語によって異なります。

この ID は、コード モデル クライアントで参照を保持せずに要素を追跡する場合に使用されます。 この ID は、コード モデルのイベントに含まれており、変更されている要素をクライアント コードに通知します。 新しい ID は、ID の作成時に指定されます。

ElementID プロパティの値は、永続的であるとは限りません。 この値は、プロジェクトにコード モデルが作成されるたびに変更される可能性が高く、現在のセッションでも変更されることがあります。 ElementChanged イベントは、ElementID が変更されるたびに発生します。

注意

遅延バインドされた RenameSymbol や ElementID を呼び出すことはできません。(たとえば、DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElements.Item("Class1").RenameSymbol("Class2"))。呼び出しを実行する前に、CodeElement2 インターフェイスに対して、明示的にオブジェクトをキャストする必要があります。

EnvDTE80 のコード要素 (これ以降、"Code*2 オブジェクト" と呼びます) は、EnvDTE のコード要素から派生します。たとえば、CodeClass2CodeClass から派生し、CodeElement2CodeElement から派生します。Visual Studio の内部では、どちらのアセンブリの場合も、すべてのコード要素が順に CodeElement2 にキャストされます。したがって、論理的には、CodeClass2 であるかのように動作し、最終的には CodeElement2 から派生します。

しかし、2 つの要素は、実際には 2 つの個別の継承階層に存在するため、遅延バインダーは Code*2 オブジェクトで CodeElement2 メソッドを参照できません。継承されたメソッドが変換を持つ関連インターフェイスすべてで明示的に定義されている主にEnvDTE 動作、プリプロセッサ マクロを使用すると、インターフェイスのように定義します。EnvDTE80 インターフェイスも同様の継承スキームを使用して、のみプリプロセッサ ステートメントを使用せずに定義されます。これは、冗長なプロパティが除去されるため、より洗練された解決方法ですが、プロパティを遅延バインディングで呼び出すことができません。この問題を解決するには、呼び出しを実行する前に、CodeElement2 インターフェイスに対して明示的にオブジェクトをキャストします。

また、特定の種類の編集を行うと、クラス、構造体、関数、属性、デリゲートなどのコード モデル要素が非確定的な値になる場合があります。つまり、これらの要素の値は、常に同じ値になるとは限りません。詳細については、「コード モデルを使用したコードの調査 (Visual Basic)」で、コード モデル要素値を変更する方法についての説明を参照してください。

.NET Framework セキュリティ

  • 直前の呼び出し元に対する完全な信頼。このメンバーは、部分的に信頼されているコードから使用することはできません。詳細については、「部分信頼コードからのライブラリの使用」を参照してください。

参照

関連項目

CodeElement2 インターフェイス

EnvDTE80 名前空間

その他の技術情報

方法 : オートメーション オブジェクト モデルのコード例をコンパイルおよび実行する

コード モデルを使用したコードの調査 (Visual Basic)

コード モデルを使用したコードの調査 (Visual C#)