Mi sono incuriosito alla domanda, ed anche ad alcune risposte.
Ho fatto questo piccolo esempio.
Una pagina di prova ha un semplice segnaposto che ospiterà un UserControl creato da codice:
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>
il codice, contiene una proprietà pubblica ed un metodo pubblico:
codice:
'variabile di classe che referenzia il controllo utente WebUserControl1
Protected WithEvents uc As WebUserControl1
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'creo il controllo utente dinamicamente
uc = DirectCast(LoadControl("WebUserControl1.ascx"), WebUserControl1)
'lo inserisco nel segnaposto
Me.PlaceHolder1.Controls.Add(uc)
End Sub
'una proprietà pubblica di prova
Public ReadOnly Property Proprieta() As String
Get
Return "Hai interrogato il valore di una proprietà pubblica nella pagina contenitrice"
End Get
End Property
'un metodo pubblico di prova
Public Function Metodo(ByVal parametro As String) As String
Return "Hai interrogato il valore di una funzione pubblica nella pagina contenitrice: parametro passato = " & parametro
End Function
Adesso vediamo l'UC
codice:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'riferimento alla pagina contenitrice
Dim p As System.Web.UI.Page = Me.Page
'ricavo il tipo
Dim type As Type = p.GetType()
'se esiste la proprietà pubblica, ne invoco il valore
Dim pi As PropertyInfo = type.GetProperty("Proprieta")
If Not (pi Is Nothing) Then
Me.Response.Write(pi.GetValue(p, Nothing).ToString() & "</br>")
End If
'se esiste il metodo pubblico, lo lancio, passando il giusto parametro
Dim mi As MethodInfo = type.GetMethod("Metodo")
If Not (mi Is Nothing) Then
Me.Response.Write(mi.Invoke(p, New Object() {"PARAMETRO1"}).ToString() & "</br>")
End If
End Sub
Da notare che, probabilmente, l'UC non sa e non vuole sapere niente sulla pagina che lo ospiterà, perciò, l'invocazione di metodi della pagina contenitrice saranno fatte col late binding utilizzando la reflection.