CodeCompileUnit クラス
CodeDOM プログラム グラフ用のコンテナを提供します。
この型のすべてのメンバの一覧については、CodeCompileUnit メンバ を参照してください。
System.Object
System.CodeDom.CodeObject
System.CodeDom.CodeCompileUnit
System.CodeDom.CodeSnippetCompileUnit
<Serializable>
<ClassInterface(ClassInterfaceType.AutoDispatch)>
<ComVisible(True)>
Public Class CodeCompileUnit Inherits CodeObject
[C#]
[Serializable]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ComVisible(true)]
public class CodeCompileUnit : CodeObject
[C++]
[Serializable]
[ClassInterface(ClassInterfaceType::AutoDispatch)]
[ComVisible(true)]
public __gc class CodeCompileUnit : public CodeObject
[JScript]
public
Serializable
ClassInterface(ClassInterfaceType.AutoDispatch)
ComVisible(true)
class CodeCompileUnit extends CodeObject
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
CodeCompileUnit は、CodeDOM プログラム グラフ用のコンテナを提供します。
CodeCompileUnit には、CodeDOM ソース コード グラフを含んだ CodeNamespace オブジェクトを格納できるコレクション、プロジェクトで参照されるアセンブリのコレクション、およびプロジェクト アセンブリの属性のコレクションが含まれています。
CodeCompileUnit は、他のパラメータと共に ICodeGenerator の実装の GenerateCodeFromCompileUnit メソッドに渡すことで、そのコンパイル単位に含まれるプログラム グラフに基づくコードを生成できます。
メモ 言語によっては、各コンパイル単位で 1 つのクラスを格納する名前空間が 1 つしかサポートされないこともあります。
使用例
[Visual Basic, C#, C++] 簡単な "Hello World" プログラムの構造をモデル化した CodeCompileUnit を構築する例を次に示します。このモデルから、より大きなコードを生成する例については、 CodeDomProvider クラスのコード例を参照してください。
' Build a Hello World program graph using
' System.CodeDom types.
Public Shared Function BuildHelloWorldGraph() As CodeCompileUnit
' Create a new CodeCompileUnit to contain
' the program graph.
Dim compileUnit As New CodeCompileUnit()
' Declare a new namespace called Samples.
Dim samples As New CodeNamespace("Samples")
' Add the new namespace to the compile unit.
compileUnit.Namespaces.Add(samples)
' Add the new namespace import for the System namespace.
samples.Imports.Add(New CodeNamespaceImport("System"))
' Declare a new type called Class1.
Dim class1 As New CodeTypeDeclaration("Class1")
' Add the new type to the namespace type collection.
samples.Types.Add(class1)
' Declare a new code entry point method.
Dim start As New CodeEntryPointMethod()
' Create a type reference for the System.Console class.
Dim csSystemConsoleType As New CodeTypeReferenceExpression( _
"System.Console")
' Build a Console.WriteLine statement.
Dim cs1 As New CodeMethodInvokeExpression( _
csSystemConsoleType, "WriteLine", _
New CodePrimitiveExpression("Hello World!"))
' Add the WriteLine call to the statement collection.
start.Statements.Add(cs1)
' Build another Console.WriteLine statement.
Dim cs2 As New CodeMethodInvokeExpression( _
csSystemConsoleType, "WriteLine", _
New CodePrimitiveExpression("Press the Enter key to continue."))
' Add the WriteLine call to the statement collection.
start.Statements.Add(cs2)
' Build a call to System.Console.ReadLine.
Dim csReadLine As New CodeMethodInvokeExpression( _
csSystemConsoleType, "ReadLine")
' Add the ReadLine statement.
start.Statements.Add(csReadLine)
' Add the code entry point method to
' the Members collection of the type.
class1.Members.Add(start)
Return compileUnit
End Function
[C#]
// Build a Hello World program graph using
// System.CodeDom types.
public static CodeCompileUnit BuildHelloWorldGraph()
{
// Create a new CodeCompileUnit to contain
// the program graph.
CodeCompileUnit compileUnit = new CodeCompileUnit();
// Declare a new namespace called Samples.
CodeNamespace samples = new CodeNamespace("Samples");
// Add the new namespace to the compile unit.
compileUnit.Namespaces.Add( samples );
// Add the new namespace import for the System namespace.
samples.Imports.Add( new CodeNamespaceImport("System") );
// Declare a new type called Class1.
CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
// Add the new type to the namespace type collection.
samples.Types.Add(class1);
// Declare a new code entry point method.
CodeEntryPointMethod start = new CodeEntryPointMethod();
// Create a type reference for the System.Console class.
CodeTypeReferenceExpression csSystemConsoleType = new CodeTypeReferenceExpression("System.Console");
// Build a Console.WriteLine statement.
CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
csSystemConsoleType, "WriteLine",
new CodePrimitiveExpression("Hello World!") );
// Add the WriteLine call to the statement collection.
start.Statements.Add(cs1);
// Build another Console.WriteLine statement.
CodeMethodInvokeExpression cs2 = new CodeMethodInvokeExpression(
csSystemConsoleType, "WriteLine",
new CodePrimitiveExpression("Press the Enter key to continue.") );
// Add the WriteLine call to the statement collection.
start.Statements.Add(cs2);
// Build a call to System.Console.ReadLine.
CodeMethodInvokeExpression csReadLine = new CodeMethodInvokeExpression(
csSystemConsoleType, "ReadLine");
// Add the ReadLine statement.
start.Statements.Add(csReadLine);
// Add the code entry point method to
// the Members collection of the type.
class1.Members.Add( start );
return compileUnit;
}
[C++]
// Build a Hello World program graph using
// System::CodeDom types.
static CodeCompileUnit *BuildHelloWorldGraph()
{
// Create a new CodeCompileUnit to contain
// the program graph.
CodeCompileUnit* compileUnit = new CodeCompileUnit();
// Declare a new namespace called Samples.
CodeNamespace* samples = new CodeNamespace(S"Samples");
// Add the new namespace to the compile unit.
compileUnit->Namespaces->Add(samples);
// Add the new namespace import for the System namespace.
samples->Imports->Add(new CodeNamespaceImport(S"System"));
// Declare a new type called Class1.
CodeTypeDeclaration* class1 = new CodeTypeDeclaration(S"Class1");
// Add the new type to the namespace's type collection.
samples->Types->Add(class1);
// Declare a new code entry point method.
CodeEntryPointMethod* start = new CodeEntryPointMethod();
CodePrimitiveExpression *codePrimitive[] = new CodePrimitiveExpression*[1];
// Create a type reference for the System::Console class.
CodeTypeReferenceExpression *csSystemConsoleType = new CodeTypeReferenceExpression(S"System.Console");
// Build a Console::WriteLine statement.
codePrimitive[0] = new CodePrimitiveExpression(S"Hello World!");
CodeMethodInvokeExpression* cs1 = new CodeMethodInvokeExpression(
csSystemConsoleType,
S"WriteLine",
static_cast<CodeExpression __gc * __gc[]>(codePrimitive)
);
// Add the WriteLine call to the statement collection.
start->Statements->Add(cs1);
// Build another Console::WriteLine statement.
codePrimitive[0] = new CodePrimitiveExpression(S"Press the Enter key to continue.");
CodeMethodInvokeExpression* cs2 = new CodeMethodInvokeExpression(
csSystemConsoleType,
S"WriteLine",
static_cast<CodeExpression __gc * __gc[]>(codePrimitive)
);
// Add the WriteLine call to the statement collection.
start->Statements->Add(cs2);
// Build a call to System::Console::ReadLine.
CodeMethodReferenceExpression *csReadLine = new CodeMethodReferenceExpression(
csSystemConsoleType, "ReadLine");
CodeExpression *blankParms[] = new CodeExpression*[0];
CodeMethodInvokeExpression *cs3 = new CodeMethodInvokeExpression(
csReadLine, static_cast<CodeExpression __gc * __gc[]>(blankParms));
// Add the ReadLine statement.
start->Statements->Add(cs3);
// Add the code entry point method to
// the Members collection of the type.
class1->Members->Add(start);
return compileUnit;
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.CodeDom
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: System (System.dll 内)