Aracılığıyla paylaş


Type.InvokeMember Yöntem

Tanım

Geçerli Typeöğesinin belirli bir üyesini çağırır.

Aşırı Yüklemeler

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesiyle eşleşen belirtilen üyeyi çağırır.

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi ve kültürüyle eşleşen belirtilen üyeyi çağırır.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi, değiştiriciler ve kültürle eşleşen belirtilen üyeyi çağırır.

InvokeMember(String, BindingFlags, Binder, Object, Object[])

Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs

Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesiyle eşleşen belirtilen üyeyi çağırır.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object

Parametreler

name
String

Çağrılacak oluşturucunun, yöntemin, özelliğin veya alan üyesinin adını içeren dize.

-veya-

Varsayılan üyeyi çağırmak için boş bir dize ("").

-veya-

Üyeler için IDispatch DispID'yi temsil eden bir dize, örneğin "[DispID=3]".

invokeAttr
BindingFlags

Aramanın nasıl yürütüleceğini belirten numaralandırma değerlerinin bit düzeyinde birleşimi. Erişim , , , , , GetFieldvb. gibi Publicbir BindingFlags erişim InvokeMethodolabilir. PrivateNonPublic Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.PublicBindingFlags.Static | BindingFlags.Instance | .

binder
Binder

Aşırı yüklenmiş yöntem seçimi, bağımsız değişken türlerinin uygulatılması ve yansıtma yoluyla bir üyenin çağrılması işlemlerini içerebilen; özellikler kümesini tanımlayan ve bağlama işlemine olanak veren bir nesne.

-veya-

kullanmak DefaultBinderiçin null başvuru (NothingVisual Basic'te). Değişken bağımsız değişkenleriyle yöntem aşırı yüklemelerini başarıyla çağırmak için bir Binder nesneyi açıkça tanımlamanın gerekebileceğini unutmayın.

target
Object

Belirtilen üyenin çağrıldığı nesne.

args
Object[]

Çağrılacak üyeye geçirilmesi için bağımsız değişkenleri içeren bir dizi.

Döndürülenler

Çağrılan üyenin dönüş değerini temsil eden bir nesne.

Uygulamalar

Özel durumlar

invokeAttr ve içermez CreateInstancenamenull.

invokeAttr geçerli BindingFlags bir öznitelik değil.

-veya-

invokeAttr şu bağlama bayraklarından birini içermez: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyveya SetProperty.

-veya-

invokeAttr, , GetField, SetFieldGetPropertyveya SetPropertyile InvokeMethodbirlikte içerirCreateInstance.

-veya-

invokeAttrhem SetFieldhem de GetField içerir.

-veya-

invokeAttrhem SetPropertyhem de GetProperty içerir.

-veya-

invokeAttrveya SetPropertyile birlikte SetField içerirInvokeMethod.

-veya-

invokeAttr içerir SetField ve args birden fazla öğeye sahiptir.

-veya-

Bu yöntem bir COM nesnesinde çağrılır ve şu bağlama bayraklarından biri içinde geçirilmemiştir: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyveya BindingFlags.PutRefDispProperty.

-veya-

Adlandırılmış parametre dizilerinden biri olan nullbir dize içerir.

Belirtilen üye bir sınıf başlatıcısı.

Alan veya özellik bulunamıyor.

içindeki argsbağımsız değişkenlerle eşleşen hiçbir yöntem bulunamadı.

-veya-

Geçerli Type nesne, açık tür parametreleri içeren bir türü temsil eder, ContainsGenericParameters yani döndürür true.

Belirtilen üye üzerinde targetçağrılamıyor.

Bağlama ölçütleri ile eşleşen birden fazla yöntem vardır.

.NET Compact Framework şu anda bu yöntemi desteklemiyor.

ile name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle yöntemin ContainsGenericParameters özelliği döndürür true.

Örnekler

Aşağıdaki örnek, bir türün üyelerine erişmek için kullanır InvokeMember .

using namespace System;
using namespace System::Reflection;

// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
   Int32 myField;

public:
   MyType( interior_ptr<Int32> x )
   {
       *x *= 5;
   }

   virtual String^ ToString() override
   {
      return myField.ToString();
   }

   property Int32 MyProp 
   {
      Int32 get()
      {
         return myField;
      }

      void set( Int32 value )
      {
         if ( value < 1 )
                  throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );

         myField = value;
      }
   }
};

