Imports System.CodeDom Module SO12963383Main Sub Main Dim compileUnit As New CodeCompileUnit Dim ns As New CodeNamespace() compileUnit.Namespaces.Add(ns) ns.Imports.Add(New CodeNamespaceImport("System")) ns.Imports.Add(New CodeNamespaceImport("System.Collections.Generic")) Dim fooClass As New CodeTypeDeclaration("Foo") ns.Types.Add(fooClass) fooClass.TypeAttributes = Reflection.TypeAttributes.Public fooClass.IsClass = True Dim fooCollection As New CodeTypeDeclaration("FooCollection") ns.Types.Add(fooCollection) fooCollection.TypeAttributes = Reflection.TypeAttributes.Public fooCollection.IsClass = True fooCollection.BaseTypes.Add(New CodeTypeReference(GetType(System.Object))) fooCollection.BaseTypes.Add(New CodeTypeReference( _ "System.Collections.Generic.IEnumerable" _ , New CodeTypeReference() {New CodeTypeReference("Foo")} _ )) Dim method As New CodeMemberMethod fooCollection.Members.Add(method) method.Attributes = MemberAttributes.Private method.Name = "GetEnumerator" method.ReturnType = New CodeTypeReference( _ "System.Collections.Generic.IEnumerator" _ , New CodeTypeReference() {New CodeTypeReference("Foo")} _ ) method.ImplementationTypes.Add(New CodeTypeReference( _ "System.Collections.Generic.IEnumerable" _ , New CodeTypeReference() {New CodeTypeReference("Foo")} _ )) method = New CodeMemberMethod fooCollection.Members.Add(method) method.Attributes = MemberAttributes.Private method.Name = "GetEnumerator" method.ReturnType = New CodeTypeReference( _ "System.Collections.IEnumerator" _ ) method.PrivateImplementationType = New CodeTypeReference( _ "System.Collections.IEnumerable" _ ) Dim provider As New Microsoft.VisualBasic.VBCodeProvider Dim options As New Compiler.CodeGeneratorOptions Dim writer As New IO.StringWriter provider.GenerateCodeFromCompileUnit(compileUnit, writer, options) Console.WriteLine(writer.ToString()) End Sub End Module