PDA

View Full Version : چطوري ميشه فهميد Constructor پارامتر ورودي داره؟



combo_ci
چهارشنبه 18 شهریور 1388, 11:34 صبح
سلام
من ميخواستم توي فرم اصليم آبجكت هايي از فرم هاي برنامم دارم رو بدون اينكه هر دفعه كد new رو واسه هر كدوم بنويسم با يك تابع انجام بدم كه با اين كد رديفش كردم

If frm.IsDisposed Then
Dim g As Type() = {}
Dim h As Object() = {}
frm = DirectCast(Type.GetType(frm.GetType.ToString).GetC onstructor(g).Invoke(h), Form)
End If


اما يك مشكل داره كه اگر Constructor پارامتر ورودي داشته باشه ديگه كد كار نميكنه و خطا ميده...
كسي ميتونه چطوري ميشه Constructor با پارامتر رو با اين كد صدا زد؟

ACorvinus
چهارشنبه 18 شهریور 1388, 13:36 عصر
سلام
پروتوتایپ تابع Invoke بصورت زیر است:



public object Invoke(object obj, object[ ] parameters)


که پارامتر اول همان تابع مورد نظر و پارامتر دوم آرگومانهای مربوط به تابع ذکر شده در پارامتر اول است. به عنوان مثال:



Public Sub SayHello(ByVal Name As String)
MessageBox.Show(String.Format("Hello {0}!", Name), "This MessageBox shown by system.reflection namespace", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
If (String.IsNullOrEmpty(Me.txtName.Text) = False) Then
Try
Me.GetType.GetMethod("SayHello").Invoke(Me, New Object() {Me.txtName.Text})
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End Sub



که شما می توانید به جای فراخوانی یک تابع خاص، Constructor یک کلاس را فراخوانی کنید.

combo_ci
چهارشنبه 18 شهریور 1388, 14:23 عصر
ممنون دوست عزيز
ميشه قبل از اينكه تابع رو اجرا كرد فهميد كه چند تا پارامتر ورودي داره؟

combo_ci
چهارشنبه 18 شهریور 1388, 14:27 عصر
با اين كدي كه من نوشتم كار نكرد :(

combo_ci
پنج شنبه 19 شهریور 1388, 09:38 صبح
جوابش اينه
Activator.CreateInstance(Type.GetType(frm.GetType. ToString), args)