int main()
{
   Type^ t = MyType::typeid;

   // Create an instance of a type.
   array<Object^>^args = {8};
   Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
   Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
   Console::WriteLine( "Type: {0}", obj->GetType() );
   Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );

   // Read and write to a field.
   array<Object^>^obj5 = {5};
   t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
   Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
   Console::WriteLine( "myField: {0}", v );

   // Call a method.
   String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
   Console::WriteLine( "ToString: {0}", s );

   // Read and write a property. First, attempt to assign an
   // invalid value; then assign a valid value; finally, get
   // the value.
   try
   {
      // Assign the value zero to MyProp. The Property Set 
      // throws an exception, because zero is an invalid value.
      // InvokeMember catches the exception, and throws 
      // TargetInvocationException. To discover the real cause
      // you must catch TargetInvocationException and examine
      // the inner exception. 
      array<Object^>^obj0 = {(int^)0};
      t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
   }
   catch ( TargetInvocationException^ e ) 
   {
      // If the property assignment failed for some unexpected
      // reason, rethrow the TargetInvocationException.
      if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
            throw;

      Console::WriteLine( "An invalid value was assigned to MyProp." );
   }

   array<Object^>^obj2 = {2};
   t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
   v =  safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
   Console::WriteLine( "MyProp: {0}", v );
}
using System;
using System.Reflection;

// This sample class has a field, constructor, method, and property.
class MyType
{
    Int32 myField;
    public MyType(ref Int32 x) {x *= 5;}
    public override String ToString() {return myField.ToString();}
    public Int32 MyProp
    {
        get {return myField;}
        set
        {
            if (value < 1)
                throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
            myField = value;
        }
    }
}

