Pemanggilan 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 menghandelnya. Akan tetapi, dalam beberapa kasus Anda mungkin tidak mengetahui properti dan metode objek terlebih dahulu, atau Anda mungkin hanya menginginkan fleksibilitas pengaktifan pengguna akhir untuk menentukan properti atau menjalankan metode pada run time.
Fungsi CallByName
Anggap saja, misalnya, aplikasi klien yang mengevaluasi ekspresi dimasukkan oleh pengguna dengan meneruskan operator ke komponen COM. Anggap saja Anda terus menambahkan fungsi baru ke komponen yang memerlukan operator baru. Ketika Anda menggunakan teknik akses objek standar, Anda harus mengompilasi ulang dan mendistribusikan kembali aplikasi klien sebelum dapat menggunakan operator baru. Untuk menghindari hal ini, Anda dapat menggunakan fungsi CallByName
untuk meneruskan operator baru sebagai string, tanpa mengubah aplikasi.
Fungsi CallByName
memungkinkan Anda menggunakan string untuk menentukan properti atau metode pada run time. Tanda tangan untuk fungsi CallByName
akan terlihat seperti ini:
Hasil = CallByName
(Objek, ProcedureName, CallType, Argumen())
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
), bacaan properti (Microsoft.VisualBasic.CallType.Get
), atau set properti (Microsoft.VisualBasic.CallType.Set
). Argumen Argumen, yang bersifat opsional, mengambil array jenis Object
yang berisi argumen apa pun pada prosedur.
Anda dapat menggunakan CallByName
dengan kelas dalam solusi saat ini, tetapi ia paling sering digunakan untuk mengakses objek COM atau objek dari assembly .NET Framework.
Anggap saja Anda menambahkan referensi ke assembly 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 fungsi SquareRoot
pada ekspresi dalam 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" dalam TextBox1
, "SquareRoot" dalam TextBox2
, lalu memanggil prosedur CallMath
, akar kuadrat dari angka dalam TextBox1
dievaluasi. Kode dalam contoh memanggil fungsi SquareRoot
(yang mengambil string yang berisi ekspresi yang akan dievaluasi sebagai argumen yang diperlukan) dan menampilkan "8" dalam TextBox1
(akar kuadrat 64). Tentu saja, jika pengguna memasukkan string yang tidak valid dalam 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 menggunakan CallByName
untuk mengantisipasi kesalahan ini atau kesalahan lainnya.
Catatan
Meski fungsi CallByName
mungkin berguna dalam beberapa kasus, Anda harus menimbang kegunaannya terhadap implikasi performa — penggunaan CallByName
untuk memanggil prosedur sedikit lebih lambat daripada panggilan ikatan terakhir. Jika Anda memanggil fungsi yang dipanggil berulang kali, seperti di dalam perulangan, CallByName
dapat berefek parah pada performa.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk