Bagikan melalui


Memanggil Properti atau Metode Menggunakan Nama String (Visual Basic)

Dalam kebanyakan kasus, Anda dapat menemukan properti dan metode objek pada waktu desain, dan menulis kode untuk menanganinya. Namun, dalam beberapa kasus Anda mungkin tidak tahu tentang properti dan metode objek terlebih dahulu, atau Anda mungkin hanya ingin fleksibilitas memungkinkan pengguna akhir menentukan properti atau menjalankan metode pada waktu proses.

Fungsi CallByName

Pertimbangkan, misalnya, aplikasi klien yang mengevaluasi ekspresi yang dimasukkan oleh pengguna dengan meneruskan operator ke komponen COM. Misalkan Anda terus menambahkan fungsi baru ke komponen yang memerlukan operator baru. Saat Anda menggunakan teknik akses objek standar, Anda harus mengkombinasikan ulang dan mendistribusikan ulang aplikasi klien sebelum dapat menggunakan operator baru. Untuk menghindari hal ini, Anda dapat menggunakan CallByName fungsi untuk meneruskan operator baru sebagai string, tanpa mengubah aplikasi.

Fungsi ini CallByName memungkinkan Anda menggunakan string untuk menentukan properti atau metode pada waktu proses. Tanda tangan untuk CallByName fungsi terlihat seperti ini:

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

Argumen pertama, Objek, mengambil nama objek yang ingin Anda tindak lanjuti. Argumen ProcedureName mengambil string yang berisi nama metode atau prosedur properti yang akan dipanggil. Argumen CallType mengambil konstanta yang mewakili jenis prosedur yang akan dipanggil: metode (Microsoft.VisualBasic.CallType.Method), properti baca (Microsoft.VisualBasic.CallType.Get), atau kumpulan properti (Microsoft.VisualBasic.CallType.Set). "Argumen Arguments, yang bersifat opsional, menerima array tipe Object yang berisi argumen apa pun untuk prosedur."

Anda dapat menggunakan CallByName dengan kelas dalam solusi Anda saat ini, tetapi paling sering digunakan untuk mengakses objek com atau objek dari rakitan .NET Framework.

Misalkan Anda menambahkan referensi ke rakitan yang berisi kelas bernama MathClass, yang memiliki fungsi baru bernama SquareRoot, seperti yang ditunjukkan dalam kode berikut:

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

Aplikasi Anda dapat menggunakan kontrol kotak teks untuk mengontrol metode mana yang akan dipanggil dan argumennya. Misalnya, jika TextBox1 berisi ekspresi yang akan dievaluasi, dan TextBox2 digunakan untuk memasukkan nama fungsi, Anda dapat menggunakan kode berikut untuk memanggil SquareRoot fungsi pada ekspresi di TextBox1:

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

Jika Anda memasukkan "64" di TextBox1, "SquareRoot" di TextBox2, dan kemudian memanggil prosedur CallMath, akar kuadrat dari angka di TextBox1 dievaluasi. Kode dalam contoh memanggil SquareRoot fungsi (yang mengambil string yang berisi ekspresi yang akan dievaluasi sebagai argumen yang diperlukan) dan mengembalikan "8" di TextBox1 (akar kuadrat 64). Tentu saja, jika pengguna memasukkan string yang tidak valid di TextBox2, jika string berisi nama properti alih-alih metode, atau jika metode memiliki argumen tambahan yang diperlukan, kesalahan run-time terjadi. Anda harus menambahkan kode penanganan kesalahan yang kuat saat Anda menggunakan CallByName untuk mengantisipasi kesalahan ini atau kesalahan lainnya.

Nota

Meskipun fungsi CallByName mungkin berguna dalam beberapa kasus, Anda harus menimbang kegunaannya terhadap implikasi performa, menggunakan CallByName untuk memanggil prosedur sedikit lebih lambat daripada pemanggilan terlambat. Jika Anda memanggil fungsi yang dipanggil berulang kali, seperti di dalam perulangan, CallByName dapat memiliki efek parah pada performa.

Lihat juga