class MyApp
{
    static void Main()
    {
        Type t = typeof(MyType);
        // Create an instance of a type.
        Object[] args = new Object[] {8};
        Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
        Object obj = t.InvokeMember(null,
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
        Console.WriteLine("Type: " + obj.GetType().ToString());
        Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);

        // Read and write to a field.
        t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
        Int32 v = (Int32) t.InvokeMember("myField",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
        Console.WriteLine("myField: " + v);

        // Call a method.
        String s = (String) t.InvokeMember("ToString",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
        Console.WriteLine("ToString: " + s);

        // Read and write a property. First, attempt to assign an
        // invalid value; then assign a valid value; finally, get
        // the value.
        try
        {
            // Assign the value zero to MyProp. The Property Set
            // throws an exception, because zero is an invalid value.
            // InvokeMember catches the exception, and throws
            // TargetInvocationException. To discover the real cause
            // you must catch TargetInvocationException and examine
            // the inner exception.
            t.InvokeMember("MyProp",
                BindingFlags.DeclaredOnly |
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
        }
        catch (TargetInvocationException e)
        {
            // If the property assignment failed for some unexpected
            // reason, rethrow the TargetInvocationException.
            if (e.InnerException.GetType() !=
                typeof(ArgumentOutOfRangeException))
                throw;
            Console.WriteLine("An invalid value was assigned to MyProp.");
        }
        t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
        v = (Int32) t.InvokeMember("MyProp",
            BindingFlags.DeclaredOnly |
            BindingFlags.Public | BindingFlags.NonPublic |
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
        Console.WriteLine("MyProp: " + v);
    }
}
open System
open System.Reflection

// This sample class has a field, constructor, method, and property.
type MyType() =
    let mutable myField = 0

    member _.MyType(x: int byref) =
        x <- x * 5
    
    override _.ToString() =
        string myField
    
    member _.MyProp
        with get () = myField
        and set value =
            if value < 1 then
                raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
            myField <- value

let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."

// Read and write to a field.
t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"

// Call a method.
let s = t.InvokeMember("ToString",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"ToString: {s}"

// Read and write a property. First, attempt to assign an
// invalid value then assign a valid value finally, get
// the value.
try
    // Assign the value zero to MyProp. The Property Set
    // throws an exception, because zero is an invalid value.
    // InvokeMember catches the exception, and throws
    // TargetInvocationException. To discover the real cause
    // you must catch TargetInvocationException and examine
    // the inner exception.
    t.InvokeMember("MyProp",
        BindingFlags.DeclaredOnly |||
        BindingFlags.Public ||| BindingFlags.NonPublic |||
        BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
    // If the property assignment failed for some unexpected
    // reason, rethrow the TargetInvocationException.
    if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
        reraise ()
    printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
Imports System.Reflection

' This sample class has a field, constructor, method, and property.
Class MyType
    Private myField As Int32

    Public Sub New(ByRef x As Int32)
        x *= 5
    End Sub

    Public Overrides Function ToString() As [String]
        Return myField.ToString()
    End Function 'ToString

    Public Property MyProp() As Int32
        Get
            Return myField
        End Get
        Set(ByVal Value As Int32)
            If Value < 1 Then
                Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
            End If
            myField = Value
        End Set
    End Property
End Class

Class MyApp

    Shared Sub Main()
        Dim t As Type = GetType(MyType)
        ' Create an instance of a type.
        Dim args() As [Object] = {8}
        Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
        Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
        Console.WriteLine("Type: {0}", obj.GetType().ToString())
        Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))

        ' Read and write to a field.
        t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
        Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
        Console.WriteLine("myField: {0}", v)

        ' Call a method.
        Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
        Console.WriteLine("ToString: {0}", s)

        ' Read and write a property. First, attempt to assign an
        ' invalid value; then assign a valid value; finally, get
        ' the value.
        Try
            ' Assign the value zero to MyProp. The Property Set 
            ' throws an exception, because zero is an invalid value.
            ' InvokeMember catches the exception, and throws 
            ' TargetInvocationException. To discover the real cause
            ' you must catch TargetInvocationException and examine
            ' the inner exception. 
            t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
        Catch e As TargetInvocationException
            ' If the property assignment failed for some unexpected
            ' reason, rethrow the TargetInvocationException.
            If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
                Throw
            End If
            Console.WriteLine("An invalid value was assigned to MyProp.")
        End Try
        t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
        v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
        Console.WriteLine("MyProp: {0}", v)
    End Sub
End Class

Açıklamalar

Not

Genel bir yöntemi çağırmak için kullanamazsınız InvokeMember .

Aşağıdaki BindingFlags filtre bayrakları, aramaya hangi üyelerin dahil edilebileceğini tanımlamak için kullanılabilir:

  • Genel üyeleri aramaya dahil etmek için belirtin BindingFlags.Public .

  • Genel olmayan üyeleri (özel ve korumalı üyeler) aramaya dahil etmek için belirtin BindingFlags.NonPublic .

  • Statik üyeleri hiyerarşiye dahil etmek için belirtin BindingFlags.FlattenHierarchy .

Aramanın çalışma şeklini değiştirmek için aşağıdaki BindingFlags değiştirici bayraklar kullanılabilir:

  • BindingFlags.IgnoreCase öğesinin büyük/küçük harf durumunu nameyoksaymak için.

  • BindingFlags.DeclaredOnly yalnızca üzerinde Typebildirilen üyeleri aramak için yalnızca devralınan üyeleri değil.

Üyeyle gerçekleştirilecek eylemi belirtmek için aşağıdaki BindingFlags çağırma bayrakları kullanılabilir:

  • CreateInstance bir oluşturucu çağırmak için. name yoksayılır. Diğer çağırma bayraklarıyla geçerli değil.

  • InvokeMethod bir yöntemi çağırmak için, ancak bir oluşturucuyu veya tür başlatıcıyı çağırmaz. veya SetPropertyile SetField geçerli değil. kendi kendine belirtilirse InvokeMethod , BindingFlags.Public, BindingFlags.Instanceve BindingFlags.Static otomatik olarak eklenir.

  • GetField bir alanın değerini almak için. ile SetFieldgeçerli değil.

  • SetField bir alanın değerini ayarlamak için. ile GetFieldgeçerli değil.

  • GetProperty bir özellik almak için. ile SetPropertygeçerli değil.

  • SetProperty bir özellik ayarlamak için. ile GetPropertygeçerli değil.

Daha fazla bilgi edinmek için bkz. System.Reflection.BindingFlags.

Aşağıdaki koşulların her ikisi de doğruysa bir yöntem çağrılır:

  • Yöntem bildirimindeki parametre sayısı dizideki bağımsız değişkenlerin sayısına eşittir (üyede args varsayılan bağımsız değişkenler tanımlanmadığı ve BindingFlags.OptionalParamBinding belirtilmediği sürece).

  • Her bağımsız değişkenin türü bağlayıcı tarafından parametrenin türüne dönüştürülebilir.

Bağlayıcı tüm eşleşen yöntemleri bulur. Bu yöntemler istenen bağlama türüne (BindingFlags değerler InvokeMethod, GetPropertyvb.) göre bulunur. Yöntem kümesi ada, bağımsız değişken sayısına ve bağlayıcıda tanımlanan bir arama değiştirici kümesine göre filtrelenmiştir.

Yöntem seçildikten sonra çağrılır. Erişilebilirlik bu noktada denetlendi. Arama, yöntemiyle ilişkili erişilebilirlik özniteliğine göre hangi yöntem kümesinin aranabileceğini denetleyebilir. Binder.BindToMethod sınıfının yöntemiBinder, çağrılacak yöntemi seçmekle sorumludur. Varsayılan bağlayıcı en belirli eşleşmeyi seçer.

Tam olarak güvenilen kod için erişim kısıtlamaları yoksayılır; yani özel oluşturucular, yöntemler, alanlar ve özellikler koda tam olarak güvenildiğinde üzerinden System.Reflection erişilebilir ve çağrılabilir.

belirterek BindingFlags.SetFieldbir alanı belirli bir değere ayarlamak için kullanabilirsinizType.InvokeMember. Örneğin, C sınıfında F adlı bir genel örnek alanı ayarlamak istiyorsanız ve F bir Stringise, aşağıdaki gibi bir kod kullanabilirsiniz:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});

F bir String[]ise, aşağıdaki gibi bir kod kullanabilirsiniz:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});

