none
Orienté objet RRS feed

  • Question

  • salut ,

    ya un truc que jaimerai savoir a propo des classes en vbnet

    en faite je voudrai creer une classe a l'interieur dune autre classe et pouvoir utiliser les membre de la classe interne a partir de la classe qui la contient

    1- est ce possible
    2- si oui comment??


    thanks a lot Smile
    jeudi 21 février 2008 09:34

Réponses

  • Bonjour,

    Si j'ai bien compris vous voudriez que le handler de l'évènement DataBinding soir géré par un méthode se trouvant dans une classe interne et que vous puissez le déclarer dans le fichier aspx.

    Dans tous les cas votre classe conteneur (classe1) doit avoir une instance de classe2 (appelons la m_instClasse2) puis vous avez 2 possibilités :

    • soit ajouter une méthode dans classe1 qui sera votre handler et qui appelera la méthode de classe2.
    • soit exposer votre instance de classe2 via une propriété dans classe1.

    Dans les 2 cas, vous devrez changer l'accesseur de la méthode GridView1_DataBinding de la classe2 pour que celui-ci soit Public ou Internal.

     

    Voici un exemple pour le cas 1

     

    Code Snippet

    Public Class Classe1

     

    Private m_instClasse2 As Classe2 = New Classe2()

     

    Protected Sub GridView_DataBinding(ByVal sender As Object, ByVal a As EventArgs)

    Me.m_instClasse2.GridView1_DataBinding(sender, e)

    End Sub

     

    Private Class Classe2

     

    Public Sub GridView_DataBinding(ByVal sender As Object, ByVal a As EventArgs)

    End Sub

     

    End Class

     

    End Class

     

     

    Dans ce cas vous ne changez rien dans le fichier aspx.

     

    Voici un exemple pour le cas 2

     

    Code Snippet

    Public Class Classe1

     

    Private m_instClasse2 As Classe2 = New Classe2()

    Protected ReadOnly Property Cls2 As Classe2

    Get

    Return Me.m_instClasse2

    End Get

    End Property

     

    Public Class Classe2

     

    Public Sub GridView_DataBinding(ByVal sender As Object, ByVal a As EventArgs)

    End Sub

     

    End Class

     

    End Class

     

     

    Dans ce cas, dans le fichier aspx il faut mettre OnDataBinding="Cls2.GridView_DataBinding"

     

    Je vous conseillerai la première méthode car dans ce cas votre classe interne reste private et vous n'exposé à l'extérieur de votre classe1 que les données que vous désirez.

     

    Guillaume

    jeudi 21 février 2008 11:25

Toutes les réponses

  • Bonjour,

    C'est effectivement possible mais votre classe conteneur doit avoir une instance de la classe contenue :

     

    Code Snippet

    Public Class Conteneur

     

    // champs privé

    Private m_nb As Integer

    Private m_internalClass As Contenu

     

    // constructeur

    Public Sub New()

     

    Me.m_nb = 1

    Me.m_internalClass = New Contenu()

     

    End Sub

     

    // propriétés permettant l'accès au champs privé et au champs de l'instance interne

    Public Property Nb() As Integer

    Get

    Return Me.m_nb

    End Get

    Set (ByVal value as Integer)

    Me.m_nb = value

    End Set

    End Property

     

    Public Property Str() As String

    Get

    Return Me.m_internalClass.Str

    End Get

    Set (ByVal value as String)

    Me.m_internalClass.Str = value

    End Set

    End Property

     

    // la classe interne, elle est en private mais pourrait être de n'importe quelle portée

    Private Class Contenu

     

    // champs privé

    Private m_str As String

    Public Property Str() As String

    Get

    Return Me.m_str

    End Get

    Set (ByVal value As String)

    Me.m_str = value

    End Set

    End Property

     

    End Class

     

    End Class

     

     

    Guillaume

    jeudi 21 février 2008 10:10
  • en faite oui c juste
    sauf que g pas bien exoliquer désolée Smile

    en faitej'ai un gridview qui appartien a ma classe conteneur , g pris

    Protected Sub GridView1_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBinding

        End Sub


    j'ai enlever la partie  " Handles GridView1.DataBinding"
    et je suis allée a la parie asp et g fait ça :

    <asp:GridView ID="GridView1" runat="server"  OnDataBinding = "GridView1_DataBinding">
     

    ça marche dans une meme classe1, mais si je prend cette classe1 et que je crée une autre classe2 a l'intérieure et j'y met


     Protected Sub GridView1_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs)

        End Sub


    ça ne marche pas car il ne la voi plus et il dit que ça napprtient pas a la classe1, c normal biensur.

    il existe un moyen pour rendre ceci faisable (d'aprés mon boss ) mais je ne voi pas !!!??

    peux tu m'aider?? ...stp.
    jeudi 21 février 2008 10:29
  • Bonjour,

    Si j'ai bien compris vous voudriez que le handler de l'évènement DataBinding soir géré par un méthode se trouvant dans une classe interne et que vous puissez le déclarer dans le fichier aspx.

    Dans tous les cas votre classe conteneur (classe1) doit avoir une instance de classe2 (appelons la m_instClasse2) puis vous avez 2 possibilités :

    • soit ajouter une méthode dans classe1 qui sera votre handler et qui appelera la méthode de classe2.
    • soit exposer votre instance de classe2 via une propriété dans classe1.

    Dans les 2 cas, vous devrez changer l'accesseur de la méthode GridView1_DataBinding de la classe2 pour que celui-ci soit Public ou Internal.

     

    Voici un exemple pour le cas 1

     

    Code Snippet

    Public Class Classe1

     

    Private m_instClasse2 As Classe2 = New Classe2()

     

    Protected Sub GridView_DataBinding(ByVal sender As Object, ByVal a As EventArgs)

    Me.m_instClasse2.GridView1_DataBinding(sender, e)

    End Sub

     

    Private Class Classe2

     

    Public Sub GridView_DataBinding(ByVal sender As Object, ByVal a As EventArgs)

    End Sub

     

    End Class

     

    End Class

     

     

    Dans ce cas vous ne changez rien dans le fichier aspx.

     

    Voici un exemple pour le cas 2

     

    Code Snippet

    Public Class Classe1

     

    Private m_instClasse2 As Classe2 = New Classe2()

    Protected ReadOnly Property Cls2 As Classe2

    Get

    Return Me.m_instClasse2

    End Get

    End Property

     

    Public Class Classe2

     

    Public Sub GridView_DataBinding(ByVal sender As Object, ByVal a As EventArgs)

    End Sub

     

    End Class

     

    End Class

     

     

    Dans ce cas, dans le fichier aspx il faut mettre OnDataBinding="Cls2.GridView_DataBinding"

     

    Je vous conseillerai la première méthode car dans ce cas votre classe interne reste private et vous n'exposé à l'extérieur de votre classe1 que les données que vous désirez.

     

    Guillaume

    jeudi 21 février 2008 11:25