次の方法で共有


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 内)

参照

CodeCompileUnit メンバ | System.CodeDom 名前空間