F alanını bu yeni diziye başlatacaktır. Değerin dizinini ve ardından aşağıdaki gibi bir kod kullanarak sonraki değeri sağlayarak dizide bir konum ayarlamak için de kullanabilirsiniz Type.InvokeMember :

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});

Bu, F'nin tuttuğu dizideki "z" dizesini "b" dizesi olarak değiştirir.

Bir IDispatch üyeyi çağırdığınızda, "[DispID=##]" dize biçimini kullanarak üye adı yerine DispID değerini belirtebilirsiniz. Örneğin, MyComMethod'un DispID değeri 3 ise, "MyComMethod" yerine "[DispID=3]" dizesini belirtebilirsiniz. Üyeyi DispID ile çağırmak, üyeyi ada göre aramaktan daha hızlıdır. Karmaşık toplama senaryolarında dispID bazen istenen üyeyi çağırmanın tek yoludur.

Not

.NET Framework 2.0 Service Pack 1'den başlayarak bu yöntem, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın izin kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)

Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.

Ayrıca bkz.

Şunlara uygulanır

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs

Belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi ve kültürüyle eşleşen belirtilen üyeyi çağırır.

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object

Parametreler

name
String

Çağrılacak oluşturucunun, yöntemin, özelliğin veya alan üyesinin adını içeren dize.

-veya-

Varsayılan üyeyi çağırmak için boş bir dize ("").

-veya-

Üyeler için IDispatch DispID'yi temsil eden bir dize, örneğin "[DispID=3]".

invokeAttr
BindingFlags

Aramanın nasıl yürütüleceğini belirten numaralandırma değerlerinin bit düzeyinde birleşimi. Erişim , , , , , GetFieldvb. gibi Publicbir BindingFlags erişim InvokeMethodolabilir. PrivateNonPublic Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.PublicBindingFlags.Static | BindingFlags.Instance | .

binder
Binder

Aşırı yüklenmiş yöntem seçimi, bağımsız değişken türlerinin uygulatılması ve yansıtma yoluyla bir üyenin çağrılması işlemlerini içerebilen; özellikler kümesini tanımlayan ve bağlama işlemine olanak veren bir nesne.

-veya-

