DynamicMethod Oluşturucular
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Dinamik bir yöntem oluşturur.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| DynamicMethod(String, Type, Type[]) |
Yöntem adını, dönüş türünü ve parametre türlerini belirterek anonim olarak barındırılan bir dinamik yöntem başlatır. |
| DynamicMethod(String, Type, Type[], Boolean) |
Yöntem adını, dönüş türünü, parametre türlerini ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirterek anonim olarak barındırılan bir dinamik yöntemi başlatır. |
| DynamicMethod(String, Type, Type[], Module) |
Yöntem adını, dönüş türünü, parametre türlerini ve modülü belirterek bir modül için genel olan dinamik bir yöntem oluşturur. |
| DynamicMethod(String, Type, Type[], Type) |
Yöntem adını, dönüş türünü, parametre türlerini ve dinamik yöntemin mantıksal olarak ilişkilendirildiği türü belirterek dinamik bir yöntem oluşturur. |
| DynamicMethod(String, Type, Type[], Module, Boolean) |
Yöntem adını, dönüş türünü, parametre türlerini, modülü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirterek bir modül için genel olan dinamik bir yöntem oluşturur. |
| DynamicMethod(String, Type, Type[], Type, Boolean) |
Yöntem adını, dönüş türünü, parametre türlerini, dinamik yöntemin mantıksal olarak ilişkilendirildiği türü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirten dinamik bir yöntem oluşturur. |
| DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean) |
Yöntem adını, özniteliklerini, çağırma kuralını, dönüş türünü, parametre türlerini, modülü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirterek bir modül için genel olan dinamik bir yöntem oluşturur. |
| DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean) |
Yöntem adını, özniteliklerini, çağırma kuralını, dönüş türünü, parametre türlerini, dinamik yöntemin mantıksal olarak ilişkilendirildiği türü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirten dinamik bir yöntem oluşturur. |
DynamicMethod(String, Type, Type[])
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, dönüş türünü ve parametre türlerini belirterek anonim olarak barındırılan bir dinamik yöntem başlatır.
public:
DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type())
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
name, null'e eşittir.
2.1'den eski .NET Framework ve .NET Core sürümleri: returnType, IsByReftrue döndüren bir türdür.
Açıklamalar
Bu oluşturucu tarafından oluşturulan dinamik yöntem, var olan bir tür veya modül yerine anonim bir derlemeyle ilişkilendirilir. Anonim derleme yalnızca dinamik yöntemler için bir korumalı alan ortamı sağlamak, yani bunları diğer kodlardan yalıtmak için vardır. Bu ortam, dinamik yöntemin kısmen güvenilen kod tarafından dağıtılıp yürütülmesini güvenli hale getirir.
Bu oluşturucu, dinamik yöntemin Microsoft ara dili (MSIL) için tam zamanında (JIT) görünürlük denetimlerinin uygulanacağını belirtir. Yani dinamik yöntemdeki kodun ortak sınıflara yönelik genel yöntemlerine erişimi vardır. Yöntem private, protected veya internal (Visual Basic'de Friend) türlerine veya üyelerine erişmeye çalışırsa özel durumlar oluşur. JIT görünürlük denetimlerini atlamayı kısıtlayan bir dinamik yöntem oluşturmak için oluşturucuyu DynamicMethod(String, Type, Type[], Boolean) kullanın.
Anonim olarak barındırılan bir dinamik yöntem oluşturulduğunda, yayan derlemenin çağrı yığını eklenir. yöntemi çağrıldığında, gerçek çağıranın izinleri yerine yayımlayan derlemenin izinleri kullanılır. Bu nedenle, dinamik yöntem, daha yüksek bir güven düzeyine sahip bir derlemeye geçirilip yürütülse bile, bunu gösteren derlemeden daha yüksek bir ayrıcalık düzeyinde yürütülemez.
Bu oluşturucu yöntem özniteliklerini MethodAttributes.Public ve MethodAttributes.Staticve çağırma kuralını CallingConventions.Standardbelirtir.
Note
Bu oluşturucu, .NET Framework 3.5 veya sonraki sürümlerinde tanıtıldı.
Ayrıca bkz.
- Nasıl yapılır: Dinamik Yöntemleri Tanımlama ve Yürütme
- Yansıma Yaymada Güvenlik Sorunları
- İzlenecek yol: Kısmi Güven Senaryolarında Kod Yayma
Şunlara uygulanır
DynamicMethod(String, Type, Type[], Boolean)
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, dönüş türünü, parametre türlerini ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirterek anonim olarak barındırılan bir dinamik yöntemi başlatır.
public:
DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, bool restrictedSkipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, bool restrictedSkipVisibility);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, bool restrictedSkipVisibility);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, bool restrictedSkipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * bool -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), restrictedSkipVisibility As Boolean)
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- restrictedSkipVisibility
- Boolean
true Dinamik yöntemin MSIL'i tarafından erişilen türler ve üyeler üzerinde JIT görünürlüğü denetimlerini atlamak için, bu kısıtlamayla birlikte: bu türleri ve üyeleri içeren derlemelerin güven düzeyi, dinamik yöntemi yayan çağrı yığınının güven düzeyine eşit veya daha az olmalıdır; aksi takdirde , false.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
name, null'e eşittir.
2.1'den eski .NET Framework ve .NET Core sürümleri: returnType, IsByReftrue döndüren bir türdür.
Açıklamalar
Bu oluşturucu tarafından oluşturulan dinamik yöntem, var olan bir tür veya modül yerine anonim bir derlemeyle ilişkilendirilir. Anonim derleme yalnızca dinamik yöntemler için bir korumalı alan ortamı sağlamak, yani bunları diğer kodlardan yalıtmak için vardır. Bu ortam, dinamik yöntemin kısmen güvenilen kod tarafından dağıtılıp yürütülmesini güvenli hale getirir.
Anonim olarak barındırılan dinamik yöntemlerin private, protected veya internal (Visual Basic'de Friend) türlerine veya üyelerine otomatik erişimi yoktur. Bu, ilişkili kapsamlarındaki gizli üyelere erişimi olan mevcut bir tür veya modülle ilişkili dinamik yöntemlerden farklıdır.
true Eğer dinamik yönteminizin restrictedSkipVisibility, private veya protected olan türlere ya da üyelere erişmesi gerekiyorsa internal belirtin. Bu, dinamik yönteme bu üyelere erişimi kısıtlar. Diğer bir ifadeyle, üyelere yalnızca aşağıdaki koşullar karşılandığında erişilebilir:
Hedef üyeler, dinamik yöntemi yayan çağrı yığınına eşit veya daha düşük bir güven düzeyine sahip bir derlemeye aittir.
Çağrı yığınına dinamik yöntemin yayılması için ReflectionPermission, ReflectionPermissionFlag.RestrictedMemberAccess bayrağıyla verilir. Kod tam güvenle yürütülürse bu her zaman geçerlidir. Kısmen güvenilen kod için, yalnızca konak açıkça izin verirse geçerlidir.
Important
İzin verilmediyse, bu oluşturucu çağrıldığında değil, çağrıldığında CreateDelegate veya dinamik yöntem çağrıldığında bir güvenlik özel durumu oluşturulur. Dinamik yöntemi yaymak için özel izin gerekmez.
Örneğin, için olarak ayarlanmış restrictedSkipVisibility olarak true oluşturulan dinamik bir yöntem, çağrı yığınına kısıtlı üye erişimi verilmişse, çağrı yığınındaki herhangi bir derlemenin özel üyesine erişebilir. Dinamik yöntem çağrı yığınında kısmen güvenilen kodla oluşturulduysa, .NET Framework derlemesindeki bir türün özel üyesine erişemez, çünkü bu tür derlemeler tam olarak güvenilirdir.
Eğer restrictedSkipVisibility, false ise, JIT görünürlük denetimleri uygulanır. Dinamik yöntem içerisindeki kod, genel sınıfların ortak yöntemlerine erişebilir ve private, protected, veya internal türlerine ya da üyelerine erişmeye çalışırsa istisnalar fırlatılır.
Anonim olarak barındırılan bir dinamik yöntem oluşturulduğunda, yayan derlemenin çağrı yığını eklenir. yöntemi çağrıldığında, gerçek çağıranın izinleri yerine yayan çağrı yığınının izinleri kullanılır. Bu nedenle, dinamik yöntem, daha yüksek bir güven düzeyine sahip bir derlemeye geçirilip yürütülse bile, bunu gösteren derlemeden daha yüksek bir ayrıcalık düzeyinde yürütülemez.
Bu oluşturucu yöntem özniteliklerini MethodAttributes.Public ve MethodAttributes.Staticve çağırma kuralını CallingConventions.Standardbelirtir.
Note
Bu oluşturucu, .NET Framework 3.5 veya sonraki sürümlerinde tanıtıldı.
Ayrıca bkz.
- Nasıl yapılır: Dinamik Yöntemleri Tanımlama ve Yürütme
- Yansıma Yaymada Güvenlik Sorunları
- İzlenecek yol: Kısmi Güven Senaryolarında Kod Yayma
Şunlara uygulanır
DynamicMethod(String, Type, Type[], Module)
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, dönüş türünü, parametre türlerini ve modülü belirterek bir modül için genel olan dinamik bir yöntem oluşturur.
public:
DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), m As Module)
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
-veya-
m , dinamik yöntemler için anonim barındırma sağlayan bir modüldür.
2.1'den eski .NET Framework ve .NET Core sürümleri: returnType, IsByReftrue döndüren bir türdür.
Örnekler
Aşağıdaki kod örneği, iki parametre alan dinamik bir yöntem oluşturur. Örnek, ilk parametreyi konsola yazdıran basit bir işlev gövdesi yayar ve örnekte yöntemin dönüş değeri olarak ikinci parametre kullanılır. Örnek, bir temsilci oluşturarak yöntemini tamamlar, temsilciyi farklı parametrelerle çağırır ve son olarak yöntemini kullanarak Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) dinamik yöntemi çağırır.
using System;
using System.Reflection;
using System.Reflection.Emit;
using Microsoft.VisualBasic;
public class Test
{
// Declare a delegate that will be used to execute the completed
// dynamic method.
private delegate int HelloInvoker(string msg, int ret);
public static void Main()
{
// Create an array that specifies the types of the parameters
// of the dynamic method. This method has a string parameter
// and an int parameter.
Type[] helloArgs = {typeof(string), typeof(int)};
// Create a dynamic method with the name "Hello", a return type
// of int, and two parameters whose types are specified by the
// array helloArgs. Create the method in the module that
// defines the Test class.
DynamicMethod hello = new DynamicMethod("Hello",
typeof(int),
helloArgs,
typeof(Test).Module);
// Create an array that specifies the parameter types of the
// overload of Console.WriteLine to be used in Hello.
Type[] writeStringArgs = {typeof(string)};
// Get the overload of Console.WriteLine that has one
// String parameter.
MethodInfo writeString =
typeof(Console).GetMethod("WriteLine", writeStringArgs);
// Get an ILGenerator and emit a body for the dynamic method.
ILGenerator il = hello.GetILGenerator();
// Load the first argument, which is a string, onto the stack.
il.Emit(OpCodes.Ldarg_0);
// Call the overload of Console.WriteLine that prints a string.
il.EmitCall(OpCodes.Call, writeString, null);
// The Hello method returns the value of the second argument;
// to do this, load the onto the stack and return.
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Ret);
// Create a delegate that represents the dynamic method. This
// action completes the method, and any further attempts to
// change the method will cause an exception.
HelloInvoker hi =
(HelloInvoker) hello.CreateDelegate(typeof(HelloInvoker));
// Use the delegate to execute the dynamic method. Save and
// print the return value.
int retval = hi("\r\nHello, World!", 42);
Console.WriteLine("Executing delegate hi(\"Hello, World!\", 42) returned {0}",
retval);
// Do it again, with different arguments.
retval = hi("\r\nHi, Mom!", 5280);
Console.WriteLine("Executing delegate hi(\"Hi, Mom!\", 5280) returned {0}",
retval);
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and ValueType arguments
// must be boxed.
object objRet = hello.Invoke(null, invokeArgs);
Console.WriteLine("hello.Invoke returned {0}", objRet);
}
}
Imports System.Reflection
Imports System.Reflection.Emit
Public Class Test
' Declare a delegate that will be used to execute the completed
' dynamic method.
Private Delegate Function HelloInvoker(ByVal msg As String, _
ByVal ret As Integer) As Integer
Public Shared Sub Main()
' Create an array that specifies the types of the parameters
' of the dynamic method. This method has a String parameter
' and an Integer parameter.
Dim helloArgs() As Type = {GetType(String), GetType(Integer)}
' Create a dynamic method with the name "Hello", a return type
' of Integer, and two parameters whose types are specified by
' the array helloArgs. Create the method in the module that
' defines the Test class.
Dim hello As New DynamicMethod("Hello", _
GetType(Integer), _
helloArgs, _
GetType(Test).Module)
' Create an array that specifies the parameter types of the
' overload of Console.WriteLine to be used in Hello.
Dim writeStringArgs() As Type = {GetType(String)}
' Get the overload of Console.WriteLine that has one
' String parameter.
Dim writeString As MethodInfo = GetType(Console). _
GetMethod("WriteLine", writeStringArgs)
' Get an ILGenerator and emit a body for the dynamic method.
Dim il As ILGenerator = hello.GetILGenerator()
' Load the first argument, which is a string, onto the stack.
il.Emit(OpCodes.Ldarg_0)
' Call the overload of Console.WriteLine that prints a string.
il.EmitCall(OpCodes.Call, writeString, Nothing)
' The Hello method returns the value of the second argument;
' to do this, load the onto the stack and return.
il.Emit(OpCodes.Ldarg_1)
il.Emit(OpCodes.Ret)
' Create a delegate that represents the dynamic method. This
' action completes the method, and any further attempts to
' change the method will cause an exception.
Dim hi As HelloInvoker = _
hello.CreateDelegate(GetType(HelloInvoker))
' Use the delegate to execute the dynamic method. Save and
' print the return value.
Dim retval As Integer = hi(vbCrLf & "Hello, World!", 42)
Console.WriteLine("Executing delegate hi(""Hello, World!"", 42) returned " _
& retval)
' Do it again, with different arguments.
retval = hi(vbCrLf & "Hi, Mom!", 5280)
Console.WriteLine("Executing delegate hi(""Hi, Mom!"", 5280) returned " _
& retval)
' Create an array of arguments to use with the Invoke method.
Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
' Invoke the dynamic method using the arguments. This is much
' slower than using the delegate, because you must create an
' array to contain the arguments, and ValueType arguments
' must be boxed. Note that this overload of Invoke is
' inherited from MethodBase, and simply calls the more
' complete overload of Invoke.
Dim objRet As Object = hello.Invoke(Nothing, invokeArgs)
Console.WriteLine("hello.Invoke returned " & objRet)
End Sub
End Class
' This code example produces the following output:
'
'Hello, World!
'Executing delegate hi("Hello, World!", 42) returned 42
'
'Hi, Mom!
'Executing delegate hi("Hi, Mom!", 5280) returned 5280
'
'Hello, World!
'hello.Invoke returned 42
'
Açıklamalar
Bu oluşturucu yöntem özniteliklerini MethodAttributes.Public ve MethodAttributes.Static, çağırma kuralını CallingConventions.Standardbelirtir ve tam zamanında (JIT) görünürlük denetimlerini atlamaz.
Modül internal içinde yer alan tüm türlerin public ve Friend (m Visual Basic içinde) üyelerine erişimi olan bir dinamik yöntem bu oluşturucuyla oluşturulmuştur.
Note
Geriye dönük uyumluluk için, aşağıdaki koşulların her ikisi de doğruysa, bu oluşturucu SecurityPermission bayrağını SecurityPermissionFlag.ControlEvidence ile talep eder: m, çağıran modül dışında bir modül olduğunda ve ReflectionPermission bayrağı ile ReflectionPermissionFlag.MemberAccess talebi başarısız olmuştur.
SecurityPermission talebi başarılı olursa, işleme izin verilir.
Ayrıca bkz.
Şunlara uygulanır
DynamicMethod(String, Type, Type[], Type)
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, dönüş türünü, parametre türlerini ve dinamik yöntemin mantıksal olarak ilişkilendirildiği türü belirterek dinamik bir yöntem oluşturur.
public:
DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, Type owner);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), owner As Type)
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- owner
- Type
Type Dinamik yöntemin mantıksal olarak ilişkilendirildiği bir. Dinamik yöntemin türün tüm üyelerine erişimi vardır.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
-veya-
owner bir arabirim, dizi, açık bir genel tür veya genel tür veya yöntem türü parametresidir.
2.1'den eski .NET Framework ve .NET Core sürümleri: returnType, IsByReftrue döndüren bir türdür.
Örnekler
Aşağıdaki kod örneği, bir DynamicMethod türle mantıksal olarak ilişkili bir oluşturur. Bu ilişkilendirme, söz konusu türün özel üyelerine erişim verir.
Kod örneği, özel bir alana sahip Example adlı bir sınıfı, bu sınıftan türetilmiş DerivedFromExample adlı bir başka sınıfı, UseLikeStatic ve Int32 türlerinde parametrelere sahip ve Example döndüren bir Int32 adlı temsilci türünü ve UseLikeInstance türünde bir parametreye sahip ve Int32 döndüren Int32 adlı bir başka temsilci türünü tanımlar.
Örnek kod, bir DynamicMethod oluşturur ve bu, Example sınıf örneğinin özel alanını değiştirip önceki değeri döndürür.
Note
Genel olarak, sınıfların iç alanlarını değiştirmek nesne odaklı kodlama uygulaması için iyi değildir.
Örnek kod bir örneği Example oluşturur ve ardından iki temsilci oluşturur. birincisi, dinamik yöntemle aynı parametrelere sahip olan türündedir UseLikeStatic. İkincisi, ilk parametresi (UseLikeInstance türünde) eksik olan Example türündedir. Bu temsilci, CreateDelegate(Type, Object) yöntem aşırı yüklemesi kullanılarak oluşturulur; bu yöntem aşırı yüklemesinin ikinci parametresi ise bu durumda yeni oluşturulan, yeni temsilciye bağlı olan Example örneğidir. Bu temsilci her çağrıldığında, dinamik yöntem bağlı bir örnek olan Example üzerinde hareket eder.
Note
Bu, .NET Framework 2.0'da tanıtılan temsilci bağlaması için gevşetilmiş kuralların ve yeni Delegate.CreateDelegate yöntemi aşırı yüklemelerinin bir örneğidir. Daha fazla bilgi için sınıfına Delegate bakın.
Temsilci UseLikeStatic çağrılır ve temsilciye bağlı olan örneğini ExampleUseLikeInstance geçirir.
UseLikeInstance temsilci çağrılır ve her iki temsilci de Example aynı örnek üzerinde işlem yapar. İç alanın değerlerindeki değişiklikler her çağrıdan sonra görüntülenir. Son olarak, bir UseLikeInstance temsilci bir DerivedFromExample örneğine bağlıdır ve temsilci çağrıları tekrarlanır.
using System;
using System.Reflection;
using System.Reflection.Emit;
// These classes are for demonstration purposes.
//
public class Example
{
private int id = 0;
public Example(int id)
{
this.id = id;
}
public int ID { get { return id; }}
}
public class DerivedFromExample : Example
{
public DerivedFromExample(int id) : base(id) {}
}
// Two delegates are declared: UseLikeInstance treats the dynamic
// method as if it were an instance method, and UseLikeStatic
// treats the dynamic method in the ordinary fashion.
//
public delegate int UseLikeInstance(int newID);
public delegate int UseLikeStatic(Example ex, int newID);
public class Demo
{
public static void Main()
{
// This dynamic method changes the private id field. It has
// no name; it returns the old id value (return type int);
// it takes two parameters, an instance of Example and
// an int that is the new value of id; and it is declared
// with Example as the owner type, so it can access all
// members, public and private.
//
DynamicMethod changeID = new DynamicMethod(
"",
typeof(int),
new Type[] { typeof(Example), typeof(int) },
typeof(Example)
);
// Get a FieldInfo for the private field 'id'.
FieldInfo fid = typeof(Example).GetField(
"id",
BindingFlags.NonPublic | BindingFlags.Instance
);
ILGenerator ilg = changeID.GetILGenerator();
// Push the current value of the id field onto the
// evaluation stack. It's an instance field, so load the
// instance of Example before accessing the field.
ilg.Emit(OpCodes.Ldarg_0);
ilg.Emit(OpCodes.Ldfld, fid);
// Load the instance of Example again, load the new value
// of id, and store the new field value.
ilg.Emit(OpCodes.Ldarg_0);
ilg.Emit(OpCodes.Ldarg_1);
ilg.Emit(OpCodes.Stfld, fid);
// The original value of the id field is now the only
// thing on the stack, so return from the call.
ilg.Emit(OpCodes.Ret);
// Create a delegate that uses changeID in the ordinary
// way, as a static method that takes an instance of
// Example and an int.
//
UseLikeStatic uls =
(UseLikeStatic) changeID.CreateDelegate(
typeof(UseLikeStatic)
);
// Create an instance of Example with an id of 42.
//
Example ex = new Example(42);
// Create a delegate that is bound to the instance of
// of Example. This is possible because the first
// parameter of changeID is of type Example. The
// delegate has all the parameters of changeID except
// the first.
UseLikeInstance uli =
(UseLikeInstance) changeID.CreateDelegate(
typeof(UseLikeInstance),
ex
);
// First, change the value of id by calling changeID as
// a static method, passing in the instance of Example.
//
Console.WriteLine(
"Change the value of id; previous value: {0}",
uls(ex, 1492)
);
// Change the value of id again using the delegate bound
// to the instance of Example.
//
Console.WriteLine(
"Change the value of id; previous value: {0}",
uli(2700)
);
Console.WriteLine("Final value of id: {0}", ex.ID);
// Now repeat the process with a class that derives
// from Example.
//
DerivedFromExample dfex = new DerivedFromExample(71);
uli = (UseLikeInstance) changeID.CreateDelegate(
typeof(UseLikeInstance),
dfex
);
Console.WriteLine(
"Change the value of id; previous value: {0}",
uls(dfex, 73)
);
Console.WriteLine(
"Change the value of id; previous value: {0}",
uli(79)
);
Console.WriteLine("Final value of id: {0}", dfex.ID);
}
}
/* This code example produces the following output:
Change the value of id; previous value: 42
Change the value of id; previous value: 1492
Final value of id: 2700
Change the value of id; previous value: 71
Change the value of id; previous value: 73
Final value of id: 79
*/
Imports System.Reflection
Imports System.Reflection.Emit
' These classes are for demonstration purposes.
'
Public Class Example
Private _id As Integer = 0
Public Sub New(ByVal newId As Integer)
_id = newId
End Sub
Public ReadOnly Property ID() As Integer
Get
Return _id
End Get
End Property
End Class
Public Class DerivedFromExample
Inherits Example
Public Sub New(ByVal newId As Integer)
MyBase.New(newId)
End Sub
End Class
' Two delegates are declared: UseLikeInstance treats the dynamic
' method as if it were an instance method, and UseLikeStatic
' treats the dynamic method in the ordinary fashion.
'
Public Delegate Function UseLikeInstance(ByVal newID As Integer) _
As Integer
Public Delegate Function UseLikeStatic(ByVal ex As Example, _
ByVal newID As Integer) As Integer
Public Class Demo
Public Shared Sub Main()
' This dynamic method changes the private _id field. It
' has no name; it returns the old _id value (return type
' Integer); it takes two parameters, an instance of Example
' and an Integer that is the new value of _id; and it is
' declared with Example as the owner type, so it can
' access all members, public and private.
'
Dim changeID As New DynamicMethod( _
"", _
GetType(Integer), _
New Type() {GetType(Example), GetType(Integer)}, _
GetType(Example) _
)
' Get a FieldInfo for the private field '_id'.
Dim fid As FieldInfo = GetType(Example).GetField( _
"_id", _
BindingFlags.NonPublic Or BindingFlags.Instance _
)
Dim ilg As ILGenerator = changeID.GetILGenerator()
' Push the current value of the id field onto the
' evaluation stack. It's an instance field, so load the
' instance of Example before accessing the field.
ilg.Emit(OpCodes.Ldarg_0)
ilg.Emit(OpCodes.Ldfld, fid)
' Load the instance of Example again, load the new value
' of id, and store the new field value.
ilg.Emit(OpCodes.Ldarg_0)
ilg.Emit(OpCodes.Ldarg_1)
ilg.Emit(OpCodes.Stfld, fid)
' The original value of the id field is now the only
' thing on the stack, so return from the call.
ilg.Emit(OpCodes.Ret)
' Create a delegate that uses changeID in the ordinary
' way, as a static method that takes an instance of
' Example and an Integer.
'
Dim uls As UseLikeStatic = CType( _
changeID.CreateDelegate(GetType(UseLikeStatic)), _
UseLikeStatic _
)
' Create an instance of Example with an id of 42.
'
Dim ex As New Example(42)
' Create a delegate that is bound to the instance of
' of Example. This is possible because the first
' parameter of changeID is of type Example. The
' delegate has all the parameters of changeID except
' the first.
Dim uli As UseLikeInstance = CType( _
changeID.CreateDelegate( _
GetType(UseLikeInstance), _
ex), _
UseLikeInstance _
)
' First, change the value of _id by calling changeID as
' a static method, passing in the instance of Example.
'
Console.WriteLine( _
"Change the value of _id; previous value: {0}", _
uls(ex, 1492) _
)
' Change the value of _id again using the delegate
' bound to the instance of Example.
'
Console.WriteLine( _
"Change the value of _id; previous value: {0}", _
uli(2700) _
)
Console.WriteLine("Final value of _id: {0}", ex.ID)
' Now repeat the process with a class that derives
' from Example.
'
Dim dfex As New DerivedFromExample(71)
uli = CType( _
changeID.CreateDelegate( _
GetType(UseLikeInstance), _
dfex), _
UseLikeInstance _
)
Console.WriteLine( _
"Change the value of _id; previous value: {0}", _
uls(dfex, 73) _
)
Console.WriteLine( _
"Change the value of _id; previous value: {0}", _
uli(79) _
)
Console.WriteLine("Final value of _id: {0}", dfex.ID)
End Sub
End Class
' This code example produces the following output:
'
'Change the value of _id; previous value: 42
'Change the value of _id; previous value: 1492
'Final value of _id: 2700
'Change the value of _id; previous value: 71
'Change the value of _id; previous value: 73
'Final value of _id: 79'
Açıklamalar
Bu oluşturucu ile oluşturulan dinamik yöntemin, türündeki owner tüm üyelere ve internal içeren modüldeki diğer tüm türlerin public ve Friend (internal Visual Basic'te) üyelerine erişimi vardır.
Bu oluşturucu yöntem özniteliklerini MethodAttributes.Public ve MethodAttributes.Static, çağırma kuralını CallingConventions.Standardbelirtir ve tam zamanında (JIT) görünürlük denetimlerini atlamaz.
Note
Geriye dönük uyumluluk için bu oluşturucu, aşağıdaki iki koşulun ikisi de doğruysa,
Ayrıca bkz.
Şunlara uygulanır
DynamicMethod(String, Type, Type[], Module, Boolean)
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, dönüş türünü, parametre türlerini, modülü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirterek bir modül için genel olan dinamik bir yöntem oluşturur.
public:
DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m, bool skipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m, bool skipVisibility);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m, bool skipVisibility);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), m As Module, skipVisibility As Boolean)
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- skipVisibility
- Boolean
true dinamik yöntemin MSIL tarafından erişilen türler ve üyeler üzerinde JIT görünürlük denetimlerini atlayın.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
-veya-
m , dinamik yöntemler için anonim barındırma sağlayan bir modüldür.
2.1'den eski .NET Framework ve .NET Core sürümleri: returnType, IsByReftrue döndüren bir türdür.
Açıklamalar
Bu oluşturucu yöntem özniteliklerini MethodAttributes.Public ve MethodAttributes.Staticve çağırma kuralını CallingConventions.Standardbelirtir.
Bu oluşturucuyla oluşturulan dinamik yöntemin, internal içindeki modüldeki tüm türlerin public ve Friend (m Visual Basic) üyelerine erişimi vardır. JIT derleyicisinin görünürlük denetimlerinin atlanması, dinamik yöntemin diğer tüm türlerin özel ve korumalı üyelerine de erişmesini sağlar. Bu, örneğin nesneleri seri hale getirmek için kod yazarken kullanışlıdır.
Note
Geriye dönük uyumluluk için, aşağıdaki koşulların her ikisi de doğruysa, bu oluşturucu SecurityPermission bayrağını SecurityPermissionFlag.ControlEvidence ile talep eder: m, çağıran modül dışında bir modül olduğunda ve ReflectionPermission bayrağı ile ReflectionPermissionFlag.MemberAccess talebi başarısız olmuştur.
SecurityPermission talebi başarılı olursa, işleme izin verilir.
Ayrıca bkz.
Şunlara uygulanır
DynamicMethod(String, Type, Type[], Type, Boolean)
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, dönüş türünü, parametre türlerini, dinamik yöntemin mantıksal olarak ilişkilendirildiği türü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirten dinamik bir yöntem oluşturur.
public:
DynamicMethod(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner, bool skipVisibility);
public DynamicMethod(string name, Type? returnType, Type[]? parameterTypes, Type owner, bool skipVisibility);
public DynamicMethod(string name, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, returnType As Type, parameterTypes As Type(), owner As Type, skipVisibility As Boolean)
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- owner
- Type
Type Dinamik yöntemin mantıksal olarak ilişkilendirildiği bir. Dinamik yöntemin türün tüm üyelerine erişimi vardır.
- skipVisibility
- Boolean
true dinamik yöntemin MSIL tarafından erişilen türler ve üyeler üzerinde JIT görünürlük denetimlerini atlamak için; aksi takdirde , false.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
-veya-
owner bir arabirim, dizi, açık bir genel tür veya genel tür veya yöntem türü parametresidir.
2.1'den eski .NET Framework ve .NET Core sürümleri: returnType, IsByReftrue döndüren bir türdür.
Açıklamalar
Bu oluşturucu ile oluşturulan dinamik yöntemin, türündeki owner tüm üyelere ve internal içeren modüldeki diğer tüm türlerin public ve Friend (internal Visual Basic'te) üyelerine erişimi vardır. JIT derleyicisinin görünürlük denetimlerinin atlanması, dinamik yöntemin diğer tüm türlerin özel ve korumalı üyelerine de erişmesini sağlar. Bu, örneğin nesneleri seri hale getirmek için kod yazarken kullanışlıdır.
Bu oluşturucu yöntem özniteliklerini MethodAttributes.Public ve MethodAttributes.Staticve çağırma kuralını CallingConventions.Standardbelirtir.
Note
Geriye dönük uyumluluk için bu oluşturucu, aşağıdaki iki koşulun ikisi de doğruysa,
Ayrıca bkz.
Şunlara uygulanır
DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, özniteliklerini, çağırma kuralını, dönüş türünü, parametre türlerini, modülü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirterek bir modül için genel olan dinamik bir yöntem oluşturur.
public:
DynamicMethod(System::String ^ name, System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, System::Reflection::Module ^ m, bool skipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m, bool skipVisibility);
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, System.Reflection.Module m, bool skipVisibility);
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, System.Reflection.Module m, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * System.Reflection.Module * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, attributes As MethodAttributes, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), m As Module, skipVisibility As Boolean)
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- attributes
- MethodAttributes
Dinamik yöntemin MethodAttributes özniteliklerini belirten bit düzeyinde değerler birleşimi. İzin verilen tek birleşim ve PublicşeklindedirStatic.
- callingConvention
- CallingConventions
Dinamik yöntem için çağırma kuralı. olmalıdır Standard.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- skipVisibility
- Boolean
true dinamik yöntemin MSIL tarafından erişilen türler ve üyeler üzerinde JIT görünürlük denetimlerini atlamak için; aksi takdirde , false.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
-veya-
m , dinamik yöntemler için anonim barındırma sağlayan bir modüldür.
attributesve Publicdışındaki Static bayrakların birleşimidir.
-veya-
callingConvention değil Standard.
-veya-
returnType , değerini döndüren IsByReftruebir türdür.
Açıklamalar
Bu oluşturucuyla oluşturulan dinamik yöntemin, internal modülünde yer alan tüm genel ve iç türlerin public ve Friend (Visual Basic'de m) üyelerine erişimi vardır.
JIT derleyicisinin görünürlük denetimlerinin atlanması, dinamik yöntemin modüldeki ve diğer tüm derlemelerdeki diğer tüm türlerin özel ve korumalı üyelerine erişmesini sağlar. Bu, örneğin nesneleri seri hale getirmek için kod yazarken kullanışlıdır.
Note
Geriye dönük uyumluluk için, aşağıdaki koşulların her ikisi de doğruysa, bu oluşturucu SecurityPermission bayrağını SecurityPermissionFlag.ControlEvidence ile talep eder: m, çağıran modül dışında bir modül olduğunda ve ReflectionPermission bayrağı ile ReflectionPermissionFlag.MemberAccess talebi başarısız olmuştur.
SecurityPermission talebi başarılı olursa, işleme izin verilir.
Ayrıca bkz.
Şunlara uygulanır
DynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
- Kaynak:
- DynamicMethod.cs
Yöntem adını, özniteliklerini, çağırma kuralını, dönüş türünü, parametre türlerini, dinamik yöntemin mantıksal olarak ilişkilendirildiği türü ve dinamik yöntemin Microsoft ara dili (MSIL) tarafından erişilen türler ve üyeler için tam zamanında (JIT) görünürlük denetimlerinin atlanıp atlanmayacağını belirten dinamik bir yöntem oluşturur.
public:
DynamicMethod(System::String ^ name, System::Reflection::MethodAttributes attributes, System::Reflection::CallingConventions callingConvention, Type ^ returnType, cli::array <Type ^> ^ parameterTypes, Type ^ owner, bool skipVisibility);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")]
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type owner, bool skipVisibility);
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, Type owner, bool skipVisibility);
public DynamicMethod(string name, System.Reflection.MethodAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes, Type owner, bool skipVisibility);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Creating a DynamicMethod requires dynamic code.")>]
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
new System.Reflection.Emit.DynamicMethod : string * System.Reflection.MethodAttributes * System.Reflection.CallingConventions * Type * Type[] * Type * bool -> System.Reflection.Emit.DynamicMethod
Public Sub New (name As String, attributes As MethodAttributes, callingConvention As CallingConventions, returnType As Type, parameterTypes As Type(), owner As Type, skipVisibility As Boolean)
Parametreler
- name
- String
Dinamik yöntemin adı. Bu sıfır uzunluklu bir dize olabilir, ancak olamaz null.
- attributes
- MethodAttributes
Dinamik yöntemin MethodAttributes özniteliklerini belirten bit düzeyinde değerler birleşimi. İzin verilen tek birleşim ve PublicşeklindedirStatic.
- callingConvention
- CallingConventions
Dinamik yöntem için çağırma kuralı. olmalıdır Standard.
- returnType
- Type
Type Dinamik yöntemin dönüş türünü belirten veya null yöntemin dönüş türü olmayan bir nesne.
- parameterTypes
- Type[]
Dinamik yöntemin Type parametre türlerini belirten veya null yöntemin parametresi yoksa bir nesne dizisi.
- owner
- Type
Type Dinamik yöntemin mantıksal olarak ilişkilendirildiği bir. Dinamik yöntemin türün tüm üyelerine erişimi vardır.
- skipVisibility
- Boolean
true dinamik yöntemin MSIL tarafından erişilen türler ve üyeler üzerinde JIT görünürlük denetimlerini atlamak için; aksi takdirde , false.
- Öznitelikler
Özel durumlar
öğesi parameterTypes veya nullşeklindedirVoid.
-veya-
owner bir arabirim, dizi, açık bir genel tür veya genel tür veya yöntem türü parametresidir.
attributesve Publicdışındaki Static bayrakların birleşimidir.
-veya-
callingConvention değil Standard.
-veya-
returnType , değerini döndüren IsByReftruebir türdür.
Açıklamalar
Dinamik yöntem, türünü owneriçeren modül için geneldir. türünün ownertüm üyelerine erişimi vardır.
Bu oluşturucuyla oluşturulan dinamik yöntem, owner türünün tüm üyelerine ve internal içeren modülde yer alan tüm türlerin public ve Friend (Visual Basic'de owner) üyelerine erişebilir. JIT derleyicisinin görünürlük denetimlerinin atlanması, dinamik yöntemin diğer tüm türlerin özel ve korumalı üyelerine de erişmesini sağlar. Bu, örneğin nesneleri seri hale getirmek için kod yazarken kullanışlıdır.
Note
Geriye dönük uyumluluk için bu oluşturucu, aşağıdaki iki koşulun ikisi de doğruysa,