TypeBuilder Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет и создает новые экземпляры классов во время выполнения.
public ref class TypeBuilder abstract : System::Reflection::TypeInfo
public ref class TypeBuilder sealed : Type
public ref class TypeBuilder sealed : System::Reflection::TypeInfo
public ref class TypeBuilder sealed : Type, System::Runtime::InteropServices::_TypeBuilder
public ref class TypeBuilder sealed : System::Reflection::TypeInfo, System::Runtime::InteropServices::_TypeBuilder
public abstract class TypeBuilder : System.Reflection.TypeInfo
public sealed class TypeBuilder : Type
public sealed class TypeBuilder : System.Reflection.TypeInfo
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class TypeBuilder : Type, System.Runtime.InteropServices._TypeBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class TypeBuilder : Type, System.Runtime.InteropServices._TypeBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class TypeBuilder : System.Reflection.TypeInfo, System.Runtime.InteropServices._TypeBuilder
type TypeBuilder = class
inherit TypeInfo
type TypeBuilder = class
inherit Type
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type TypeBuilder = class
inherit Type
interface _TypeBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type TypeBuilder = class
inherit Type
interface _TypeBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type TypeBuilder = class
inherit TypeInfo
interface _TypeBuilder
Public MustInherit Class TypeBuilder
Inherits TypeInfo
Public NotInheritable Class TypeBuilder
Inherits Type
Public NotInheritable Class TypeBuilder
Inherits TypeInfo
Public NotInheritable Class TypeBuilder
Inherits Type
Implements _TypeBuilder
Public NotInheritable Class TypeBuilder
Inherits TypeInfo
Implements _TypeBuilder
- Наследование
- Наследование
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем примере кода показано, как определить и использовать динамическую сборку. Пример сборки содержит один тип, MyDynamicTypeимеющий частное поле, свойство, которое получает и задает частное поле, конструкторы, инициализирующие частное поле, и метод, умножающий предоставленный пользователем номер на значение частного поля и возвращающий результат.
using System;
using System.Reflection;
using System.Reflection.Emit;
class DemoAssemblyBuilder
{
public static void Main()
{
// This code creates an assembly that contains one type,
// named "MyDynamicType", that has a private field, a property
// that gets and sets the private field, constructors that
// initialize the private field, and a method that multiplies
// a user-supplied number by the private field value and returns
// the result. In C# the type might look like this:
/*
public class MyDynamicType
{
private int m_number;
public MyDynamicType() : this(42) {}
public MyDynamicType(int initNumber)
{
m_number = initNumber;
}
public int Number
{
get { return m_number; }
set { m_number = value; }
}
public int MyMethod(int multiplier)
{
return m_number * multiplier;
}
}
*/
var aName = new AssemblyName("DynamicAssemblyExample");
AssemblyBuilder ab =
AssemblyBuilder.DefineDynamicAssembly(
aName,
AssemblyBuilderAccess.Run);
// The module name is usually the same as the assembly name.
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name ?? "DynamicAssemblyExample");
TypeBuilder tb = mb.DefineType(
"MyDynamicType",
TypeAttributes.Public);
// Add a private field of type int (Int32).
FieldBuilder fbNumber = tb.DefineField(
"m_number",
typeof(int),
FieldAttributes.Private);
// Define a constructor that takes an integer argument and
// stores it in the private field.
Type[] parameterTypes = { typeof(int) };
ConstructorBuilder ctor1 = tb.DefineConstructor(
MethodAttributes.Public,
CallingConventions.Standard,
parameterTypes);
ILGenerator ctor1IL = ctor1.GetILGenerator();
// For a constructor, argument zero is a reference to the new
// instance. Push it on the stack before calling the base
// class constructor. Specify the default constructor of the
// base class (System.Object) by passing an empty array of
// types (Type.EmptyTypes) to GetConstructor.
ctor1IL.Emit(OpCodes.Ldarg_0);
ConstructorInfo? ci = typeof(object).GetConstructor(Type.EmptyTypes);
ctor1IL.Emit(OpCodes.Call, ci!);
// Push the instance on the stack before pushing the argument
// that is to be assigned to the private field m_number.
ctor1IL.Emit(OpCodes.Ldarg_0);
ctor1IL.Emit(OpCodes.Ldarg_1);
ctor1IL.Emit(OpCodes.Stfld, fbNumber);
ctor1IL.Emit(OpCodes.Ret);
// Define a default constructor that supplies a default value
// for the private field. For parameter types, pass the empty
// array of types or pass null.
ConstructorBuilder ctor0 = tb.DefineConstructor(
MethodAttributes.Public,
CallingConventions.Standard,
Type.EmptyTypes);
ILGenerator ctor0IL = ctor0.GetILGenerator();
// For a constructor, argument zero is a reference to the new
// instance. Push it on the stack before pushing the default
// value on the stack, then call constructor ctor1.
ctor0IL.Emit(OpCodes.Ldarg_0);
ctor0IL.Emit(OpCodes.Ldc_I4_S, 42);
ctor0IL.Emit(OpCodes.Call, ctor1);
ctor0IL.Emit(OpCodes.Ret);
// Define a property named Number that gets and sets the private
// field.
//
// The last argument of DefineProperty is null, because the
// property has no parameters. (If you don't specify null, you must
// specify an array of Type objects. For a parameterless property,
// use the built-in array with no elements: Type.EmptyTypes)
PropertyBuilder pbNumber = tb.DefineProperty(
"Number",
PropertyAttributes.HasDefault,
typeof(int),
null);
// The property "set" and property "get" methods require a special
// set of attributes.
MethodAttributes getSetAttr = MethodAttributes.Public |
MethodAttributes.SpecialName | MethodAttributes.HideBySig;
// Define the "get" accessor method for Number. The method returns
// an integer and has no arguments. (Note that null could be
// used instead of Types.EmptyTypes)
MethodBuilder mbNumberGetAccessor = tb.DefineMethod(
"get_Number",
getSetAttr,
typeof(int),
Type.EmptyTypes);
ILGenerator numberGetIL = mbNumberGetAccessor.GetILGenerator();
// For an instance property, argument zero is the instance. Load the
// instance, then load the private field and return, leaving the
// field value on the stack.
numberGetIL.Emit(OpCodes.Ldarg_0);
numberGetIL.Emit(OpCodes.Ldfld, fbNumber);
numberGetIL.Emit(OpCodes.Ret);
// Define the "set" accessor method for Number, which has no return
// type and takes one argument of type int (Int32).
MethodBuilder mbNumberSetAccessor = tb.DefineMethod(
"set_Number",
getSetAttr,
null,
new Type[] { typeof(int) });
ILGenerator numberSetIL = mbNumberSetAccessor.GetILGenerator();
// Load the instance and then the numeric argument, then store the
// argument in the field.
numberSetIL.Emit(OpCodes.Ldarg_0);
numberSetIL.Emit(OpCodes.Ldarg_1);
numberSetIL.Emit(OpCodes.Stfld, fbNumber);
numberSetIL.Emit(OpCodes.Ret);
// Last, map the "get" and "set" accessor methods to the
// PropertyBuilder. The property is now complete.
pbNumber.SetGetMethod(mbNumberGetAccessor);
pbNumber.SetSetMethod(mbNumberSetAccessor);
// Define a method that accepts an integer argument and returns
// the product of that integer and the private field m_number. This
// time, the array of parameter types is created on the fly.
MethodBuilder meth = tb.DefineMethod(
"MyMethod",
MethodAttributes.Public,
typeof(int),
new Type[] { typeof(int) });
ILGenerator methIL = meth.GetILGenerator();
// To retrieve the private instance field, load the instance it
// belongs to (argument zero). After loading the field, load the
// argument one and then multiply. Return from the method with
// the return value (the product of the two numbers) on the
// execution stack.
methIL.Emit(OpCodes.Ldarg_0);
methIL.Emit(OpCodes.Ldfld, fbNumber);
methIL.Emit(OpCodes.Ldarg_1);
methIL.Emit(OpCodes.Mul);
methIL.Emit(OpCodes.Ret);
// Finish the type.
Type? t = tb.CreateType();
// Because AssemblyBuilderAccess includes Run, the code can be
// executed immediately. Start by getting reflection objects for
// the method and the property.
MethodInfo? mi = t?.GetMethod("MyMethod");
PropertyInfo? pi = t?.GetProperty("Number");
// Create an instance of MyDynamicType using the default
// constructor.
object? o1 = null;
if (t is not null)
o1 = Activator.CreateInstance(t);
// Display the value of the property, then change it to 127 and
// display it again. Use null to indicate that the property
// has no index.
Console.WriteLine("o1.Number: {0}", pi?.GetValue(o1, null));
pi?.SetValue(o1, 127, null);
Console.WriteLine("o1.Number: {0}", pi?.GetValue(o1, null));
// Call MyMethod, passing 22, and display the return value, 22
// times 127. Arguments must be passed as an array, even when
// there is only one.
object[] arguments = { 22 };
Console.WriteLine("o1.MyMethod(22): {0}",
mi?.Invoke(o1, arguments));
// Create an instance of MyDynamicType using the constructor
// that specifies m_Number. The constructor is identified by
// matching the types in the argument array. In this case,
// the argument array is created on the fly. Display the
// property value.
object? o2 = null;
if (t is not null)
o2 = Activator.CreateInstance(t, new object[] { 5280 });
Console.WriteLine("o2.Number: {0}", pi?.GetValue(o2, null));
}
}
/* This code produces the following output:
o1.Number: 42
o1.Number: 127
o1.MyMethod(22): 2794
o2.Number: 5280
*/
Imports System.Reflection
Imports System.Reflection.Emit
Class DemoAssemblyBuilder
Public Shared Sub Main()
' This code creates an assembly that contains one type,
' named "MyDynamicType", that has a private field, a property
' that gets and sets the private field, constructors that
' initialize the private field, and a method that multiplies
' a user-supplied number by the private field value and returns
' the result. The code might look like this in Visual Basic:
'
'Public Class MyDynamicType
' Private m_number As Integer
'
' Public Sub New()
' Me.New(42)
' End Sub
'
' Public Sub New(ByVal initNumber As Integer)
' m_number = initNumber
' End Sub
'
' Public Property Number As Integer
' Get
' Return m_number
' End Get
' Set
' m_Number = Value
' End Set
' End Property
'
' Public Function MyMethod(ByVal multiplier As Integer) As Integer
' Return m_Number * multiplier
' End Function
'End Class
Dim aName As New AssemblyName("DynamicAssemblyExample")
Dim ab As AssemblyBuilder = _
AssemblyBuilder.DefineDynamicAssembly( _
aName, _
AssemblyBuilderAccess.Run)
' The module name is usually the same as the assembly name.
Dim mb As ModuleBuilder = ab.DefineDynamicModule( _
aName.Name)
Dim tb As TypeBuilder = _
mb.DefineType("MyDynamicType", TypeAttributes.Public)
' Add a private field of type Integer (Int32).
Dim fbNumber As FieldBuilder = tb.DefineField( _
"m_number", _
GetType(Integer), _
FieldAttributes.Private)
' Define a constructor that takes an integer argument and
' stores it in the private field.
Dim parameterTypes() As Type = { GetType(Integer) }
Dim ctor1 As ConstructorBuilder = _
tb.DefineConstructor( _
MethodAttributes.Public, _
CallingConventions.Standard, _
parameterTypes)
Dim ctor1IL As ILGenerator = ctor1.GetILGenerator()
' For a constructor, argument zero is a reference to the new
' instance. Push it on the stack before calling the base
' class constructor. Specify the default constructor of the
' base class (System.Object) by passing an empty array of
' types (Type.EmptyTypes) to GetConstructor.
ctor1IL.Emit(OpCodes.Ldarg_0)
ctor1IL.Emit(OpCodes.Call, _
GetType(Object).GetConstructor(Type.EmptyTypes))
' Push the instance on the stack before pushing the argument
' that is to be assigned to the private field m_number.
ctor1IL.Emit(OpCodes.Ldarg_0)
ctor1IL.Emit(OpCodes.Ldarg_1)
ctor1IL.Emit(OpCodes.Stfld, fbNumber)
ctor1IL.Emit(OpCodes.Ret)
' Define a default constructor that supplies a default value
' for the private field. For parameter types, pass the empty
' array of types or pass Nothing.
Dim ctor0 As ConstructorBuilder = tb.DefineConstructor( _
MethodAttributes.Public, _
CallingConventions.Standard, _
Type.EmptyTypes)
Dim ctor0IL As ILGenerator = ctor0.GetILGenerator()
' For a constructor, argument zero is a reference to the new
' instance. Push it on the stack before pushing the default
' value on the stack, then call constructor ctor1.
ctor0IL.Emit(OpCodes.Ldarg_0)
ctor0IL.Emit(OpCodes.Ldc_I4_S, 42)
ctor0IL.Emit(OpCodes.Call, ctor1)
ctor0IL.Emit(OpCodes.Ret)
' Define a property named Number that gets and sets the private
' field.
'
' The last argument of DefineProperty is Nothing, because the
' property has no parameters. (If you don't specify Nothing, you must
' specify an array of Type objects. For a parameterless property,
' use the built-in array with no elements: Type.EmptyTypes)
Dim pbNumber As PropertyBuilder = tb.DefineProperty( _
"Number", _
PropertyAttributes.HasDefault, _
GetType(Integer), _
Nothing)
' The property Set and property Get methods require a special
' set of attributes.
Dim getSetAttr As MethodAttributes = _
MethodAttributes.Public Or MethodAttributes.SpecialName _
Or MethodAttributes.HideBySig
' Define the "get" accessor method for Number. The method returns
' an integer and has no arguments. (Note that Nothing could be
' used instead of Types.EmptyTypes)
Dim mbNumberGetAccessor As MethodBuilder = tb.DefineMethod( _
"get_Number", _
getSetAttr, _
GetType(Integer), _
Type.EmptyTypes)
Dim numberGetIL As ILGenerator = mbNumberGetAccessor.GetILGenerator()
' For an instance property, argument zero is the instance. Load the
' instance, then load the private field and return, leaving the
' field value on the stack.
numberGetIL.Emit(OpCodes.Ldarg_0)
numberGetIL.Emit(OpCodes.Ldfld, fbNumber)
numberGetIL.Emit(OpCodes.Ret)
' Define the "set" accessor method for Number, which has no return
' type and takes one argument of type Integer (Int32).
Dim mbNumberSetAccessor As MethodBuilder = _
tb.DefineMethod( _
"set_Number", _
getSetAttr, _
Nothing, _
New Type() { GetType(Integer) })
Dim numberSetIL As ILGenerator = mbNumberSetAccessor.GetILGenerator()
' Load the instance and then the numeric argument, then store the
' argument in the field.
numberSetIL.Emit(OpCodes.Ldarg_0)
numberSetIL.Emit(OpCodes.Ldarg_1)
numberSetIL.Emit(OpCodes.Stfld, fbNumber)
numberSetIL.Emit(OpCodes.Ret)
' Last, map the "get" and "set" accessor methods to the
' PropertyBuilder. The property is now complete.
pbNumber.SetGetMethod(mbNumberGetAccessor)
pbNumber.SetSetMethod(mbNumberSetAccessor)
' Define a method that accepts an integer argument and returns
' the product of that integer and the private field m_number. This
' time, the array of parameter types is created on the fly.
Dim meth As MethodBuilder = tb.DefineMethod( _
"MyMethod", _
MethodAttributes.Public, _
GetType(Integer), _
New Type() { GetType(Integer) })
Dim methIL As ILGenerator = meth.GetILGenerator()
' To retrieve the private instance field, load the instance it
' belongs to (argument zero). After loading the field, load the
' argument one and then multiply. Return from the method with
' the return value (the product of the two numbers) on the
' execution stack.
methIL.Emit(OpCodes.Ldarg_0)
methIL.Emit(OpCodes.Ldfld, fbNumber)
methIL.Emit(OpCodes.Ldarg_1)
methIL.Emit(OpCodes.Mul)
methIL.Emit(OpCodes.Ret)
' Finish the type.
Dim t As Type = tb.CreateType()
' Because AssemblyBuilderAccess includes Run, the code can be
' executed immediately. Start by getting reflection objects for
' the method and the property.
Dim mi As MethodInfo = t.GetMethod("MyMethod")
Dim pi As PropertyInfo = t.GetProperty("Number")
' Create an instance of MyDynamicType using the default
' constructor.
Dim o1 As Object = Activator.CreateInstance(t)
' Display the value of the property, then change it to 127 and
' display it again. Use Nothing to indicate that the property
' has no index.
Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, Nothing))
pi.SetValue(o1, 127, Nothing)
Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, Nothing))
' Call MyMethod, passing 22, and display the return value, 22
' times 127. Arguments must be passed as an array, even when
' there is only one.
Dim arguments() As Object = { 22 }
Console.WriteLine("o1.MyMethod(22): {0}", _
mi.Invoke(o1, arguments))
' Create an instance of MyDynamicType using the constructor
' that specifies m_Number. The constructor is identified by
' matching the types in the argument array. In this case,
' the argument array is created on the fly. Display the
' property value.
Dim o2 As Object = Activator.CreateInstance(t, _
New Object() { 5280 })
Console.WriteLine("o2.Number: {0}", pi.GetValue(o2, Nothing))
End Sub
End Class
' This code produces the following output:
'
'o1.Number: 42
'o1.Number: 127
'o1.MyMethod(22): 2794
'o2.Number: 5280
В следующем примере кода показано, как динамически создавать тип с помощью TypeBuilder.
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
class TestILGenerator
{
public static Type DynamicDotProductGen()
{
Type ivType = null;
Type[] ctorParams = new Type[] { typeof(int),
typeof(int),
typeof(int)};
AppDomain myDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "IntVectorAsm";
AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
myAsmName,
AssemblyBuilderAccess.RunAndSave);
ModuleBuilder IntVectorModule = myAsmBuilder.DefineDynamicModule("IntVectorModule",
"Vector.dll");
TypeBuilder ivTypeBld = IntVectorModule.DefineType("IntVector",
TypeAttributes.Public);
FieldBuilder xField = ivTypeBld.DefineField("x", typeof(int),
FieldAttributes.Private);
FieldBuilder yField = ivTypeBld.DefineField("y", typeof(int),
FieldAttributes.Private);
FieldBuilder zField = ivTypeBld.DefineField("z", typeof(int),
FieldAttributes.Private);
Type objType = Type.GetType("System.Object");
ConstructorInfo objCtor = objType.GetConstructor(new Type[0]);
ConstructorBuilder ivCtor = ivTypeBld.DefineConstructor(
MethodAttributes.Public,
CallingConventions.Standard,
ctorParams);
ILGenerator ctorIL = ivCtor.GetILGenerator();
ctorIL.Emit(OpCodes.Ldarg_0);
ctorIL.Emit(OpCodes.Call, objCtor);
ctorIL.Emit(OpCodes.Ldarg_0);
ctorIL.Emit(OpCodes.Ldarg_1);
ctorIL.Emit(OpCodes.Stfld, xField);
ctorIL.Emit(OpCodes.Ldarg_0);
ctorIL.Emit(OpCodes.Ldarg_2);
ctorIL.Emit(OpCodes.Stfld, yField);
ctorIL.Emit(OpCodes.Ldarg_0);
ctorIL.Emit(OpCodes.Ldarg_3);
ctorIL.Emit(OpCodes.Stfld, zField);
ctorIL.Emit(OpCodes.Ret);
// This method will find the dot product of the stored vector
// with another.
Type[] dpParams = new Type[] { ivTypeBld };
// Here, you create a MethodBuilder containing the
// name, the attributes (public, static, private, and so on),
// the return type (int, in this case), and a array of Type
// indicating the type of each parameter. Since the sole parameter
// is a IntVector, the very class you're creating, you will
// pass in the TypeBuilder (which is derived from Type) instead of
// a Type object for IntVector, avoiding an exception.
// -- This method would be declared in C# as:
// public int DotProduct(IntVector aVector)
MethodBuilder dotProductMthd = ivTypeBld.DefineMethod(
"DotProduct",
MethodAttributes.Public,
typeof(int),
dpParams);
// A ILGenerator can now be spawned, attached to the MethodBuilder.
ILGenerator mthdIL = dotProductMthd.GetILGenerator();
// Here's the body of our function, in MSIL form. We're going to find the
// "dot product" of the current vector instance with the passed vector
// instance. For reference purposes, the equation is:
// (x1 * x2) + (y1 * y2) + (z1 * z2) = the dot product
// First, you'll load the reference to the current instance "this"
// stored in argument 0 (ldarg.0) onto the stack. Ldfld, the subsequent
// instruction, will pop the reference off the stack and look up the
// field "x", specified by the FieldInfo token "xField".
mthdIL.Emit(OpCodes.Ldarg_0);
mthdIL.Emit(OpCodes.Ldfld, xField);
// That completed, the value stored at field "x" is now atop the stack.
// Now, you'll do the same for the object reference we passed as a
// parameter, stored in argument 1 (ldarg.1). After Ldfld executed,
// you'll have the value stored in field "x" for the passed instance
// atop the stack.
mthdIL.Emit(OpCodes.Ldarg_1);
mthdIL.Emit(OpCodes.Ldfld, xField);
// There will now be two values atop the stack - the "x" value for the
// current vector instance, and the "x" value for the passed instance.
// You'll now multiply them, and push the result onto the evaluation stack.
mthdIL.Emit(OpCodes.Mul_Ovf_Un);
// Now, repeat this for the "y" fields of both vectors.
mthdIL.Emit(OpCodes.Ldarg_0);
mthdIL.Emit(OpCodes.Ldfld, yField);
mthdIL.Emit(OpCodes.Ldarg_1);
mthdIL.Emit(OpCodes.Ldfld, yField);
mthdIL.Emit(OpCodes.Mul_Ovf_Un);
// At this time, the results of both multiplications should be atop
// the stack. You'll now add them and push the result onto the stack.
mthdIL.Emit(OpCodes.Add_Ovf_Un);
// Multiply both "z" field and push the result onto the stack.
mthdIL.Emit(OpCodes.Ldarg_0);
mthdIL.Emit(OpCodes.Ldfld, zField);
mthdIL.Emit(OpCodes.Ldarg_1);
mthdIL.Emit(OpCodes.Ldfld, zField);
mthdIL.Emit(OpCodes.Mul_Ovf_Un);
// Finally, add the result of multiplying the "z" fields with the
// result of the earlier addition, and push the result - the dot product -
// onto the stack.
mthdIL.Emit(OpCodes.Add_Ovf_Un);
// The "ret" opcode will pop the last value from the stack and return it
// to the calling method. You're all done!
mthdIL.Emit(OpCodes.Ret);
ivType = ivTypeBld.CreateType();
return ivType;
}
public static void Main() {
Type IVType = null;
object aVector1 = null;
object aVector2 = null;
Type[] aVtypes = new Type[] {typeof(int), typeof(int), typeof(int)};
object[] aVargs1 = new object[] {10, 10, 10};
object[] aVargs2 = new object[] {20, 20, 20};
// Call the method to build our dynamic class.
IVType = DynamicDotProductGen();
Console.WriteLine("---");
ConstructorInfo myDTctor = IVType.GetConstructor(aVtypes);
aVector1 = myDTctor.Invoke(aVargs1);
aVector2 = myDTctor.Invoke(aVargs2);
object[] passMe = new object[1];
passMe[0] = (object)aVector2;
Console.WriteLine("(10, 10, 10) . (20, 20, 20) = {0}",
IVType.InvokeMember("DotProduct",
BindingFlags.InvokeMethod,
null,
aVector1,
passMe));
// +++ OUTPUT +++
// ---
// (10, 10, 10) . (20, 20, 20) = 600
}
}
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
_
Class TestILGenerator
Public Shared Function DynamicDotProductGen() As Type
Dim ivType As Type = Nothing
Dim ctorParams() As Type = {GetType(Integer), GetType(Integer), GetType(Integer)}
Dim myDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "IntVectorAsm"
Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly( _
myAsmName, _
AssemblyBuilderAccess.RunAndSave)
Dim IntVectorModule As ModuleBuilder = myAsmBuilder.DefineDynamicModule( _
"IntVectorModule", _
"Vector.dll")
Dim ivTypeBld As TypeBuilder = IntVectorModule.DefineType("IntVector", TypeAttributes.Public)
Dim xField As FieldBuilder = ivTypeBld.DefineField("x", _
GetType(Integer), _
FieldAttributes.Private)
Dim yField As FieldBuilder = ivTypeBld.DefineField("y", _
GetType(Integer), _
FieldAttributes.Private)
Dim zField As FieldBuilder = ivTypeBld.DefineField("z", _
GetType(Integer), _
FieldAttributes.Private)
Dim objType As Type = Type.GetType("System.Object")
Dim objCtor As ConstructorInfo = objType.GetConstructor(New Type() {})
Dim ivCtor As ConstructorBuilder = ivTypeBld.DefineConstructor( _
MethodAttributes.Public, _
CallingConventions.Standard, _
ctorParams)
Dim ctorIL As ILGenerator = ivCtor.GetILGenerator()
ctorIL.Emit(OpCodes.Ldarg_0)
ctorIL.Emit(OpCodes.Call, objCtor)
ctorIL.Emit(OpCodes.Ldarg_0)
ctorIL.Emit(OpCodes.Ldarg_1)
ctorIL.Emit(OpCodes.Stfld, xField)
ctorIL.Emit(OpCodes.Ldarg_0)
ctorIL.Emit(OpCodes.Ldarg_2)
ctorIL.Emit(OpCodes.Stfld, yField)
ctorIL.Emit(OpCodes.Ldarg_0)
ctorIL.Emit(OpCodes.Ldarg_3)
ctorIL.Emit(OpCodes.Stfld, zField)
ctorIL.Emit(OpCodes.Ret)
' Now, you'll construct the method find the dot product of two vectors. First,
' let's define the parameters that will be accepted by the method. In this case,
' it's an IntVector itself!
Dim dpParams() As Type = {ivTypeBld}
' Here, you create a MethodBuilder containing the
' name, the attributes (public, static, private, and so on),
' the return type (int, in this case), and a array of Type
' indicating the type of each parameter. Since the sole parameter
' is a IntVector, the very class you're creating, you will
' pass in the TypeBuilder (which is derived from Type) instead of
' a Type object for IntVector, avoiding an exception.
' -- This method would be declared in VB.NET as:
' Public Function DotProduct(IntVector aVector) As Integer
Dim dotProductMthd As MethodBuilder = ivTypeBld.DefineMethod("DotProduct", _
MethodAttributes.Public, GetType(Integer), _
dpParams)
' A ILGenerator can now be spawned, attached to the MethodBuilder.
Dim mthdIL As ILGenerator = dotProductMthd.GetILGenerator()
' Here's the body of our function, in MSIL form. We're going to find the
' "dot product" of the current vector instance with the passed vector
' instance. For reference purposes, the equation is:
' (x1 * x2) + (y1 * y2) + (z1 * z2) = the dot product
' First, you'll load the reference to the current instance "this"
' stored in argument 0 (ldarg.0) onto the stack. Ldfld, the subsequent
' instruction, will pop the reference off the stack and look up the
' field "x", specified by the FieldInfo token "xField".
mthdIL.Emit(OpCodes.Ldarg_0)
mthdIL.Emit(OpCodes.Ldfld, xField)
' That completed, the value stored at field "x" is now atop the stack.
' Now, you'll do the same for the object reference we passed as a
' parameter, stored in argument 1 (ldarg.1). After Ldfld executed,
' you'll have the value stored in field "x" for the passed instance
' atop the stack.
mthdIL.Emit(OpCodes.Ldarg_1)
mthdIL.Emit(OpCodes.Ldfld, xField)
' There will now be two values atop the stack - the "x" value for the
' current vector instance, and the "x" value for the passed instance.
' You'll now multiply them, and push the result onto the evaluation stack.
mthdIL.Emit(OpCodes.Mul_Ovf_Un)
' Now, repeat this for the "y" fields of both vectors.
mthdIL.Emit(OpCodes.Ldarg_0)
mthdIL.Emit(OpCodes.Ldfld, yField)
mthdIL.Emit(OpCodes.Ldarg_1)
mthdIL.Emit(OpCodes.Ldfld, yField)
mthdIL.Emit(OpCodes.Mul_Ovf_Un)
' At this time, the results of both multiplications should be atop
' the stack. You'll now add them and push the result onto the stack.
mthdIL.Emit(OpCodes.Add_Ovf_Un)
' Multiply both "z" field and push the result onto the stack.
mthdIL.Emit(OpCodes.Ldarg_0)
mthdIL.Emit(OpCodes.Ldfld, zField)
mthdIL.Emit(OpCodes.Ldarg_1)
mthdIL.Emit(OpCodes.Ldfld, zField)
mthdIL.Emit(OpCodes.Mul_Ovf_Un)
' Finally, add the result of multiplying the "z" fields with the
' result of the earlier addition, and push the result - the dot product -
' onto the stack.
mthdIL.Emit(OpCodes.Add_Ovf_Un)
' The "ret" opcode will pop the last value from the stack and return it
' to the calling method. You're all done!
mthdIL.Emit(OpCodes.Ret)
ivType = ivTypeBld.CreateType()
Return ivType
End Function 'DynamicDotProductGen
Public Shared Sub Main()
Dim IVType As Type = Nothing
Dim aVector1 As Object = Nothing
Dim aVector2 As Object = Nothing
Dim aVtypes() As Type = {GetType(Integer), GetType(Integer), GetType(Integer)}
Dim aVargs1() As Object = {10, 10, 10}
Dim aVargs2() As Object = {20, 20, 20}
' Call the method to build our dynamic class.
IVType = DynamicDotProductGen()
Dim myDTctor As ConstructorInfo = IVType.GetConstructor(aVtypes)
aVector1 = myDTctor.Invoke(aVargs1)
aVector2 = myDTctor.Invoke(aVargs2)
Console.WriteLine("---")
Dim passMe(0) As Object
passMe(0) = CType(aVector2, Object)
Console.WriteLine("(10, 10, 10) . (20, 20, 20) = {0}", _
IVType.InvokeMember("DotProduct", BindingFlags.InvokeMethod, _
Nothing, aVector1, passMe))
End Sub
End Class
' +++ OUTPUT +++
' ---
' (10, 10, 10) . (20, 20, 20) = 600
Комментарии
TypeBuilder — корневой класс, используемый для управления созданием динамических классов в среде выполнения. Он предоставляет набор подпрограмм, которые используются для определения классов, добавления методов и полей и создания класса внутри модуля. Новое TypeBuilder можно создать из динамического модуля, вызвав ModuleBuilder.DefineType метод, который возвращает TypeBuilder объект.
Эмиссия отражения предоставляет следующие опции для определения типов:
- Определите класс или интерфейс с заданным именем.
- Определите класс или интерфейс с заданным именем и атрибутами.
- Определите класс с заданным именем, атрибутами и базовым классом.
- Определите класс с заданным именем, атрибутами, базовым классом и набором интерфейсов, реализуемых классом.
- Определите класс с заданным именем, атрибутами, базовым классом и размером упаковки.
- Определите класс с заданным именем, атрибутами, базовым классом и размером класса в целом.
- Определите класс с заданным именем, атрибутами, базовым классом, размером упаковки и размером класса в целом.
Чтобы создать тип массива, тип указателя или тип по ссылке для неполного типа, представленного TypeBuilder объектом, используйте метод MakeArrayType, метод MakePointerType или метод MakeByRefType соответственно.
Перед использованием типа необходимо вызвать метод TypeBuilder.CreateType. CreateType завершает создание типа. После вызова CreateType вызывающий объект может создать экземпляр типа с помощью Activator.CreateInstance метода и вызвать члены типа с помощью Type.InvokeMember метода. Ошибка возникает при вызове методов, которые изменяют реализацию типа после вызова CreateType. Например, среда CLR создает исключение, если вызывающий пытается добавить в тип новые члены.
Инициализатор класса создается с помощью TypeBuilder.DefineTypeInitializer метода. DefineTypeInitializer возвращает ConstructorBuilder объект.
Вложенные типы определяются путем вызова одного из TypeBuilder.DefineNestedType методов.
Attributes
Класс TypeBuilder использует TypeAttributes перечисление для дальнейшего указания характеристик создаваемого типа:
- Интерфейсы задаются с помощью TypeAttributes.Interface атрибутов и TypeAttributes.Abstract атрибутов.
- Конкретные классы (классы, которые не могут быть расширены) задаются с помощью атрибута TypeAttributes.Sealed .
- Несколько атрибутов определяют видимость типов. См. описание перечисления TypeAttributes .
- Если TypeAttributes.SequentialLayout задано, загрузчик класса размещает поля в том порядке, в который они считываются из метаданных. Загрузчик класса учитывает указанный размер упаковки, но игнорирует любые указанные смещения полей. Метаданные сохраняют порядок, в котором выводятся определения полей. Даже при слиянии метаданные не приведут к изменению порядка определений полей. Загрузчик будет учитывать указанные смещения полей, только если TypeAttributes.ExplicitLayout задано.
Известные проблемы
- Отражение не проверяет, реализировал ли неабстрактный класс, который реализует интерфейс, все методы, объявленные в интерфейсе. Однако если класс не реализует все методы, объявленные в интерфейсе, среда выполнения не загружает класс.
- Несмотря на то, что TypeBuilder происходит от Type, некоторые абстрактные методы, определенные в классе Type, не полностью реализованы в классе TypeBuilder. Вызовы этих TypeBuilder методов вызывают NotSupportedException исключение. Желаемые функциональные возможности можно получить путем извлечения созданного типа с помощью Type.GetType или Assembly.GetType, а затем анализа полученного типа.
Конструкторы
| Имя | Описание |
|---|---|
| TypeBuilder() |
Инициализирует новый экземпляр класса TypeBuilder. |
Поля
| Имя | Описание |
|---|---|
| UnspecifiedTypeSize |
Представляет, что общий размер типа не указан. |
Свойства
| Имя | Описание |
|---|---|
| Assembly |
Извлекает динамическую сборку, содержащую это определение типа. |
| AssemblyQualifiedName |
Возвращает полное имя этого типа, указанное в отображаемом имени сборки. |
| Attributes |
Определяет и создает новые экземпляры классов во время выполнения. |
| Attributes |
Возвращает атрибуты, связанные с .Type (Унаследовано от Type) |
| BaseType |
Извлекает базовый тип этого типа. |
| ContainsGenericParameters |
Определяет и создает новые экземпляры классов во время выполнения. |
| ContainsGenericParameters |
Возвращает значение, указывающее, имеет ли текущий Type объект параметры типа, которые не были заменены определенными типами. (Унаследовано от Type) |
| CustomAttributes |
Возвращает коллекцию, содержащую настраиваемые атрибуты этого члена. (Унаследовано от MemberInfo) |
| DeclaredConstructors |
Возвращает коллекцию конструкторов, объявленных текущим типом. (Унаследовано от TypeInfo) |
| DeclaredEvents |
Возвращает коллекцию событий, определенных текущим типом. (Унаследовано от TypeInfo) |
| DeclaredFields |
Возвращает коллекцию полей, определенных текущим типом. (Унаследовано от TypeInfo) |
| DeclaredMembers |
Возвращает коллекцию элементов, определенных текущим типом. (Унаследовано от TypeInfo) |
| DeclaredMethods |
Возвращает коллекцию методов, определенных текущим типом. (Унаследовано от TypeInfo) |
| DeclaredNestedTypes |
Возвращает коллекцию вложенных типов, определенных текущим типом. (Унаследовано от TypeInfo) |
| DeclaredProperties |
Возвращает коллекцию свойств, определенных текущим типом. (Унаследовано от TypeInfo) |
| DeclaringMethod |
Возвращает метод, объявляющий текущий параметр универсального типа. |
| DeclaringType |
Возвращает тип, объявленный этим типом. |
| FullName |
Извлекает полный путь этого типа. |
| GenericParameterAttributes |
Возвращает значение, указывающее ковариацию и специальные ограничения текущего параметра универсального типа. |
| GenericParameterPosition |
Возвращает позицию параметра типа в списке параметров типа универсального типа, объявленного параметром. |
| GenericTypeArguments |
Определяет и создает новые экземпляры классов во время выполнения. |
| GenericTypeArguments |
Возвращает массив аргументов универсального типа для этого типа. (Унаследовано от Type) |
| GenericTypeParameters |
Возвращает массив параметров универсального типа текущего экземпляра. (Унаследовано от TypeInfo) |
| GUID |
Извлекает GUID этого типа. |
| HasElementType |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| HasElementType |
Возвращает значение, указывающее, охватывает ли текущий тип или ссылается на другой тип; то есть, является ли текущий TypeType массив, указатель или передается по ссылке. (Унаследовано от Type) |
| ImplementedInterfaces |
Возвращает коллекцию интерфейсов, реализованных текущим типом. (Унаследовано от TypeInfo) |
| IsAbstract |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsAbstract |
Возвращает значение, указывающее, является ли Type абстрактный и должен быть переопределен. (Унаследовано от Type) |
| IsAnsiClass |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsAnsiClass |
Возвращает значение, указывающее, выбран |
| IsArray |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsArray |
Возвращает значение, указывающее, является ли тип массивом. (Унаследовано от Type) |
| IsAutoClass |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsAutoClass |
Возвращает значение, указывающее, выбран |
| IsAutoLayout |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsAutoLayout |
Возвращает значение, указывающее, будут ли поля текущего типа автоматически выложены средой CLR. (Унаследовано от Type) |
| IsByRef |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsByRef |
Возвращает значение, указывающее, передается ли объект Type по ссылке. (Унаследовано от Type) |
| IsByRefLike |
Возвращает значение, указывающее, является ли тип структурой byref-like. |
| IsClass |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsClass |
Получает значение, указывающее, является ли Type класс или делегат; то есть не тип значения или интерфейс. (Унаследовано от Type) |
| IsCollectible |
Возвращает значение, указывающее, ссылается ли этот MemberInfo объект на одну или несколько сборок, содержащихся в коллекционируемых AssemblyLoadContextобъектах. (Унаследовано от MemberInfo) |
| IsCOMObject |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsCOMObject |
Возвращает значение, указывающее, является ли Type объект COM. (Унаследовано от Type) |
| IsConstructedGenericType |
Возвращает значение, указывающее, представляет ли этот объект созданный универсальный тип. |
| IsContextful |
Возвращает значение, указывающее, может ли Type размещаться в контексте. (Унаследовано от Type) |
| IsEnum |
Определяет и создает новые экземпляры классов во время выполнения. |
| IsEnum |
Возвращает значение, указывающее, представляет ли текущий Type перечисление. (Унаследовано от Type) |
| IsExplicitLayout |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsExplicitLayout |
Возвращает значение, указывающее, указывают ли поля текущего типа явным образом указанные смещения. (Унаследовано от Type) |
| IsFunctionPointer |
Возвращает значение, указывающее, является ли текущий Type указателем функции. (Унаследовано от Type) |
| IsGenericMethodParameter |
Возвращает значение, указывающее, представляет ли текущий Type параметр типа в определении универсального метода. (Унаследовано от Type) |
| IsGenericParameter |
Возвращает значение, указывающее, является ли текущий тип параметром универсального типа. |
| IsGenericType |
Возвращает значение, указывающее, является ли текущий тип универсальным типом. |
| IsGenericTypeDefinition |
Возвращает значение, указывающее, представляет ли текущий TypeBuilder определение универсального типа, из которого можно создать другие универсальные типы. |
| IsGenericTypeParameter |
Возвращает значение, указывающее, представляет ли текущий Type параметр типа в определении универсального типа. (Унаследовано от Type) |
| IsImport |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsImport |
Возвращает значение, указывающее TypeComImportAttribute , применен ли атрибут, указывающий, что он был импортирован из библиотеки типов COM. (Унаследовано от Type) |
| IsInterface |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsInterface |
Возвращает значение, указывающее, является ли Type интерфейс; то есть не класс или тип значения. (Унаследовано от Type) |
| IsLayoutSequential |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsLayoutSequential |
Получает значение, указывающее, будут ли поля текущего типа выложены последовательно, в том порядке, в котором они были определены или созданы метаданным. (Унаследовано от Type) |
| IsMarshalByRef |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsMarshalByRef |
Возвращает значение, указывающее, выполняется ли Type маршалирование по ссылке. (Унаследовано от Type) |
| IsNested |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNested |
Возвращает значение, указывающее, представляет ли текущий Type объект тип, определение которого вложено внутри определения другого типа. (Унаследовано от Type) |
| IsNestedAssembly |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNestedAssembly |
Возвращает значение, указывающее, является ли Type вложенный и видимый только в собственной сборке. (Унаследовано от Type) |
| IsNestedFamANDAssem |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNestedFamANDAssem |
Возвращает значение, указывающее, является ли Type вложенный и видимым только для классов, принадлежащих как к своей семье, так и к собственной сборке. (Унаследовано от Type) |
| IsNestedFamily |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNestedFamily |
Возвращает значение, указывающее, является ли Type вложенный и видимый только в пределах собственной семьи. (Унаследовано от Type) |
| IsNestedFamORAssem |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNestedFamORAssem |
Возвращает значение, указывающее, является ли Type вложенный и видимый только для классов, принадлежащих либо к собственной семье, либо к собственной сборке. (Унаследовано от Type) |
| IsNestedPrivate |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNestedPrivate |
Возвращает значение, указывающее, Type вложено ли вложено и объявлено ли закрытое значение. (Унаследовано от Type) |
| IsNestedPublic |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNestedPublic |
Возвращает значение, указывающее, вложен ли класс и объявлен общедоступным. (Унаследовано от Type) |
| IsNotPublic |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsNotPublic |
Возвращает значение, указывающее, не объявлена ли Type общедоступная. (Унаследовано от Type) |
| IsPointer |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsPointer |
Возвращает значение, указывающее, является ли Type указатель указателем. (Унаследовано от Type) |
| IsPrimitive |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsPrimitive |
Возвращает значение, указывающее, является ли Type одно из примитивных типов. (Унаследовано от Type) |
| IsPublic |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsPublic |
Возвращает значение, указывающее, объявлена ли Type общедоступная. (Унаследовано от Type) |
| IsSealed |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsSealed |
Возвращает значение, указывающее, Type объявлен ли объявлен запечатанный. (Унаследовано от Type) |
| IsSecurityCritical |
Возвращает значение, указывающее, является ли текущий тип критически важным или безопасным для безопасности и поэтому может выполнять критически важные операции. |
| IsSecuritySafeCritical |
Возвращает значение, указывающее, является ли текущий тип критически важным для безопасности; т. е. может ли он выполнять критически важные операции и получить доступ к ним с помощью прозрачного кода. |
| IsSecurityTransparent |
Возвращает значение, указывающее, является ли текущий тип прозрачным и поэтому не может выполнять критически важные операции. |
| IsSerializable |
Определяет и создает новые экземпляры классов во время выполнения. |
| IsSerializable |
Устаревшие.
Возвращает значение, указывающее, является ли Type двоичный сериализуемый. (Унаследовано от Type) |
| IsSignatureType |
Возвращает значение, указывающее, является ли тип сигнатуры. (Унаследовано от Type) |
| IsSpecialName |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsSpecialName |
Возвращает значение, указывающее, имеет ли тип имя, требующее специальной обработки. (Унаследовано от Type) |
| IsSZArray |
Определяет и создает новые экземпляры классов во время выполнения. |
| IsTypeDefinition |
Определяет и создает новые экземпляры классов во время выполнения. |
| IsUnicodeClass |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsUnicodeClass |
Возвращает значение, указывающее, выбран |
| IsUnmanagedFunctionPointer |
Возвращает значение, указывающее, является ли текущий Type указателем неуправляемой функции. (Унаследовано от Type) |
| IsValueType |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsValueType |
Возвращает значение, указывающее, является ли Type тип значения. (Унаследовано от Type) |
| IsVariableBoundArray |
Определяет и создает новые экземпляры классов во время выполнения. |
| IsVariableBoundArray |
Возвращает значение, указывающее, является ли тип массива типом, который может представлять многомерный массив или массив с произвольной нижней границой. (Унаследовано от Type) |
| IsVisible |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsVisible |
Возвращает значение, указывающее, можно ли Type получить доступ к коду за пределами сборки. (Унаследовано от Type) |
| MemberType |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| MemberType |
MemberTypes Возвращает значение, указывающее, что этот элемент является типом или вложенным типом. (Унаследовано от Type) |
| MetadataToken |
Возвращает маркер, определяющий текущий динамический модуль в метаданных. |
| MetadataToken |
Возвращает значение, определяющее элемент метаданных. (Унаследовано от MemberInfo) |
| Module |
Извлекает динамический модуль, содержащий это определение типа. |
| Name |
Извлекает имя этого типа. |
| Namespace |
Извлекает пространство имен, в котором это |
| PackingSize |
Извлекает размер упаковки этого типа. |
| PackingSizeCore |
При переопределении в производном классе получает размер упаковки этого типа. |
| ReflectedType |
Возвращает тип, используемый для получения этого типа. |
| Size |
Извлекает общий размер типа. |
| SizeCore |
При переопределении в производном классе получает общий размер типа. |
| StructLayoutAttribute |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| StructLayoutAttribute |
Возвращает объект StructLayoutAttribute , описывающий макет текущего типа. (Унаследовано от Type) |
| TypeHandle |
Не поддерживается в динамических модулях. |
| TypeInitializer |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| TypeInitializer |
Возвращает инициализатор для типа. (Унаследовано от Type) |
| TypeToken |
Возвращает маркер типа этого типа. |
| UnderlyingSystemType |
Возвращает базовый тип системы для этого |
| UnderlyingSystemType |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
Методы
| Имя | Описание |
|---|---|
| AddDeclarativeSecurity(SecurityAction, PermissionSet) |
Добавляет декларативную безопасность для этого типа. |
| AddInterfaceImplementation(Type) |
Добавляет интерфейс, реализующий этот тип. |
| AddInterfaceImplementationCore(Type) |
При переопределении в производном классе добавляет интерфейс, реализующий этот тип. |
| AsType() |
Возвращает текущий Type тип в качестве объекта. (Унаследовано от TypeInfo) |
| CreateType() |
Type Создает объект для класса. После определения полей и методов класса |
| CreateTypeInfo() |
TypeInfo Возвращает объект, представляющий этот тип. |
| CreateTypeInfoCore() |
При переопределении в производном классе получает TypeInfo объект, представляющий этот тип. |
| DefineConstructor(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) |
Добавляет новый конструктор в тип с заданными атрибутами, сигнатурами и настраиваемыми модификаторами. |
| DefineConstructor(MethodAttributes, CallingConventions, Type[]) |
Добавляет новый конструктор в тип с заданными атрибутами и сигнатурой. |
| DefineConstructorCore(MethodAttributes, CallingConventions, Type[], Type[][], Type[][]) |
При переопределении в производном классе добавляет новый конструктор в тип с заданными атрибутами, сигнатурами и настраиваемыми модификаторами. |
| DefineDefaultConstructor(MethodAttributes) |
Определяет конструктор без параметров. Конструктор, определенный здесь, просто вызывает конструктор без параметров родительского элемента. |
| DefineDefaultConstructorCore(MethodAttributes) |
При переопределении в производном классе определяет конструктор без параметров. Конструктор, определенный здесь, вызывает конструктор без параметров родительского элемента. |
| DefineEvent(String, EventAttributes, Type) |
Добавляет новое событие в тип с заданным именем, атрибутами и типом события. |
| DefineEventCore(String, EventAttributes, Type) |
При переопределении в производном классе добавляет новое событие в тип с заданным именем, атрибутами и типом события. |
| DefineField(String, Type, FieldAttributes) |
Добавляет новое поле в тип с заданным именем, атрибутами и типом поля. |
| DefineField(String, Type, Type[], Type[], FieldAttributes) |
Добавляет новое поле в тип с заданным именем, атрибутами, типом поля и настраиваемыми модификаторами. |
| DefineFieldCore(String, Type, Type[], Type[], FieldAttributes) |
При переопределении в производном классе добавляет новое поле в тип с заданным именем, атрибутами, типом поля и настраиваемыми модификаторами. |
| DefineGenericParameters(String[]) |
Определяет параметры универсального типа для текущего типа, указывая их число и их имена, и возвращает массив объектов, которые можно использовать для задания ограничений GenericTypeParameterBuilder . |
| DefineGenericParametersCore(String[]) |
При переопределении в производном классе определяет параметры универсального типа для текущего типа, указывая их число и их имена. |
| DefineInitializedData(String, Byte[], FieldAttributes) |
Определяет инициализированное поле данных в разделе SDATA переносимого исполняемого файла (PE). |
| DefineInitializedDataCore(String, Byte[], FieldAttributes) |
При переопределении в производном классе определяет поле инициализированных данных в разделе SDATA переносимого исполняемого файла (PE). |
| DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][]) |
Добавляет новый метод в тип с указанным именем, атрибутами метода, соглашением о вызовах, сигнатурой метода и настраиваемыми модификаторами. |
| DefineMethod(String, MethodAttributes, CallingConventions, Type, Type[]) |
Добавляет новый метод в тип с указанным именем, атрибутами метода, соглашением о вызовах и сигнатурой метода. |
| DefineMethod(String, MethodAttributes, CallingConventions) |
Добавляет новый метод в тип с указанным именем, атрибутами метода и соглашением о вызовах. |
| DefineMethod(String, MethodAttributes, Type, Type[]) |
Добавляет новый метод в тип с указанным именем, атрибутами метода и сигнатурой метода. |
| DefineMethod(String, MethodAttributes) |
Добавляет новый метод в тип с указанными атрибутами имени и метода. |
| DefineMethodCore(String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][]) |
При переопределении в производном классе добавляет новый метод в тип с указанным именем, атрибутами метода, соглашением о вызове, сигнатурой метода и пользовательскими модификаторами. |
| DefineMethodOverride(MethodInfo, MethodInfo) |
Задает заданный текст метода, реализующий объявление заданного метода, потенциально с другим именем. |
| DefineMethodOverrideCore(MethodInfo, MethodInfo) |
При переопределении в производном классе указывает заданный текст метода, реализующий объявление заданного метода, потенциально с другим именем. |
| DefineNestedType(String, TypeAttributes, Type, Int32) |
Определяет вложенный тип, учитывая его имя, атрибуты, общий размер типа и тип, который он расширяет. |
| DefineNestedType(String, TypeAttributes, Type, PackingSize, Int32) |
Определяет вложенный тип, учитывая его имя, атрибуты, размер и тип, который он расширяет. |
| DefineNestedType(String, TypeAttributes, Type, PackingSize) |
Определяет вложенный тип, учитывая его имя, атрибуты, тип, который он расширяет, и размер упаковки. |
| DefineNestedType(String, TypeAttributes, Type, Type[]) |
Определяет вложенный тип, учитывая его имя, атрибуты, тип, который он расширяет, и интерфейсы, которые он реализует. |
| DefineNestedType(String, TypeAttributes, Type) |
Определяет вложенный тип, учитывая его имя, атрибуты и тип, который он расширяет. |
| DefineNestedType(String, TypeAttributes) |
Определяет вложенный тип, учитывая его имя и атрибуты. |
| DefineNestedType(String) |
Определяет вложенный тип, присвоив ему имя. |
| DefineNestedTypeCore(String, TypeAttributes, Type, Type[], PackingSize, Int32) |
При переопределении в производном классе определяет вложенный тип, учитывая его имя, атрибуты, размер и тип, который он расширяет. |
| DefinePInvokeMethod(String, String, MethodAttributes, CallingConventions, Type, Type[], CallingConvention, CharSet) |
Определяет |
| DefinePInvokeMethod(String, String, String, MethodAttributes, CallingConventions, Type, Type[], CallingConvention, CharSet) |
Определяет |
| DefinePInvokeMethod(String, String, String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][], CallingConvention, CharSet) |
Определяет |
| DefinePInvokeMethodCore(String, String, String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][], CallingConvention, CharSet) |
При переопределении в производном классе определяет метод PInvoke с указанным именем, именем библиотеки DLL, именем точки входа, атрибутами, соглашением о вызове, типом возвращаемых типов, типами параметров, флагами PInvoke и настраиваемыми модификаторами для параметров и возвращаемого типа. |
| DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][]) |
Добавляет новое свойство в тип с заданным именем, соглашением о вызовах, сигнатурой свойств и настраиваемыми модификаторами. |
| DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[]) |
Добавляет новое свойство в тип с заданным именем, атрибутами, соглашением о вызовах и сигнатурой свойств. |
| DefineProperty(String, PropertyAttributes, Type, Type[], Type[], Type[], Type[][], Type[][]) |
Добавляет новое свойство в тип с заданным именем, сигнатурой свойств и настраиваемыми модификаторами. |
| DefineProperty(String, PropertyAttributes, Type, Type[]) |
Добавляет новое свойство в тип с заданным именем и сигнатурой свойства. |
| DefinePropertyCore(String, PropertyAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][]) |
При переопределении в производном классе добавляет новое свойство в тип с заданным именем, соглашением о вызове, подписью свойства и настраиваемыми модификаторами. |
| DefineTypeInitializer() |
Определяет инициализатор для этого типа. |
| DefineTypeInitializerCore() |
При переопределении в производном классе определяет инициализатор для этого типа. |
| DefineUninitializedData(String, Int32, FieldAttributes) |
Определяет неинициализированное поле данных в |
| DefineUninitializedDataCore(String, Int32, FieldAttributes) |
При переопределении в производном классе определяет неинициализированное поле данных в |
| Equals(Object) |
Возвращает значение, указывающее, равен ли этот экземпляр указанному объекту. (Унаследовано от MemberInfo) |
| Equals(Object) |
Определяет, совпадает ли базовый тип системы текущего Type объекта с базовым типом системы указанного объекта Object. (Унаследовано от Type) |
| Equals(Type) |
Определяет, совпадает ли базовый тип системы текущего Type с базовым типом системы указанного.Type (Унаследовано от Type) |
| FindInterfaces(TypeFilter, Object) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| FindInterfaces(TypeFilter, Object) |
Возвращает массив объектов, представляющий отфильтрованный список интерфейсов, реализованных Type или унаследованных текущим Type. (Унаследовано от Type) |
| FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| FindMembers(MemberTypes, BindingFlags, MemberFilter, Object) |
Возвращает отфильтрованный массив MemberInfo объектов указанного типа элемента. (Унаследовано от Type) |
| GetArrayRank() |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetArrayRank() |
Возвращает количество измерений в массиве. (Унаследовано от Type) |
| GetAttributeFlagsImpl() |
При переопределении в производном классе реализует Attributes свойство и получает побитовое сочетание значений перечисления, указывающее атрибуты, связанные с Typeним. |
| GetAttributeFlagsImpl() |
При переопределении в производном классе реализует Attributes свойство и получает побитовое сочетание значений перечисления, указывающее атрибуты, связанные с Typeним. (Унаследовано от Type) |
| GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Выполняет поиск конструктора, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. (Унаследовано от Type) |
| GetConstructor(BindingFlags, Binder, Type[], ParameterModifier[]) |
Выполняет поиск конструктора, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetConstructor(BindingFlags, Type[]) |
Выполняет поиск конструктора, параметры которого соответствуют указанным типам аргументов, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetConstructor(Type, ConstructorInfo) |
Возвращает конструктор указанного созданного универсального типа, соответствующего указанному конструктору определения универсального типа. |
| GetConstructor(Type[]) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetConstructor(Type[]) |
Выполняет поиск конструктора общедоступного экземпляра, параметры которого соответствуют типам в указанном массиве. (Унаследовано от Type) |
| GetConstructorImpl(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
При переопределении в производном классе выполняет поиск конструктора, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. |
| GetConstructorImpl(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
При переопределении в производном классе выполняет поиск конструктора, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. (Унаследовано от Type) |
| GetConstructors() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetConstructors() |
Возвращает все открытые конструкторы, определенные для текущего Type. (Унаследовано от Type) |
| GetConstructors(BindingFlags) |
Возвращает массив объектов, представляющих открытые ConstructorInfo и не открытые конструкторы, определенные для этого класса, как указано. |
| GetConstructors(BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetCustomAttributes(Boolean) |
Возвращает все настраиваемые атрибуты, определенные для этого типа. |
| GetCustomAttributes(Type, Boolean) |
Возвращает все настраиваемые атрибуты текущего типа, которые можно назначить указанному типу. |
| GetCustomAttributesData() |
Возвращает список CustomAttributeData объектов, представляющих данные о атрибутах, примененных к целевому элементу. (Унаследовано от MemberInfo) |
| GetDeclaredEvent(String) |
Возвращает объект, представляющий указанное событие, объявленное текущим типом. (Унаследовано от TypeInfo) |
| GetDeclaredField(String) |
Возвращает объект, представляющий указанное поле, объявленное текущим типом. (Унаследовано от TypeInfo) |
| GetDeclaredMethod(String) |
Возвращает объект, представляющий указанный метод, объявленный текущим типом. (Унаследовано от TypeInfo) |
| GetDeclaredMethods(String) |
Возвращает коллекцию, содержащую все методы, объявленные для текущего типа, соответствующего указанному имени. (Унаследовано от TypeInfo) |
| GetDeclaredNestedType(String) |
Возвращает объект, представляющий указанный вложенный тип, объявленный текущим типом. (Унаследовано от TypeInfo) |
| GetDeclaredProperty(String) |
Возвращает объект, представляющий указанное свойство, объявленное текущим типом. (Унаследовано от TypeInfo) |
| GetDefaultMembers() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetDefaultMembers() |
Выполняет поиск элементов, определенных для текущего TypeDefaultMemberAttribute набора. (Унаследовано от Type) |
| GetElementType() |
Вызов этого метода всегда вызывает.NotSupportedException |
| GetEnumName(Object) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetEnumName(Object) |
Возвращает имя константы с указанным значением для текущего типа перечисления. (Унаследовано от Type) |
| GetEnumNames() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetEnumNames() |
Возвращает имена членов текущего типа перечисления. (Унаследовано от Type) |
| GetEnumUnderlyingType() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetEnumUnderlyingType() |
Возвращает базовый тип текущего типа перечисления. (Унаследовано от Type) |
| GetEnumValues() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetEnumValues() |
Возвращает массив значений констант в текущем типе перечисления. (Унаследовано от Type) |
| GetEnumValuesAsUnderlyingType() |
Извлекает массив значений констант базового типа данного типа перечисления. (Унаследовано от Type) |
| GetEvent(String, BindingFlags) |
Возвращает событие с указанным именем. |
| GetEvent(String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetEvent(String) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetEvent(String) |
Возвращает объект, представляющий указанное EventInfo общедоступное событие. (Унаследовано от Type) |
| GetEvents() |
Возвращает общедоступные события, объявленные или унаследованные этим типом. |
| GetEvents() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetEvents(BindingFlags) |
Возвращает общедоступные и недоступные события, объявленные этим типом. |
| GetEvents(BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetField(String, BindingFlags) |
Возвращает поле, указанное заданным именем. |
| GetField(String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetField(String) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetField(String) |
Ищет общедоступное поле с указанным именем. (Унаследовано от Type) |
| GetField(Type, FieldInfo) |
Возвращает поле указанного созданного универсального типа, соответствующего указанному полю определения универсального типа. |
| GetFields() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetFields() |
Возвращает все открытые поля текущего Type. (Унаследовано от Type) |
| GetFields(BindingFlags) |
Возвращает открытые и не открытые поля, объявленные этим типом. |
| GetFields(BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetFunctionPointerCallingConventions() |
При переопределении в производном классе возвращает соглашения о вызовах текущего указателя Typeфункции. (Унаследовано от Type) |
| GetFunctionPointerParameterTypes() |
При переопределении в производном классе возвращает типы параметров текущего указателя Typeфункции. (Унаследовано от Type) |
| GetFunctionPointerReturnType() |
При переопределении в производном классе возвращает возвращаемый тип текущего указателя Typeфункции. (Унаследовано от Type) |
| GetGenericArguments() |
Возвращает массив Type объектов, представляющих аргументы типа универсального типа или параметры типа определения универсального типа. |
| GetGenericArguments() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetGenericParameterConstraints() |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetGenericParameterConstraints() |
Возвращает массив Type объектов, представляющих ограничения текущего параметра универсального типа. (Унаследовано от Type) |
| GetGenericTypeDefinition() |
Type Возвращает объект, представляющий определение универсального типа, из которого можно получить текущий тип. |
| GetHashCode() |
Возвращает хэш-код для этого экземпляра. (Унаследовано от MemberInfo) |
| GetHashCode() |
Возвращает хэш-код для этого экземпляра. (Унаследовано от Type) |
| GetInterface(String, Boolean) |
Возвращает интерфейс, реализованный (напрямую или косвенно) этим классом с полным именем, соответствующим заданному имени интерфейса. |
| GetInterface(String, Boolean) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetInterface(String) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetInterface(String) |
Выполняет поиск интерфейса с указанным именем. (Унаследовано от Type) |
| GetInterfaceMap(Type) |
Возвращает сопоставление интерфейса для запрошенного интерфейса. |
| GetInterfaces() |
Возвращает массив всех интерфейсов, реализованных в этом типе и его базовых типах. |
| GetInterfaces() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMember(String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMember(String, BindingFlags) |
Выполняет поиск указанных элементов с помощью указанных ограничений привязки. (Унаследовано от Type) |
| GetMember(String, MemberTypes, BindingFlags) |
Возвращает все открытые и не открытые члены, объявленные или унаследованные этим типом, как указано. |
| GetMember(String, MemberTypes, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMember(String) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMember(String) |
Ищет общедоступных участников с указанным именем. (Унаследовано от Type) |
| GetMembers() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMembers() |
Возвращает всех общедоступных членов текущего Typeобъекта. (Унаследовано от Type) |
| GetMembers(BindingFlags) |
Возвращает элементы для общедоступных и недоступных членов, объявленных или унаследованных этим типом. |
| GetMembers(BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMemberWithSameMetadataDefinitionAs(MemberInfo) |
MemberInfo Ищет текущийType, соответствующий указанномуMemberInfo. (Унаследовано от Type) |
| GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Выполняет поиск указанного метода, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. (Унаследовано от Type) |
| GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[]) |
Выполняет поиск указанного метода, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetMethod(String, BindingFlags, Type[]) |
Выполняет поиск указанного метода, параметры которого соответствуют указанным типам аргументов, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetMethod(String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMethod(String, BindingFlags) |
Выполняет поиск указанного метода с помощью указанных ограничений привязки. (Унаследовано от Type) |
| GetMethod(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Выполняет поиск указанного метода, параметры которого соответствуют указанному числу универсальных параметров, типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. (Унаследовано от Type) |
| GetMethod(String, Int32, BindingFlags, Binder, Type[], ParameterModifier[]) |
Выполняет поиск указанного метода, параметры которого соответствуют указанному числу универсальных параметров, типам аргументов и модификаторам, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetMethod(String, Int32, BindingFlags, Type[]) |
Выполняет поиск указанного метода, параметры которого соответствуют указанному числу универсальных параметров и типам аргументов, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetMethod(String, Int32, Type[], ParameterModifier[]) |
Выполняет поиск указанного общедоступного метода, параметры которого соответствуют указанному числу универсальных параметров, типам аргументов и модификаторам. (Унаследовано от Type) |
| GetMethod(String, Int32, Type[]) |
Выполняет поиск указанного общедоступного метода, параметры которого соответствуют указанному числу универсальных параметров и типам аргументов. (Унаследовано от Type) |
| GetMethod(String, Type[], ParameterModifier[]) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMethod(String, Type[], ParameterModifier[]) |
Выполняет поиск указанного общедоступного метода, параметры которого соответствуют указанным типам аргументов и модификаторам. (Унаследовано от Type) |
| GetMethod(String, Type[]) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMethod(String, Type[]) |
Выполняет поиск указанного общедоступного метода, параметры которого соответствуют указанным типам аргументов. (Унаследовано от Type) |
| GetMethod(String) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMethod(String) |
Выполняет поиск общедоступного метода с указанным именем. (Унаследовано от Type) |
| GetMethod(Type, MethodInfo) |
Возвращает метод указанного созданного универсального типа, соответствующего указанному методу определения универсального типа. |
| GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
При переопределении в производном классе выполняет поиск указанного метода, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. |
| GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
При переопределении в производном классе выполняет поиск указанного метода, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. (Унаследовано от Type) |
| GetMethodImpl(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
При переопределении в производном классе выполняет поиск указанного метода, параметры которого соответствуют указанному числу универсальных параметров, типам аргументов и модификаторам, используя указанные ограничения привязки и указанное соглашение о вызовах. (Унаследовано от Type) |
| GetMethods() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetMethods() |
Возвращает все открытые методы текущего Type. (Унаследовано от Type) |
| GetMethods(BindingFlags) |
Возвращает все открытые и недоступные методы, объявленные или унаследованные этим типом, как указано. |
| GetMethods(BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetNestedType(String, BindingFlags) |
Возвращает общедоступные и не открытые вложенные типы, объявленные этим типом. |
| GetNestedType(String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetNestedType(String) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetNestedType(String) |
Ищет общедоступный вложенный тип с указанным именем. (Унаследовано от Type) |
| GetNestedTypes() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetNestedTypes() |
Возвращает открытые типы, вложенные в текущий Type. (Унаследовано от Type) |
| GetNestedTypes(BindingFlags) |
Возвращает общедоступные и недоступные вложенные типы, объявленные или унаследованные этим типом. |
| GetNestedTypes(BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetNullableUnderlyingType() |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetOptionalCustomModifiers() |
При переопределении в производном классе возвращает необязательные настраиваемые модификаторы текущего Typeкласса. (Унаследовано от Type) |
| GetProperties() |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperties() |
Возвращает все общедоступные свойства текущего Type. (Унаследовано от Type) |
| GetProperties(BindingFlags) |
Возвращает все общедоступные и недоступные свойства, объявленные или унаследованные этим типом, как указано. |
| GetProperties(BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) |
Выполняет поиск указанного свойства, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetProperty(String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperty(String, BindingFlags) |
Выполняет поиск указанного свойства с помощью указанных ограничений привязки. (Унаследовано от Type) |
| GetProperty(String, Type, Type[], ParameterModifier[]) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperty(String, Type, Type[], ParameterModifier[]) |
Выполняет поиск указанного общедоступного свойства, параметры которого соответствуют указанным типам аргументов и модификаторам. (Унаследовано от Type) |
| GetProperty(String, Type, Type[]) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperty(String, Type, Type[]) |
Выполняет поиск указанного общедоступного свойства, параметры которого соответствуют указанным типам аргументов. (Унаследовано от Type) |
| GetProperty(String, Type) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperty(String, Type) |
Ищет общедоступное свойство с указанным именем и типом возвращаемого значения. (Унаследовано от Type) |
| GetProperty(String, Type[]) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperty(String, Type[]) |
Выполняет поиск указанного общедоступного свойства, параметры которого соответствуют указанным типам аргументов. (Унаследовано от Type) |
| GetProperty(String) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| GetProperty(String) |
Ищет общедоступное свойство с указанным именем. (Унаследовано от Type) |
| GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) |
При переопределении в производном классе выполняет поиск указанного свойства, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки. |
| GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[]) |
При переопределении в производном классе выполняет поиск указанного свойства, параметры которого соответствуют указанным типам аргументов и модификаторам, используя указанные ограничения привязки. (Унаследовано от Type) |
| GetRequiredCustomModifiers() |
При переопределении в производном классе возвращает необходимые настраиваемые модификаторы текущего Type. (Унаследовано от Type) |
| GetType() |
Возвращает текущий Type. (Унаследовано от Type) |
| GetTypeCodeImpl() |
Возвращает код базового типа этого Type экземпляра. (Унаследовано от Type) |
| HasElementTypeImpl() |
При переопределении в производном классе реализует HasElementType свойство и определяет, охватывает ли текущий тип или ссылается на другой тип; то есть, является ли текущий TypeType массив, указатель или передается по ссылке. |
| HasElementTypeImpl() |
При переопределении в производном классе реализует HasElementType свойство и определяет, охватывает ли текущий тип или ссылается на другой тип; то есть, является ли текущий TypeType массив, указатель или передается по ссылке. (Унаследовано от Type) |
| HasSameMetadataDefinitionAs(MemberInfo) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от MemberInfo) |
| InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) |
Вызывает указанный элемент, используя указанные ограничения привязки и сопоставляя указанный список аргументов и язык и региональные параметры. (Унаследовано от Type) |
| InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) |
Вызывает указанный элемент. Вызываемый метод должен быть доступен и обеспечить наиболее конкретное соответствие с указанным списком аргументов в соответствии с ограничениями указанных атрибутов привязки и вызова. |
| InvokeMember(String, BindingFlags, Binder, Object, Object[]) |
Вызывает указанный элемент, используя указанные ограничения привязки и сопоставляя указанный список аргументов. (Унаследовано от Type) |
| IsArrayImpl() |
При переопределении в производном классе реализует IsArray свойство и определяет, является ли Type массив массивом. |
| IsArrayImpl() |
При переопределении в производном классе реализует IsArray свойство и определяет, является ли Type массив массивом. (Унаследовано от Type) |
| IsAssignableFrom(Type) |
Возвращает значение, указывающее, можно ли назначить указанный Type объект. |
| IsAssignableFrom(Type) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsAssignableFrom(TypeInfo) |
Возвращает значение, указывающее, можно ли назначить указанный TypeInfo объект этому объекту. |
| IsAssignableTo(Type) |
Определяет, можно ли назначить текущий тип переменной указанной. |
| IsByRefImpl() |
При переопределении в производном классе реализует IsByRef свойство и определяет, передается ли он Type по ссылке. |
| IsByRefImpl() |
При переопределении в производном классе реализует IsByRef свойство и определяет, передается ли он Type по ссылке. (Унаследовано от Type) |
| IsCOMObjectImpl() |
При переопределении в производном классе реализует IsCOMObject свойство и определяет, является ли Type объект COM. |
| IsCOMObjectImpl() |
При переопределении в производном классе реализует IsCOMObject свойство и определяет, является ли Type объект COM. (Унаследовано от Type) |
| IsContextfulImpl() |
IsContextful Реализует свойство и определяет, может ли Type он размещаться в контексте. (Унаследовано от Type) |
| IsCreated() |
Возвращает значение, указывающее, был ли создан текущий динамический тип. |
| IsCreatedCore() |
При переопределении в производном классе возвращает значение, указывающее, был ли создан текущий динамический тип. |
| IsDefined(Type, Boolean) |
Определяет, применяется ли настраиваемый атрибут к текущему типу. |
| IsEnumDefined(Object) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsEnumDefined(Object) |
Возвращает значение, указывающее, существует ли указанное значение в текущем типе перечисления. (Унаследовано от Type) |
| IsEquivalentTo(Type) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsEquivalentTo(Type) |
Определяет, имеют ли два типа COM одинаковые удостоверения и имеют ли право на эквивалентность типов. (Унаследовано от Type) |
| IsInstanceOfType(Object) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsInstanceOfType(Object) |
Определяет, является ли указанный объект экземпляром текущего Typeобъекта. (Унаследовано от Type) |
| IsMarshalByRefImpl() |
IsMarshalByRef Реализует свойство и определяет, маршалируется ли Type маршалируется по ссылке. (Унаследовано от Type) |
| IsPointerImpl() |
При переопределении в производном классе реализует IsPointer свойство и определяет, является ли Type указатель указателем. |
| IsPointerImpl() |
При переопределении в производном классе реализует IsPointer свойство и определяет, является ли Type указатель указателем. (Унаследовано от Type) |
| IsPrimitiveImpl() |
При переопределении в производном классе реализует IsPrimitive свойство и определяет, является ли Type он одним из примитивных типов. |
| IsPrimitiveImpl() |
При переопределении в производном классе реализует IsPrimitive свойство и определяет, является ли Type он одним из примитивных типов. (Унаследовано от Type) |
| IsSubclassOf(Type) |
Определяет, является ли этот тип производным от указанного типа. |
| IsSubclassOf(Type) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от TypeInfo) |
| IsValueTypeImpl() |
IsValueType Реализует свойство и определяет, является ли Type тип значения, то есть не классом или интерфейсом. (Унаследовано от Type) |
| MakeArrayType() |
Type Возвращает объект, представляющий одномерный массив текущего типа с нижней границой нуля. |
| MakeArrayType(Int32) |
Type Возвращает объект, представляющий массив текущего типа с указанным числом измерений. |
| MakeByRefType() |
Возвращает объект Type, представляющий текущий тип при передаче в качестве параметра |
| MakeFunctionPointerType(Type[], Boolean) |
Определяет и создает новые экземпляры классов во время выполнения. (Унаследовано от Type) |
| MakeGenericType(Type[]) |
Заменяет элементы массива типов для параметров типа текущего определения универсального типа и возвращает результирующий созданный тип. |
| MakePointerType() |
Type Возвращает объект, представляющий тип неуправляемого указателя на текущий тип. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| SetCustomAttribute(ConstructorInfo, Byte[]) |
Задает настраиваемый атрибут с помощью указанного пользовательского BLOB-объекта атрибута. |
| SetCustomAttribute(CustomAttributeBuilder) |
Задайте настраиваемый атрибут с помощью построителя настраиваемых атрибутов. |
| SetCustomAttributeCore(ConstructorInfo, ReadOnlySpan<Byte>) |
При переопределении в производном классе задает настраиваемый атрибут для этой сборки. |
| SetParent(Type) |
Задает базовый тип текущего типа, который в настоящее время строится. |
| SetParentCore(Type) |
При переопределении в производном классе задает базовый тип типа, который в настоящее время находится в стадии построения. |
| ToString() |
Возвращает имя типа, за исключением пространства имен. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| _MemberInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от MemberInfo) |
| _MemberInfo.GetType() |
Type Возвращает объект, MemberInfo представляющий класс. (Унаследовано от MemberInfo) |
| _MemberInfo.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса. (Унаследовано от MemberInfo) |
| _MemberInfo.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). (Унаследовано от MemberInfo) |
| _MemberInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. (Унаследовано от MemberInfo) |
| _Type.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от Type) |
| _Type.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса. (Унаследовано от Type) |
| _Type.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). (Унаследовано от Type) |
| _Type.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. (Унаследовано от Type) |
| _TypeBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. |
| _TypeBuilder.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса. |
| _TypeBuilder.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). |
| _TypeBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. |
| ICustomAttributeProvider.GetCustomAttributes(Boolean) |
Возвращает массив всех пользовательских атрибутов, определенных для этого элемента, за исключением именованных атрибутов или пустого массива, если нет пользовательских атрибутов. (Унаследовано от MemberInfo) |
| ICustomAttributeProvider.GetCustomAttributes(Type, Boolean) |
Возвращает массив пользовательских атрибутов, определенных на этом элементе, определяемый по типу или пустой массив, если пользовательские атрибуты этого типа отсутствуют. (Унаследовано от MemberInfo) |
| ICustomAttributeProvider.IsDefined(Type, Boolean) |
Указывает, определен ли один или несколько экземпляров |
| IReflectableType.GetTypeInfo() |
Возвращает представление текущего типа в качестве TypeInfo объекта. (Унаследовано от TypeInfo) |
Методы расширения
| Имя | Описание |
|---|---|
| GetConstructor(Type, Type[]) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetConstructors(Type, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetConstructors(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetCustomAttribute(MemberInfo, Type, Boolean) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttribute(MemberInfo, Type) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу. |
| GetCustomAttribute<T>(MemberInfo, Boolean) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttribute<T>(MemberInfo) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу. |
| GetCustomAttributes(MemberInfo, Boolean) |
Извлекает коллекцию настраиваемых атрибутов, применяемых к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttributes(MemberInfo, Type, Boolean) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttributes(MemberInfo, Type) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу. |
| GetCustomAttributes(MemberInfo) |
Извлекает коллекцию настраиваемых атрибутов, применяемых к указанному элементу. |
| GetCustomAttributes<T>(MemberInfo, Boolean) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttributes<T>(MemberInfo) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу. |
| GetDefaultMembers(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetEvent(Type, String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetEvent(Type, String) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetEvents(Type, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetEvents(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetField(Type, String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetField(Type, String) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetFields(Type, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetFields(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetGenericArguments(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetInterfaces(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMember(Type, String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMember(Type, String) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMembers(Type, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMembers(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMetadataToken(MemberInfo) |
Возвращает маркер метаданных для данного члена, если он доступен. |
| GetMethod(Type, String, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMethod(Type, String, Type[]) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMethods(Type, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetMethods(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetNestedTypes(Type, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetProperties(Type, BindingFlags) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetProperties(Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetProperty(Type, String, Type, Type[]) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetProperty(Type, String, Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetProperty(Type, String) |
Определяет и создает новые экземпляры классов во время выполнения. |
| GetRuntimeEvent(Type, String) |
Извлекает объект, представляющий указанное событие. |
| GetRuntimeEvents(Type) |
Извлекает коллекцию, представляющую все события, определенные для указанного типа. |
| GetRuntimeField(Type, String) |
Извлекает объект, представляющий указанное поле. |
| GetRuntimeFields(Type) |
Извлекает коллекцию, представляющую все поля, определенные для указанного типа. |
| GetRuntimeInterfaceMap(TypeInfo, Type) |
Возвращает сопоставление интерфейса для указанного типа и указанного интерфейса. |
| GetRuntimeMethod(Type, String, Type[]) |
Извлекает объект, представляющий указанный метод. |
| GetRuntimeMethods(Type) |
Извлекает коллекцию, представляющую все методы, определенные в указанном типе. |
| GetRuntimeProperties(Type) |
Извлекает коллекцию, представляющую все свойства, определенные для указанного типа. |
| GetRuntimeProperty(Type, String) |
Извлекает объект, представляющий указанное свойство. |
| GetTypeInfo(Type) |
TypeInfo Возвращает представление указанного типа. |
| HasMetadataToken(MemberInfo) |
Возвращает значение, указывающее, доступен ли маркер метаданных для указанного элемента. |
| IsAssignableFrom(Type, Type) |
Определяет и создает новые экземпляры классов во время выполнения. |
| IsDefined(MemberInfo, Type, Boolean) |
Указывает, применяются ли пользовательские атрибуты указанного типа к указанному элементу и, при необходимости, применяются к его предкам. |
| IsDefined(MemberInfo, Type) |
Указывает, применяются ли пользовательские атрибуты указанного типа к указанному элементу. |
| IsInstanceOfType(Type, Object) |
Определяет и создает новые экземпляры классов во время выполнения. |