kullanmak DefaultBinderiçin null başvuru (NothingVisual Basic'te). Değişken bağımsız değişkenleriyle yöntem aşırı yüklemelerini başarıyla çağırmak için bir Binder nesneyi açıkça tanımlamanın gerekebileceğini unutmayın.

target
Object

Belirtilen üyenin çağrıldığı nesne.

args
Object[]

Çağrılacak üyeye geçirilmesi için bağımsız değişkenleri içeren bir dizi.

culture
CultureInfo

Kullanılacak genelleştirme yerel ayarını temsil eden nesne. Bu, bir sayısalı StringDoubleöğesine dönüştürme gibi yerel ayara özgü dönüştürmeler için gerekli olabilir.

-veya-

Geçerli iş parçacığının kullanmak için null başvuru (Nothing Visual Basic'te CultureInfo).

Döndürülenler

Çağrılan üyenin dönüş değerini temsil eden bir nesne.

Uygulamalar

Özel durumlar

invokeAttr ve içermez CreateInstancenamenull.

invokeAttr geçerli BindingFlags bir öznitelik değil.

-veya-

invokeAttr şu bağlama bayraklarından birini içermez: InvokeMethod, CreateInstance, GetField, SetField, GetPropertyveya SetProperty.

-veya-

invokeAttr, , GetField, SetFieldGetPropertyveya SetPropertyile InvokeMethodbirlikte içerirCreateInstance.

-veya-

invokeAttrhem SetFieldhem de GetField içerir.

-veya-

invokeAttrhem SetPropertyhem de GetProperty içerir.

-veya-

invokeAttrveya SetPropertyile birlikte SetField içerirInvokeMethod.

-veya-

invokeAttr içerir SetField ve args birden fazla öğeye sahiptir.

-veya-

Bu yöntem bir COM nesnesinde çağrılır ve şu bağlama bayraklarından biri içinde geçirilmemiştir: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyveya BindingFlags.PutRefDispProperty.

-veya-

Adlandırılmış parametre dizilerinden biri olan nullbir dize içerir.

Belirtilen üye bir sınıf başlatıcısı.

Alan veya özellik bulunamıyor.

içindeki argsbağımsız değişkenlerle eşleşen hiçbir yöntem bulunamadı.

-veya-

Geçerli Type nesne, açık tür parametreleri içeren bir türü temsil eder, ContainsGenericParameters yani döndürür true.

Belirtilen üye üzerinde targetçağrılamıyor.

Bağlama ölçütleri ile eşleşen birden fazla yöntem vardır.

ile name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle yöntemin ContainsGenericParameters özelliği döndürür true.

Açıklamalar

Varsayılan bağlayıcı (cultureparametresi) işlemese CultureInfo de soyut sınıfını System.Reflection.Binder kullanarak işlemini culturegerçekleştiren özel bir bağlayıcı yazabilirsiniz.

Not

Genel bir yöntemi çağırmak için kullanamazsınız InvokeMember .

Aşağıdaki BindingFlags filtre bayrakları, aramaya hangi üyelerin dahil edilebileceğini tanımlamak için kullanılabilir:

  • Genel üyeleri aramaya dahil etmek için belirtin BindingFlags.Public .

  • Genel olmayan üyeleri (özel, iç ve korumalı üyeler) aramaya dahil etmek için belirtin BindingFlags.NonPublic .

  • Statik üyeleri hiyerarşiye dahil etmek için belirtin BindingFlags.FlattenHierarchy .

Aramanın çalışma şeklini değiştirmek için aşağıdaki BindingFlags değiştirici bayraklar kullanılabilir:

  • BindingFlags.IgnoreCase öğesinin büyük/küçük harf durumunu nameyoksaymak için.

  • BindingFlags.DeclaredOnly yalnızca üzerinde Typebildirilen üyeleri aramak için yalnızca devralınan üyeleri değil.

Üyeyle gerçekleştirilecek eylemi belirtmek için aşağıdaki BindingFlags çağırma bayrakları kullanılabilir:

  • CreateInstance bir oluşturucu çağırmak için. name yoksayılır. Diğer çağırma bayraklarıyla geçerli değil.

  • InvokeMethod bir yöntemi çağırmak için, ancak bir oluşturucuyu veya tür başlatıcıyı çağırmaz. veya SetPropertyile SetField geçerli değil. kendi kendine belirtilirse InvokeMethod , BindingFlags.Public, BindingFlags.Instanceve BindingFlags.Static otomatik olarak eklenir.

  • GetField bir alanın değerini almak için. ile SetFieldgeçerli değil.

  • SetField bir alanın değerini ayarlamak için. ile GetFieldgeçerli değil.

  • GetProperty bir özellik almak için. ile SetPropertygeçerli değil.

  • SetProperty bir özellik ayarlamak için. ile GetPropertygeçerli değil.

Daha fazla bilgi edinmek için bkz. System.Reflection.BindingFlags.

Aşağıdaki koşulların her ikisi de doğruysa bir yöntem çağrılır:

  • Yöntem bildirimindeki parametre sayısı dizideki bağımsız değişkenlerin sayısına eşittir (üyede args varsayılan bağımsız değişkenler tanımlanmadığı ve BindingFlags.OptionalParamBinding belirtilmediği sürece).

  • Her bağımsız değişkenin türü bağlayıcı tarafından parametrenin türüne dönüştürülebilir.

Bağlayıcı tüm eşleşen yöntemleri bulur. Bu yöntemler istenen bağlama türüne (BindingFlags değerler InvokeMethod, GetPropertyvb.) göre bulunur. Yöntem kümesi ada, bağımsız değişken sayısına ve bağlayıcıda tanımlanan bir arama değiştirici kümesine göre filtrelenmiştir.

Yöntem seçildikten sonra çağrılır. Erişilebilirlik bu noktada denetlendi. Arama, yöntemiyle ilişkili erişilebilirlik özniteliğine göre hangi yöntem kümesinin aranabileceğini denetleyebilir. Binder.BindToMethod sınıfının yöntemiBinder, çağrılacak yöntemi seçmekle sorumludur. Varsayılan bağlayıcı en belirli eşleşmeyi seçer.

Tam olarak güvenilen kod için erişim kısıtlamaları yoksayılır; yani özel oluşturucular, yöntemler, alanlar ve özellikler koda tam olarak güvenildiğinde Yansıma aracılığıyla erişilebilir ve çağrılabilir.

belirterek BindingFlags.SetFieldbir alanı belirli bir değere ayarlamak için kullanabilirsinizType.InvokeMember. Örneğin, C sınıfında F adlı bir genel örnek alanı ayarlamak istiyorsanız ve F ise aşağıdaki gibi bir String kod kullanabilirsiniz:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);

F bir String[]ise, aşağıdaki gibi bir kod kullanabilirsiniz:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);

