DynamicMethod.Invoke Yöntem

Tanım

Belirtilen kültür bilgileriyle belirtilen bağlayıcının kısıtlamaları altında belirtilen parametreleri kullanarak dinamik yöntemi çağırır.

public:
 override System::Object ^ Invoke(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ parameters, System::Globalization::CultureInfo ^ culture);
public override object? Invoke (object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? parameters, System.Globalization.CultureInfo? culture);
public override object Invoke (object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture);
override this.Invoke : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Overrides Function Invoke (obj As Object, invokeAttr As BindingFlags, binder As Binder, parameters As Object(), culture As CultureInfo) As Object

Parametreler

obj
Object

Bu parametre statik olduklarından dinamik yöntemler için yoksayılır. null belirtin.

invokeAttr
BindingFlags

Değerlerin bit düzeyinde birleşimi BindingFlags .

binder
Binder

Binder Bağlamayı, bağımsız değişken türlerini zorlamayı, üyeleri çağırmayı ve nesneleri yansıma aracılığıyla almayı MemberInfo sağlayan nesne. ise bindernull, varsayılan bağlayıcı kullanılır. Diğer ayrıntılar için bkz. Binder.

parameters
Object[]

Bağımsız değişken listesi. Bu, çağrılacak yöntemin parametreleriyle aynı sayı, sıra ve türe sahip bir bağımsız değişken dizisidir. Parametre yoksa bu parametre olmalıdır null.

culture
CultureInfo

Türlerin CultureInfo zorlamasını idare etmek için kullanılan bir örneği. Bu isenullCultureInfo, geçerli iş parçacığı için kullanılır. Örneğin, 1000'i temsil eden bir String değeri doğru bir Double değere dönüştürmek için bu bilgi gereklidir, çünkü 1000 farklı kültürler tarafından farklı temsil edilir.

Döndürülenler

Object Çağrılan yöntemin dönüş değerini içeren.

Özel durumlar

VarArgs Çağırma kuralı desteklenmiyor.

içindeki parameters öğe sayısı, dinamik yöntemdeki parametre sayısıyla eşleşmiyor.

bir veya daha fazla öğesinin parameters türü, dinamik yöntemin karşılık gelen parametresinin türüyle eşleşmiyor.

Dinamik yöntem bir modülle ilişkilendirilir, anonim olarak barındırılmaz ve olarak ayarlanmış olarak skipVisibility oluşturulur, ancak dinamik yöntem veya internal (Friend Visual Basic'te) olmayan public üyelere erişir.false

-veya-

Dinamik yöntem anonim olarak barındırılır ve olarak ayarlanmış falseolarak skipVisibility oluşturulur, ancak olmayan publicüyelere erişir.

-veya-

Dinamik yöntem, doğrulayınamayan kod içeriyor. için DynamicMethodaçıklamalar bölümündeki "Doğrulama" bölümüne bakın.

Örnekler

Aşağıdaki kod örneği, US-English kültürünü kullanarak tam bağlamaya sahip bir dinamik yöntem çağırır. Bu kod örneği, sınıfı için DynamicMethod sağlanan daha büyük bir örneğin parçasıdır.

Console::WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
array<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 value-type arguments
// must be boxed.
Object^ objRet = hello->Invoke(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
Console::WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// 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 value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
' 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 value-type arguments
' must be boxed.
Dim objRet As Object = hello.Invoke(Nothing, _
    BindingFlags.ExactBinding, Nothing, invokeArgs, _
    New CultureInfo("en-us"))
Console.WriteLine("hello.Invoke returned: {0}", objRet)

Açıklamalar

Listelenen özel durumlara ek olarak, çağıran kod dinamik yöntem tarafından oluşan özel durumları yakalamak için hazırlanmalıdır.

Bir dinamik yöntemi yöntemi tarafından CreateDelegate oluşturulan bir temsilciyle yürütmek, yöntemiyle Invoke yürütmekten daha verimlidir.

Invoke yöntemini veya yöntemini çağırmak CreateDelegate dinamik yöntemi tamamlar. Parametre tanımlarını değiştirme veya daha fazla Microsoft ara dil (MSIL) yayma gibi dinamik yöntemi değiştirme girişimleri yoksayılır; özel durum oluşturmaz.

Tüm dinamik yöntemler statiktir, bu nedenle obj parametre her zaman yoksayılır. Bir dinamik yöntemi bir örnek yöntemiymiş gibi işlemek için bir nesne örneğini CreateDelegate(Type, Object) alan aşırı yüklemeyi kullanın.

Dinamik yöntemin parametresi yoksa değeri parameters olmalıdır null. Aksi takdirde parametre dizisindeki öğelerin sayısı, türü ve sırası, dinamik yöntemin parametre sayısı, türü ve sırası ile aynı olmalıdır.

Not

Bu yöntem aşırı yüklemesi, sınıfından MethodBase devralınan Invoke(Object, Object[]) yöntem aşırı yüklemesi tarafından çağrılır, bu nedenle yukarıdaki açıklamalar her iki aşırı yüklemeye de uygulanır.

Bu yöntem doğrudan izin talep etmez, ancak dinamik yöntemin çağrılması, yönteme bağlı olarak güvenlik taleplerine neden olabilir. Örneğin, parametresi olarak ayarlanmış şekilde oluşturulan anonim olarak barındırılan restrictedSkipVisibility dinamik yöntemler için herhangi bir talepte bulunulmamaktadır false. Öte yandan, hedef derlemenin gizli bir üyesine erişebilmesi için true olarak ayarlanmış bir yöntem restrictedSkipVisibility oluşturursanız, yöntem hedef derlemenin izinlerine ve ReflectionPermission bayrağına sahip ReflectionPermissionFlag.MemberAccess bir isteğe neden olur.

Not

.NET Framework 2.0'a başlamadan önce bu yöntem bayrağıyla birlikte MemberAccess gerekiyorduReflectionPermission.

Şunlara uygulanır

Ayrıca bkz.