Aracılığıyla paylaş


Bir Dize Adı Kullanarak Bir Özelliği veya Yöntemi Çağırma (Visual Basic)

Çoğu durumda, tasarım zamanında bir nesnenin özelliklerini ve yöntemlerini bulabilir ve bunları işlemek için kod yazabilirsiniz. Ancak bazı durumlarda, bir nesnenin özellikleri ve yöntemleri hakkında önceden bilginiz olmayabilir veya yalnızca son kullanıcının çalışma zamanında özellikleri belirtmesini veya yöntemleri yürütmesini sağlama esnekliğini isteyebilirsiniz.

CallByName İşlevi

Örneğin, bir com bileşenine bir işleç geçirerek kullanıcı tarafından girilen ifadeleri değerlendiren bir istemci uygulaması düşünün. Bileşene sürekli olarak yeni işleçler gerektiren yeni işlevler eklediğinizi varsayalım. Standart nesne erişim tekniklerini kullandığınızda, istemci uygulamasının yeni işleçleri kullanabilmesi için önce yeniden derlemeniz ve yeniden dağıtmanız gerekir. Bunu önlemek için, uygulamayı değiştirmeden yeni işleçleri dize olarak geçirmek için işlevini kullanabilirsiniz CallByName .

işlevi, CallByName çalışma zamanında bir özellik veya yöntem belirtmek için bir dize kullanmanıza olanak tanır. İşlevin CallByName imzası şöyle görünür:

Result = CallByName(Object, ProcedureName, CallType, Arguments())

İlk bağımsız değişken olan Object, üzerinde işlem yapmak istediğiniz nesnenin adını alır. ProcedureName bağımsız değişkeni, çağrılacak yöntemin veya özellik yordamının adını içeren bir dize alır. CallType bağımsız değişkeni, çağrılacak yordam türünü temsil eden bir sabit alır: yöntem (Microsoft.VisualBasic.CallType.Method), okunan bir özellik (Microsoft.VisualBasic.CallType.Get) veya özellik kümesi (Microsoft.VisualBasic.CallType.Set). İsteğe bağlı olan Arguments bağımsız değişkeni, yordamın bağımsız değişkenlerini içeren bir tür Object dizisi alır.

Geçerli çözümünüzdeki sınıflarla kullanabilirsiniz CallByName , ancak çoğunlukla .NET Framework derlemelerinden COM nesnelerine veya nesnelerine erişmek için kullanılır.

Aşağıdaki kodda gösterildiği gibi adlı yeni bir işleve sahip olan adlı MathClassSquareRootsınıfı içeren bir derlemeye başvuru eklediğinizi varsayalım:

Class MathClass
    Function SquareRoot(ByVal X As Double) As Double
        Return Math.Sqrt(X)
    End Function
    Function InverseSine(ByVal X As Double) As Double
        Return Math.Atan(X / Math.Sqrt(-X * X + 1))
    End Function
    Function Acos(ByVal X As Double) As Double
        Return Math.Atan(-X / Math.Sqrt(-X * X + 1)) + 2 * Math.Atan(1)
    End Function
End Class

Uygulamanız hangi yöntemin çağrılacağını ve bağımsız değişkenlerini denetlemek için metin kutusu denetimlerini kullanabilir. Örneğin, değerlendirilecek ifadeyi içeriyorsa ve TextBox2 işlevin adını girmek için kullanılıyorsaTextBox1, içindeki ifadede TextBox1işlevini çağırmak SquareRoot için aşağıdaki kodu kullanabilirsiniz:

Private Sub CallMath()
    Dim Math As New MathClass
    Me.TextBox1.Text = CStr(CallByName(Math, Me.TextBox2.Text,
       Microsoft.VisualBasic.CallType.Method, TextBox1.Text))
End Sub

içinde , "SquareRoot" içine TextBox1"64" TextBox2girer ve sonra yordamı çağırırsanız CallMath , içindeki TextBox1 sayının karekök değeri değerlendirilir. Örnekteki kod işlevi çağırır SquareRoot (gerekli bağımsız değişken olarak değerlendirilecek ifadeyi içeren bir dize alır) ve içinde TextBox1 "8" döndürür (64'ün karekökünü). Elbette, kullanıcı içinde TextBox2geçersiz bir dize girerse, dize bir yöntem yerine bir özelliğin adını içeriyorsa veya yöntemin ek bir gerekli bağımsız değişkeni varsa, bir çalışma zamanı hatası oluşur. Bunları veya diğer hataları tahmin etmek için kullanırken CallByName güçlü hata işleme kodu eklemeniz gerekir.

Not

CallByName İşlev bazı durumlarda yararlı olsa da, kullanışlılığını performans etkilerine karşı tartmalısınız; CallByName bir yordamı çağırmak için kullanmak, geç bağlanan bir çağrıdan biraz daha yavaştır. Döngü içinde olduğu gibi tekrar tekrar çağrılan bir işlevi çağırırsanız performans CallByName üzerinde ciddi bir etkisi olabilir.

Ayrıca bkz.