F alanını bu yeni diziye başlatacaktır. Değerin dizinini ve ardından aşağıdaki gibi bir kod kullanarak sonraki değeri sağlayarak dizide bir konum ayarlamak için de kullanabilirsiniz Type.InvokeMember :

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);

Bu, F'nin tuttuğu dizideki "z" dizesini "b" dizesi olarak değiştirir.

Bir IDispatch üyeyi çağırdığınızda, "[DispID=##]" dize biçimini kullanarak üye adı yerine DispID değerini belirtebilirsiniz. Örneğin, MyComMethod'un DispID değeri 3 ise, "MyComMethod" yerine "[DispID=3]" dizesini belirtebilirsiniz. Üyeyi DispID ile çağırmak, üyeyi ada göre aramaktan daha hızlıdır. Karmaşık toplama senaryolarında dispID bazen istenen üyeyi çağırmanın tek yoludur.

Not

.NET Framework 2.0 Service Pack 1'den başlayarak, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın verme kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda bu yöntem genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)

Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.

Ayrıca bkz.

Şunlara uygulanır

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Kaynak:
Type.cs
Kaynak:
Type.cs
Kaynak:
Type.cs

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen bağlama kısıtlamalarını kullanarak ve belirtilen bağımsız değişken listesi, değiştiriciler ve kültürle eşleşen belirtilen üyeyi çağırır.

public:
 abstract System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
public abstract object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public abstract object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public MustOverride Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

Parametreler

name
String

Çağrılacak oluşturucunun, yöntemin, özelliğin veya alan üyesinin adını içeren dize.

-veya-

Varsayılan üyeyi çağırmak için boş bir dize ("").

-veya-

Üyeler için IDispatch , DispID'yi temsil eden bir dize, örneğin "[DispID=3]".

invokeAttr
BindingFlags

Aramanın nasıl yürütüleceğini belirten numaralandırma değerlerinin bit düzeyinde birleşimi. Erişim , , NonPublic, PrivateInvokeMethod, , GetFieldvb. gibi Publicbir BindingFlags erişim olabilir. Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.PublicBindingFlags.Static | BindingFlags.Instance | .

binder
Binder

Aşırı yüklenmiş yöntem seçimi, bağımsız değişken türlerinin uygulatılması ve yansıtma yoluyla bir üyenin çağrılması işlemlerini içerebilen; özellikler kümesini tanımlayan ve bağlama işlemine olanak veren bir nesne.

-veya-

kullanmak DefaultBinderiçin null başvuru (Visual Basic'te Hiçbir şey). Değişken bağımsız değişkenleriyle yöntem aşırı yüklemelerini başarıyla çağırmak için bir Binder nesneyi açıkça tanımlamanın gerekebileceğini unutmayın.

target
Object

Belirtilen üyenin çağrıldığı nesne.

args
Object[]

Çağırmak için üyeye geçirilmesi gereken bağımsız değişkenleri içeren bir dizi.

modifiers
ParameterModifier[]

Dizideki ParameterModifier ilgili öğeyle args ilişkili öznitelikleri temsil eden bir nesne dizisi. Parametrenin ilişkili öznitelikleri üyenin imzasında depolanır.

Varsayılan bağlayıcı bu parametreyi yalnızca bir COM bileşeni çağırırken işler.

culture
CultureInfo

CultureInfo Kullanılacak genelleştirme yerel ayarını temsil eden nesne; sayısal dizeyi Double'a dönüştürmek gibi yerel ayara özgü dönüştürmeler için gerekli olabilir.

-veya-

Geçerli iş parçacığının kullanmak için null başvuru (Nothing Visual Basic'te CultureInfo).

namedParameters
String[]

Dizideki değerlerin args geçirildiği parametrelerin adlarını içeren bir dizi.

Döndürülenler

Çağrılan üyenin dönüş değerini temsil eden bir nesne.

Uygulamalar

Özel durumlar

invokeAttr içermez CreateInstance ve name şeklindedir null.

args ve modifiers aynı uzunlukta değildir.

-veya-

invokeAttr geçerli BindingFlags bir öznitelik değil.

-veya-

invokeAttr şu bağlama bayraklarından birini içermez: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, veya SetProperty.

-veya-

invokeAttr, , GetField, SetFieldGetPropertyveya SetPropertyile birlikte InvokeMethodiçerirCreateInstance.

-veya-

invokeAttrhem SetFieldhem de GetField içerir.

-veya-

invokeAttrhem SetPropertyhem de GetProperty içerir.

-veya-

invokeAttrveya SetPropertyile birlikte SetField içerirInvokeMethod.

-veya-

invokeAttr içerir SetField ve args birden fazla öğeye sahiptir.

-veya-

Adlandırılmış parametre dizisi, bağımsız değişken dizisinden daha büyüktür.

-veya-

Bu yöntem bir COM nesnesinde çağrılır ve şu bağlama bayraklarından biri içinde geçirilmemiştir: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispPropertyveya BindingFlags.PutRefDispProperty.

-veya-

Adlandırılmış parametre dizilerinden biri olan nullbir dize içerir.

Belirtilen üye bir sınıf başlatıcısı.

Alan veya özellik bulunamıyor.

içindeki argsbağımsız değişkenlerle eşleşen hiçbir yöntem bulunamıyor.

-veya-

bağımsız değişken adlarının içinde sağlandığında namedParametershiçbir üye bulunamaz.

-veya-

Geçerli Type nesne, açık tür parametrelerini içeren bir türü temsil eder, yani ContainsGenericParameters döndürür true.

Belirtilen üye üzerinde targetçağrılamıyor.

Bağlama ölçütleri ile eşleşen birden fazla yöntem vardır.

tarafından name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle, yöntemin ContainsGenericParameters özelliği döndürür true.

Açıklamalar

InvokeMember bir oluşturucu üyesini veya yöntem üyesini çağırır, bir özellik üyesi alır veya ayarlar, bir veri alanı üyesi alır veya ayarlar ya da bir dizi üyesinin öğesini alır veya ayarlar.

Not

Genel bir yöntemi çağırmak için kullanamazsınız InvokeMember .

Bir IDispatch üyeyi çağırdığınızda, "[DispID=##]" dize biçimini kullanarak üye adı yerine DispID belirtebilirsiniz. Örneğin, MyComMethod'un DispID değeri 3 ise, "MyComMethod" yerine "[DispID=3]" dizesini belirtebilirsiniz. Bir üyeyi DispID ile çağırmak, üyeyi ada göre aramaktan daha hızlıdır. Karmaşık toplama senaryolarında DispID bazen istenen üyeyi çağırmanın tek yoludur.

Varsayılan bağlayıcı veya işlemiyor ParameterModifier olsa da CultureInfo (modifiersve culture parametreleri), ve cultureişlemlerini gerçekleştiren modifiers özel bir bağlayıcı yazmak için soyut System.Reflection.Binder sınıfını kullanabilirsiniz. ParameterModifier yalnızca COM birlikte çalışma aracılığıyla çağrılırken kullanılır ve yalnızca başvuru tarafından geçirilen parametreler işlenir.

Dizideki namedParameters her parametre, dizideki ilgili öğedeki args değeri alır. uzunluğu değerinden argsnamedParametersbüyükse, kalan bağımsız değişken değerleri sırayla geçirilir.

Dizi, namedParameters bir giriş dizisindeki bağımsız değişkenlerin sırasını değiştirmek için kullanılabilir. Örneğin, yöntemi M(string a, int b) (M(ByVal a As String, ByVal b As Integer)Visual Basic'te) ve giriş dizisi { 42, "x" }göz önünde bulundurulduğunda, için dizi sağlanmışsa namedParametersgiriş dizisi { "b", "a" } değiştirilmeden args geçirilebilir.

Aramaya hangi üyelerin dahil edilebileceğini tanımlamak için aşağıdaki BindingFlags filtre bayrakları kullanılabilir:

  • Genel üyeleri aramaya dahil etmek için belirtin BindingFlags.Public .

  • Genel olmayan üyeleri (özel, iç ve korumalı üyeler) aramaya dahil etmek için belirtin BindingFlags.NonPublic .

  • Statik üyeleri hiyerarşiye dahil etmek için belirtin BindingFlags.FlattenHierarchy .

Aramanın çalışma şeklini değiştirmek için aşağıdaki BindingFlags değiştirici bayraklar kullanılabilir:

  • BindingFlags.IgnoreCase öğesinin büyük/küçük harf durumunu yoksaymak nameiçin.

  • BindingFlags.DeclaredOnly yalnızca üzerinde Typebildirilen üyeleri aramak için, yalnızca devralınan üyeleri değil.

Üyeyle gerçekleştirilecek eylemi belirtmek için aşağıdaki BindingFlags çağırma bayrakları kullanılabilir:

  • CreateInstance bir oluşturucu çağırmak için. name yoksayılır. Diğer çağırma bayraklarıyla geçerli değil.

  • InvokeMethod bir yöntemi çağırmak, ancak bir oluşturucu veya tür başlatıcı çağırmak için. veya SetPropertyile SetField geçerli değil. tek başına belirtilirse InvokeMethod , BindingFlags.Public, BindingFlags.Instanceve BindingFlags.Static otomatik olarak eklenir.

  • GetField bir alanın değerini almak için. ile SetFieldgeçerli değil.

  • SetField bir alanın değerini ayarlamak için. ile GetFieldgeçerli değil.

  • GetProperty bir özellik almak için. ile SetPropertygeçerli değil.

  • SetProperty bir özellik ayarlamak için. ile GetPropertygeçerli değil.

Daha fazla bilgi edinmek için bkz. System.Reflection.BindingFlags.

Aşağıdaki koşulların her ikisi de doğruysa bir yöntem çağrılır:

  • Yöntem bildirimindeki parametre sayısı dizideki args bağımsız değişkenlerin sayısına eşittir (varsayılan bağımsız değişkenler üyede tanımlanmadığı ve BindingFlags.OptionalParamBinding belirtilmediği sürece).

  • Her bağımsız değişkenin türü bağlayıcı tarafından parametre türüne dönüştürülebilir.

Bağlayıcı tüm eşleşen yöntemleri bulur. Bu yöntemler istenenBindingFlags bağlama türüne (değerler InvokeMethod, GetPropertyvb.) göre bulunur. Yöntem kümesi ad, bağımsız değişken sayısı ve bağlayıcıda tanımlanan arama değiştiricileri kümesine göre filtrelenmiştir.

Yöntem seçildikten sonra çağrılır. Erişilebilirlik bu noktada denetlendi. Arama, yöntemiyle ilişkili erişilebilirlik özniteliğine göre hangi yöntem kümesinin aranabileceğini denetleyebilir. Binder.BindToMethod sınıfının yöntemiBinder, çağrılacak yöntemi seçmekle sorumludur. Varsayılan bağlayıcı en özel eşleşmeyi seçer.

InvokeMember varsayılan değerlere sahip parametrelerle yöntemleri çağırmak için kullanılabilir. Bu yöntemlere bağlanmak için Yansımanın belirtilmesi gerekir BindingFlags.OptionalParamBinding . Varsayılan değere sahip bir parametre için farklı bir değer sağlayabilir veya varsayılan değeri kullanmak için sağlayabilirsiniz Missing.Value .

Örneğin, MyMethod(int x, float y = 2.0) gibi bir yöntem düşünün. Bu yöntemi yalnızca myMethod(4) olarak ilk bağımsız değişkenle çağırmak için yukarıdaki bağlama bayraklarından birini geçirin ve ilk bağımsız değişken ve ikinci bağımsız değişken için 4 olmak üzere iki bağımsız değişken Missing.Value geçirin. kullanmadığınız Missing.Valuesürece, yöntemiyle Invoke isteğe bağlı parametreleri atlayamayabilirsiniz. Bunu yapmanız gerekiyorsa, bunun yerine kullanın InvokeMember .

Tam olarak güvenilen kod için erişim kısıtlamaları yoksayılır; yani özel oluşturucular, yöntemler, alanlar ve özellikler, koda tam olarak güvenildiğinde aracılığıyla System.Reflection erişilebilir ve çağrılabilir.

alanını belirterek BindingFlags.SetFieldbelirli bir değere ayarlamak için kullanabilirsinizType.InvokeMember. Örneğin, C sınıfında F adlı bir genel örnek alanı ayarlamak istiyorsanız ve F bir Stringise, aşağıdaki gibi bir kod kullanabilirsiniz:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);

F bir String[]ise, aşağıdaki gibi bir kod kullanabilirsiniz:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);

F alanını bu yeni diziye başlatır. Değerinin dizinini ve ardından aşağıdaki gibi bir kod kullanarak bir sonraki değeri sağlayarak dizide bir konum ayarlamak için de kullanabilirsiniz Type.InvokeMember :

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);

Bu, F'nin tuttuğu dizideki "z" dizesini "b" dizesi olarak değiştirir.

Not

.NET Framework 2.0 Service Pack 1'den başlayarak, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve ortak olmayan üyelerin izin kümesinin çağıranın verme kümesiyle veya bunun bir alt kümesiyle ReflectionPermissionFlag.RestrictedMemberAccess sınırlı olması durumunda bu yöntem genel olmayan üyelere erişmek için kullanılabilir. (Bkz. Yansıma için GüvenlikLe İlgili Dikkat Edilmesi Gerekenler.)

Bu işlevselliği kullanmak için uygulamanızın .NET Framework 3.5 veya sonraki bir sürümü hedeflemesi gerekir.

Ayrıca bkz.

Şunlara uygulanır