DynamicObject.TryGetIndex(GetIndexBinder, Object[], Object) 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.
Dizine göre değer alan işlemler için uygulamayı sağlar. sınıfından DynamicObject türetilen sınıflar, dizin oluşturma işlemleri için dinamik davranış belirtmek üzere bu yöntemi geçersiz kılabilir.
public:
virtual bool TryGetIndex(System::Dynamic::GetIndexBinder ^ binder, cli::array <System::Object ^> ^ indexes, [Runtime::InteropServices::Out] System::Object ^ % result);
public virtual bool TryGetIndex (System.Dynamic.GetIndexBinder binder, object[] indexes, out object result);
public virtual bool TryGetIndex (System.Dynamic.GetIndexBinder binder, object[] indexes, out object? result);
abstract member TryGetIndex : System.Dynamic.GetIndexBinder * obj[] * obj -> bool
override this.TryGetIndex : System.Dynamic.GetIndexBinder * obj[] * obj -> bool
Public Overridable Function TryGetIndex (binder As GetIndexBinder, indexes As Object(), ByRef result As Object) As Boolean
Parametreler
- binder
- GetIndexBinder
İşlem hakkında bilgi sağlar.
- indexes
- Object[]
İşlemde kullanılan dizinler. Örneğin, sınıfından sampleObject[3]
indexes[0]
türetilen DynamicObject
C# (sampleObject(3)
Visual Basic'te) sampleObject
işlemi için 3'e eşittir.
- result
- Object
Dizin işleminin sonucu.
Döndürülenler
true
işlem başarılı olursa; aksi takdirde , false
. Bu yöntem döndürürse false
, davranışı dilin çalışma zamanı bağlayıcısı belirler. (Çoğu durumda, bir çalışma zamanı özel durumu oluşturulur.)
Örnekler
Özelliklere , Property1
, vb. gibi Property0
adlar veya dizin yoluyla erişilebilen bir nesne oluşturmak istediğinizi varsayalım; böylece örneğin, sampleObject.Property0
C# veya sampleObject(0)
Visual Basic'te ile eşdeğerdirsampleObject[0]
.
Aşağıdaki kod örneği, sınıfından SampleDynamicObject
türetilen sınıfını DynamicObject gösterir. sınıfı, SampleDynamicObject
anahtar-değer çiftlerini Dictionary<string, object>
depolamak için türünde (Dictionary(Of String, Object)
Visual Basic'te) bir nesnesi içerir. SampleDynamicObject
dizine TrySetIndex göre erişimi etkinleştirmek için ve TryGetIndex yöntemlerini geçersiz kılar. Özellik adına göre erişimi etkinleştirmek için ve TryGetMember yöntemlerini geçersiz kılarTrySetMember.
// The class derived from DynamicObject.
public class SampleDynamicObject : DynamicObject
{
// The inner dictionary to store field names and values.
Dictionary<string, object> dictionary
= new Dictionary<string, object>();
// Get the property value.
public override bool TryGetMember(
GetMemberBinder binder, out object result)
{
return dictionary.TryGetValue(binder.Name, out result);
}
// Set the property value.
public override bool TrySetMember(
SetMemberBinder binder, object value)
{
dictionary[binder.Name] = value;
return true;
}
// Set the property value by index.
public override bool TrySetIndex(
SetIndexBinder binder, object[] indexes, object value)
{
int index = (int)indexes[0];
// If a corresponding property already exists, set the value.
if (dictionary.ContainsKey("Property" + index))
dictionary["Property" + index] = value;
else
// If a corresponding property does not exist, create it.
dictionary.Add("Property" + index, value);
return true;
}
// Get the property value by index.
public override bool TryGetIndex(
GetIndexBinder binder, object[] indexes, out object result)
{
int index = (int)indexes[0];
return dictionary.TryGetValue("Property" + index, out result);
}
}
class Program
{
static void Test(string[] args)
{
// Creating a dynamic object.
dynamic sampleObject = new SampleDynamicObject();
// Creating Property0.
// The TrySetMember method is called.
sampleObject.Property0 = "Zero";
// Getting the value by index.
// The TryGetIndex method is called.
Console.WriteLine(sampleObject[0]);
// Setting the property value by index.
// The TrySetIndex method is called.
// (This method also creates Property1.)
sampleObject[1] = 1;
// Getting the Property1 value.
// The TryGetMember method is called.
Console.WriteLine(sampleObject.Property1);
// The following statement produces a run-time exception
// because there is no corresponding property.
//Console.WriteLine(sampleObject[2]);
}
}
// This code example produces the following output:
// Zero
// 1
' The class derived from DynamicObject.
Public Class SampleDynamicObject
Inherits DynamicObject
' The inner dictionary to store field names and values.
Dim dictionary As New Dictionary(Of String, Object)
' Get the property value.
Public Overrides Function TryGetMember(
ByVal binder As System.Dynamic.GetMemberBinder,
ByRef result As Object) As Boolean
Return dictionary.TryGetValue(binder.Name, result)
End Function
' Set the property value.
Public Overrides Function TrySetMember(
ByVal binder As System.Dynamic.SetMemberBinder,
ByVal value As Object) As Boolean
dictionary(binder.Name) = value
Return True
End Function
' Set the property value by index.
Public Overrides Function TrySetIndex(
ByVal binder As System.Dynamic.SetIndexBinder,
ByVal indexes() As Object, ByVal value As Object) As Boolean
Dim index As Integer = CInt(indexes(0))
' If a corresponding property already exists, set the value.
If (dictionary.ContainsKey("Property" & index)) Then
dictionary("Property" & index) = value
Else
' If a property does not exist, create it.
dictionary.Add("Property" & index, value)
End If
Return True
End Function
' Get the property value by index.
Public Overrides Function TryGetIndex(
ByVal binder As System.Dynamic.GetIndexBinder,
ByVal indexes() As Object, ByRef result As Object) As Boolean
Dim index = CInt(indexes(0))
Return dictionary.TryGetValue("Property" & index, result)
End Function
End Class
Sub Test()
' Creating a dynamic object.
Dim sampleObject As Object = New SampleDynamicObject()
' Creating Property0.
' The TrySetMember method is called.
sampleObject.Property0 = "Zero"
' Getting the value by index.
' The TryGetIndex method is called.
Console.WriteLine(sampleObject(0))
' Setting the property value by index.
' The TrySetIndex method is called.
' (This method also creates Property1.)
sampleObject(1) = 1
' Getting the Property1 value.
' The TryGetMember method is called.
Console.WriteLine(sampleObject.Property1)
' The following statement produces a run-time exception
' because there is no corresponding property.
' Console.WriteLine(sampleObject(2))
End Sub
' This code example produces the following output:
' Zero
' 1
Açıklamalar
sınıfından türetilen sınıflar, bir değeri dizine göre alma işleminin DynamicObject dinamik nesne için nasıl gerçekleştirileceğini belirtmek için bu yöntemi geçersiz kılabilir. Yöntemi geçersiz kılınmadığında, davranışı dilin çalışma zamanı bağlayıcısı belirler. (Çoğu durumda, bir çalışma zamanı özel durumu oluşturulur.)
Bu yöntem geçersiz kılınırsa, C# veya sampleObject(3)
Visual Basic gibi bir işleminiz olduğunda otomatik olarak sampleObject[3]
çağrılır ve burada sampleObject
sınıfından DynamicObject türetilir.