Aracılığıyla paylaş


Type.InvokeMember Yöntem

Tanım

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

Aşırı Yüklemeler

Name Description
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[], 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[])

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[], ParameterModifier[], CultureInfo, String[])

Kaynak:
Type.cs
Kaynak:
Type.cs
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
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 yapıldığını 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ş bir yöntemin seçilmesini, bağımsız değişken türlerinin zorlamasını ve yansıma aracılığıyla bir üyenin çağrılmasına neden olabilecek bir özellik kümesini tanımlayan ve bağlamayı etkinleştiren nesne.

-veya-

DefaultBinder kullanmak için null başvuru (Visual Basic 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ğrılacak ü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 Çifte dönüştürme gibi yerel ayara özgü dönüştürmeler için gerekli olabilir.

-veya-

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

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

Öznitelikler

Ö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, , GetPropertyveya SetProperty.

-veya-

invokeAttr, , GetField, SetFieldGetPropertyveya SetPropertyile InvokeMethodbirleştirilmiş içerirCreateInstance.

-veya-

invokeAttrhem SetFieldhem de GetField içerir.

-veya-

invokeAttrhem SetPropertyhem de GetProperty içerir.

-veya-

invokeAttrveya SetPropertyile SetField birlikte 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çirilmedi: 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-

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

-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ılamaz.

Bağlama ölçütleri ile birden fazla yöntem eşleşir.

tarafından name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle, yönteminin 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, veri alanı üyesi alır veya ayarlar ya da dizi üyesinin bir öğesini alır veya ayarlar.

Uyarı

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 CultureInfo 'yi (modifiersve culture parametreleri) işlemese ParameterModifier de, ve cultureişleyebilen modifiers özel bir bağlayıcı yazmak için soyut System.Reflection.Binder sınıfını kullanabilirsiniz. ParameterModifier yalnızca COM birlikte çalışması aracılığıyla yapılan çağrılarda kullanılır ve yalnızca referansla geçirilen parametreler işlenir.

Dizideki namedParameters her parametre, dizideki karşılık gelen öğ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, M(string a, int b) (Visual Basic'da M(ByVal a As String, ByVal b As Integer)) yöntemi ve { 42, "x" } giriş dizisi göz önünde bulundurulduğunda, namedParameters için dizi { "b", "a" } sağlanıyorsa giriş dizisi args'a değiştirilmemiş olarak geçirilebilir.

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 .

  • Hiyerarşiye statik üyeleri eklemek için belirtin BindingFlags.FlattenHierarchy .

Aramanın çalışma biçimini 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 aramaz.

Ü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 göz ardı edilir. 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 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 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 (üyede 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 parametre 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, ad, bağımsız değişken sayısı ve bağlayıcıda tanımlanan bir arama değiştirici kümesine göre filtrelenmiştir.

Yöntemi 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 parametrelere sahip yöntemleri çağırmak için kullanılabilir. Bu yöntemlere bağlanmak için Yansıma belirtilmesi gerekir BindingFlags.OptionalParamBinding . Varsayılan değeri olan 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 için 4 ve ikinci bağımsız değişken Missing.Value için iki bağımsız değişken 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 güvenilir 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ş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, null, null);

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

Uyarı

Bu yöntem, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve genel 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 Önemli Noktalar.)

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
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
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 yapıldığını 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ş bir yöntemin seçilmesini, bağımsız değişken türlerinin zorlamasını ve yansıma aracılığıyla bir üyenin çağrılmasına neden olabilecek bir özellik kümesini tanımlayan ve bağlamayı etkinleştiren nesne.

-veya-

DefaultBinder kullanmak için null başvuru (Visual Basic'de Nothing). 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 gereken bağımsız değişkenleri içeren bir dizi.

culture
CultureInfo

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

-veya-

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

Döndürülenler

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

Uygulamalar

Öznitelikler

Özel durumlar

invokeAttr içermez CreateInstance ve name şeklindedir null.

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 InvokeMethodbirleştirilmiş içerirCreateInstance.

-veya-

invokeAttrhem SetFieldhem de GetField içerir.

-veya-

invokeAttrhem SetPropertyhem de GetProperty içerir.

-veya-

invokeAttrveya SetPropertyile SetField birlikte 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çirilmedi: 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-

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ılamaz.

Bağlama ölçütleri ile birden fazla yöntem eşleşir.

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

Açıklamalar

Varsayılan bağlayıcı CultureInfo ( culture parametresi) işlemezken, System.Reflection.Binder işlemek için soyut culture sınıfını kullanarak özel bir bağlayıcı yazabilirsiniz.

Uyarı

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 .

  • Hiyerarşiye statik üyeleri eklemek için belirtin BindingFlags.FlattenHierarchy .

Aramanın çalışma biçimini 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 aramaz.

Ü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 göz ardı edilir. 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 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 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 (üyede 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 parametre 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, ad, bağımsız değişken sayısı ve bağlayıcıda tanımlanan bir arama değiştirici kümesine göre filtrelenmiştir.

Yöntemi 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.

Tam güvenilir kod için erişim kısıtlamaları yoksayılır; yani özel oluşturuculara, yöntemlere, alanlara ve özelliklere, koda tam olarak güvenildiğinde Yansıma aracılığıyla 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 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 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.

Uyarı

Bu yöntem, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve genel 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 Önemli Noktalar.)

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[])

Kaynak:
Type.cs
Kaynak:
Type.cs
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
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 yapıldığını 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ş bir yöntemin seçilmesini, bağımsız değişken türlerinin zorlamasını ve yansıma aracılığıyla bir üyenin çağrılmasına neden olabilecek bir özellik kümesini tanımlayan ve bağlamayı etkinleştiren nesne.

-veya-

DefaultBinder kullanmak için null başvuru (Visual Basic'de Nothing). 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 gereken 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

Öznitelikler

Özel durumlar

invokeAttr içermez CreateInstance ve name şeklindedir null.

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 InvokeMethodbirleştirilmiş içerirCreateInstance.

-veya-

invokeAttrhem SetFieldhem de GetField içerir.

-veya-

invokeAttrhem SetPropertyhem de GetProperty içerir.

-veya-

invokeAttrveya SetPropertyile SetField birlikte 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çirilmedi: 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-

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ılamaz.

Bağlama ölçütleri ile birden fazla yöntem eşleşir.

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

tarafından name temsil edilen yöntemin bir veya daha fazla belirtilmemiş genel tür parametresi vardır. Başka bir ifadeyle, yönteminin 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 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

Uyarı

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 .

  • Hiyerarşiye statik üyeleri eklemek için belirtin BindingFlags.FlattenHierarchy .

Aramanın çalışma biçimini 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 aramaz.

Ü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 göz ardı edilir. 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 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 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 (üyede 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 parametre 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, ad, bağımsız değişken sayısı ve bağlayıcıda tanımlanan bir arama değiştirici kümesine göre filtrelenmiştir.

Yöntemi 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.

Tam güvenilir 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"});

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. 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.

Uyarı

Bu yöntem, çağıranın bayrağıyla verilmiş ReflectionPermission olması ve genel 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 Önemli Noktalar.)

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