Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.