CodeTypeParameter Class
Assembly: System (in system.dll)
'Declaration <SerializableAttribute> _ <ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)> _ <ComVisibleAttribute(True)> _ Public Class CodeTypeParameter Inherits CodeObject 'Usage Dim instance As CodeTypeParameter
/** @attribute SerializableAttribute() */ /** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) */ /** @attribute ComVisibleAttribute(true) */ public class CodeTypeParameter extends CodeObject
SerializableAttribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) ComVisibleAttribute(true) public class CodeTypeParameter extends CodeObject
Not applicable.
The CodeTypeParameter class represents a type parameter in the declaration of a generic type or method.
A generic type or method declaration contains one or more unspecified types known as type parameters. A type parameter name stands for the type within the body of the generic declaration. For example, the generic declaration for the List class contains the type parameter T.
For more information on generics, see Generics in the .NET Framework Class Library (C# Programmers Reference).
The following code example shows the use of the CodeTypeParameter class to create a CodeDOM graph to generate an application containing generics code.
Imports System.CodeDom Imports System.CodeDom.Compiler Imports System.Collections Imports System.Collections.Specialized Imports System.IO Imports System.Reflection Imports System.Text.RegularExpressions Imports System.Globalization Imports System.Collections.Generic Class CodeDomGenericsDemo Shared Sub Main() Try CreateGenericsCode("vb", "Generic.vb", "GenericVB.exe") Catch e As Exception LogMessage(("Unexpected Exception:" + e.ToString())) End Try End Sub 'Main Shared Sub CreateGenericsCode(ByVal providerName As String, ByVal sourceFileName As String, ByVal assemblyName As String) Dim provider As CodeDomProvider = CodeDomProvider.CreateProvider(providerName) LogMessage("Building CodeDOM graph...") Dim cu As New CodeCompileUnit() CreateGraph(provider, cu) Dim sw As New StringWriter() LogMessage("Generating code...") provider.GenerateCodeFromCompileUnit(cu, sw, Nothing) Dim output As String = sw.ToString() output = Regex.Replace(output, "Runtime version:[^" + vbCr + vbLf + "]*", "Runtime version omitted for demo") LogMessage("Displaying source code...") LogMessage(output) LogMessage("Writing source code to file...") Dim s As Stream = File.Open(sourceFileName, FileMode.Create) Dim t As New StreamWriter(s) t.Write(output) t.Close() s.Close() Dim opt As New CompilerParameters(New String() {"System.dll", "System.Xml.dll", "System.Windows.Forms.dll", "System.Data.dll", "System.Drawing.dll"}) opt.GenerateExecutable = False opt.TreatWarningsAsErrors = True opt.IncludeDebugInformation = True opt.GenerateInMemory = True Dim results As CompilerResults LogMessage(("Compiling with provider " + providerName)) results = provider.CompileAssemblyFromFile(opt, sourceFileName) OutputResults(results) If results.NativeCompilerReturnValue <> 0 Then LogMessage("") LogMessage("Compilation failed.") Else LogMessage("") LogMessage("Demo completed successfully.") End If File.Delete(sourceFileName) End Sub 'CreateGenericsCode ' Create a CodeDOM graph. Shared Sub CreateGraph(ByVal provider As CodeDomProvider, ByVal cu As CodeCompileUnit) ' Determine if the generator supports generics. If Not provider.Supports(GeneratorSupport.GenericTypeReference Or GeneratorSupport.GenericTypeDeclaration) Then ' Return if the generator does not support generics. Return End If Dim ns As New CodeNamespace("DemoNamespace") ns.Imports.Add(New CodeNamespaceImport("System")) ns.Imports.Add(New CodeNamespaceImport("System.Collections.Generic")) cu.Namespaces.Add(ns) ' Declare a generic class. Dim class1 As New CodeTypeDeclaration() class1.Name = "MyDictionary" class1.BaseTypes.Add( _ New CodeTypeReference("Dictionary", _ New CodeTypeReference() {New CodeTypeReference("TKey"), _ New CodeTypeReference("TValue")})) Dim kType As New CodeTypeParameter("TKey") kType.HasConstructorConstraint = True kType.Constraints.Add(New CodeTypeReference(GetType(IComparable))) kType.CustomAttributes.Add _ (New CodeAttributeDeclaration("System.ComponentModel.DescriptionAttribute", _ New CodeAttributeArgument(New CodePrimitiveExpression("KeyType")))) Dim iComparableT As New CodeTypeReference("IComparable") iComparableT.TypeArguments.Add(New CodeTypeReference(kType)) kType.Constraints.Add(iComparableT) Dim vType As New CodeTypeParameter("TValue") vType.Constraints.Add(New CodeTypeReference(GetType(IList(Of System.String)))) vType.CustomAttributes.Add _ (New CodeAttributeDeclaration("System.ComponentModel.DescriptionAttribute", _ New CodeAttributeArgument(New CodePrimitiveExpression("ValueType")))) class1.TypeParameters.Add(kType) class1.TypeParameters.Add(vType) ns.Types.Add(class1) ' Declare a generic method. Dim printMethod As New CodeMemberMethod() Dim sType As New CodeTypeParameter("S") sType.HasConstructorConstraint = True Dim tType As New CodeTypeParameter("T") tType.HasConstructorConstraint = True printMethod.Name = "Print" printMethod.TypeParameters.Add(sType) printMethod.TypeParameters.Add(tType) printMethod.Statements.Add(ConsoleWriteLineStatement _ (New CodeDefaultValueExpression(New CodeTypeReference("T")))) printMethod.Statements.Add(ConsoleWriteLineStatement _ (New CodeDefaultValueExpression(New CodeTypeReference("S")))) printMethod.Attributes = MemberAttributes.Public class1.Members.Add(printMethod) Dim class2 As New CodeTypeDeclaration() class2.Name = "Demo" Dim methodMain As New CodeEntryPointMethod() Dim [myClass] As New CodeTypeReference("MyDictionary", _ New CodeTypeReference() {New CodeTypeReference(GetType(Integer)), _ New CodeTypeReference("List", _ New CodeTypeReference() {New CodeTypeReference("System.String")})}) methodMain.Statements.Add(New CodeVariableDeclarationStatement([myClass], _ "dict", New CodeObjectCreateExpression([myClass]))) methodMain.Statements.Add(ConsoleWriteLineStatement _ (New CodePropertyReferenceExpression _ (New CodeVariableReferenceExpression("dict"), "Count"))) methodMain.Statements.Add _ (New CodeExpressionStatement _ (New CodeMethodInvokeExpression _ (New CodeMethodReferenceExpression _ (New CodeVariableReferenceExpression("dict"), _ "Print", New CodeTypeReference() _ {New CodeTypeReference("System.Decimal"), _ New CodeTypeReference("System.Int32")}), _ New CodeExpression(-1) {}))) Dim longTypeName As String = GetType( _ System.Collections.Generic.Dictionary(Of Integer, _ System.Collections.Generic.List(Of String))()).FullName Dim longType As New CodeTypeReference(longTypeName) methodMain.Statements.Add(New CodeVariableDeclarationStatement _ (longType, "dict2", New CodeArrayCreateExpression _ (longType, New CodeExpression(0) {New CodePrimitiveExpression(Nothing)}))) methodMain.Statements.Add(ConsoleWriteLineStatement(New CodePropertyReferenceExpression(New CodeVariableReferenceExpression("dict2"), "Length"))) class2.Members.Add(methodMain) ns.Types.Add(class2) End Sub 'CreateGraph Overloads Shared Function ConsoleWriteLineStatement(ByVal exp As CodeExpression) As CodeStatement Return New CodeExpressionStatement(New CodeMethodInvokeExpression _ (New CodeMethodReferenceExpression _ (New CodeTypeReferenceExpression _ (New CodeTypeReference("Console")), "WriteLine"), _ New CodeExpression() {exp})) End Function 'ConsoleWriteLineStatement Overloads Shared Function ConsoleWriteLineStatement(ByVal [text] As String) As CodeStatement Return ConsoleWriteLineStatement(New CodePrimitiveExpression([text])) End Function 'ConsoleWriteLineStatement Shared Sub LogMessage(ByVal [text] As String) Console.WriteLine([text]) End Sub 'LogMessage Shared Sub OutputResults(ByVal results As CompilerResults) LogMessage(("NativeCompilerReturnValue=" + results.NativeCompilerReturnValue.ToString())) Dim s As String For Each s In results.Output LogMessage(s) Next s End Sub 'OutputResults End Class 'CodeDomGenericsDemo
Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.