Type.InvokeMember Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 , , , , , GetField
vb. gibi Public
bir BindingFlags
erişim InvokeMethod
olabilir. Private
NonPublic
Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.Public
BindingFlags.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 (Nothing
Visual 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 CreateInstance
name
null
.
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
, SetField
GetProperty
veya SetProperty
ile InvokeMethod
birlikte içerirCreateInstance
.
-veya-
invokeAttr
hem SetField
hem de GetField
içerir.
-veya-
invokeAttr
hem SetProperty
hem de GetProperty
içerir.
-veya-
invokeAttr
veya SetProperty
ile 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.PutDispProperty
veya BindingFlags.PutRefDispProperty
.
-veya-
Adlandırılmış parametre dizilerinden biri olan null
bir dize içerir.
Belirtilen üye bir sınıf başlatıcısı.
Alan veya özellik bulunamıyor.
içindeki args
bağı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 durumununame
yoksaymak 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. veyaSetProperty
ileSetField
geçerli değil. kendi kendine belirtilirseInvokeMethod
,BindingFlags.Public
,BindingFlags.Instance
veBindingFlags.Static
otomatik olarak eklenir.GetField
bir alanın değerini almak için. ileSetField
geçerli değil.SetField
bir alanın değerini ayarlamak için. ileGetField
geçerli değil.GetProperty
bir özellik almak için. ileSetProperty
geçerli değil.SetProperty
bir özellik ayarlamak için. ileGetProperty
geç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ığı veBindingFlags.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
, GetProperty
vb.) 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 String
ise, 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.
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Ş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 , , , , , GetField
vb. gibi Public
bir BindingFlags
erişim InvokeMethod
olabilir. Private
NonPublic
Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.Public
BindingFlags.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 (Nothing
Visual 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 CreateInstance
name
null
.
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
, SetField
GetProperty
veya SetProperty
ile InvokeMethod
birlikte içerirCreateInstance
.
-veya-
invokeAttr
hem SetField
hem de GetField
içerir.
-veya-
invokeAttr
hem SetProperty
hem de GetProperty
içerir.
-veya-
invokeAttr
veya SetProperty
ile 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.PutDispProperty
veya BindingFlags.PutRefDispProperty
.
-veya-
Adlandırılmış parametre dizilerinden biri olan null
bir dize içerir.
Belirtilen üye bir sınıf başlatıcısı.
Alan veya özellik bulunamıyor.
içindeki args
bağı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ı (culture
parametresi) işlemese CultureInfo de soyut sınıfını System.Reflection.Binder kullanarak işlemini culture
gerç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 durumununame
yoksaymak 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. veyaSetProperty
ileSetField
geçerli değil. kendi kendine belirtilirseInvokeMethod
,BindingFlags.Public
,BindingFlags.Instance
veBindingFlags.Static
otomatik olarak eklenir.GetField
bir alanın değerini almak için. ileSetField
geçerli değil.SetField
bir alanın değerini ayarlamak için. ileGetField
geçerli değil.GetProperty
bir özellik almak için. ileSetProperty
geçerli değil.SetProperty
bir özellik ayarlamak için. ileGetProperty
geç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ığı veBindingFlags.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
, GetProperty
vb.) 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.
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
Ş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
, Private
InvokeMethod
, , GetField
vb. gibi Public
bir BindingFlags
erişim olabilir. Arama türü belirtilmemelidir. Arama türü atlanırsa kullanılırBindingFlags.Public
BindingFlags.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
, SetField
GetProperty
veya SetProperty
ile birlikte InvokeMethod
içerirCreateInstance
.
-veya-
invokeAttr
hem SetField
hem de GetField
içerir.
-veya-
invokeAttr
hem SetProperty
hem de GetProperty
içerir.
-veya-
invokeAttr
veya SetProperty
ile 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.PutDispProperty
veya BindingFlags.PutRefDispProperty
.
-veya-
Adlandırılmış parametre dizilerinden biri olan null
bir dize içerir.
Belirtilen üye bir sınıf başlatıcısı.
Alan veya özellik bulunamıyor.
içindeki args
bağı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 namedParameters
hiç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 (modifiers
ve culture
parametreleri), ve culture
iş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 args
namedParameters
bü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 namedParameters
giriş 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 yoksaymakname
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, ancak bir oluşturucu veya tür başlatıcı çağırmak için. veyaSetProperty
ileSetField
geçerli değil. tek başına belirtilirseInvokeMethod
,BindingFlags.Public
,BindingFlags.Instance
veBindingFlags.Static
otomatik olarak eklenir.GetField
bir alanın değerini almak için. ileSetField
geçerli değil.SetField
bir alanın değerini ayarlamak için. ileGetField
geçerli değil.GetProperty
bir özellik almak için. ileSetProperty
geçerli değil.SetProperty
bir özellik ayarlamak için. ileGetProperty
geç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ığı veBindingFlags.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
, GetProperty
vb.) 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.Value
sü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 String
ise, 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.
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission