Comment remplacer correctement TYPE du Vb6 sous VB.NET ?

Résolu
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 24 déc. 2010 à 15:06
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 - 25 déc. 2010 à 13:46
Salut à tous;

Je me mélange les pinceaux avec les portées !

Mon soucis:
Je n'arrive pas a voir mes fonctions dans clsFindInfos tout en voulant
garder hors de portées ma structure HexArray et ma déclaration myHex().

Mon souhait:
(exemple dans un bouton)
Dim myFind As New clsHexa.FindInfos.HexArray

myFind.OpenAdd("0F","FIRST")
myFind.OpenAdd("B8","LAST")
'procédures diverses
'...

'Test
Debug.Print("NB ELEMENT: " & myFind.Count())
'Liberation du tableau
myFind.Close()


Mon code:
    Public Class FindInfos
        Structure HexArray
            Dim ChaineHexa As String
            Dim FindMethod As String
        End Structure
        Shared myHex() As HexArray = Nothing
        Public Shared Sub OpenAdd(ByVal ChaineHexa As String, ByVal FindMethod As String)
            If myHex Is Nothing Then
                ReDim myHex(0)
            Else
                ReDim Preserve myHex(myHex.Length)
            End If
            myHex(myHex.Length).ChaineHexa = ChaineHexa
            myHex(myHex.Length).FindMethod = FindMethod
        End Sub
        Public Shared Function Count() As Integer
            If myHex Is Nothing Then
                Return Nothing
            Else
                Return myHex.Length
            End If
        End Function
        Public Shared Sub Close()
            myHex = Nothing
        End Sub
    End Class

3 réponses

NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
24 déc. 2010 à 22:08
Bonjour,

Si tes fonction prennent en paramètre ou retourne un type (structure, enum, classe, ...), il faut que l'éventuel appelant y ait accès (minimum), pour faire simple :
- Fonction publique, type publique
- Fonction Friend, Type Friend
- Fonction Private, Type Private (là, personne ne voit rien sauf le conteneur)
- Fonction Protected, Type Protected

Rappel simplifié :
Private < Protected < Friend < Public

Attention, Si tu déclare un élément public dans une classe Friend,, l'élément sera Friend.
L'élément est automatiquement <= en visibilité rapport à son conteneur.

Petite subtilité :
Classe/Structure Private/Protected dans une Classe/Structure, quelque soit la visibilité du conteneur, le contenu sera au plus visible seulement (Public/Friend) dans le conteneur.

Mon site
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 déc. 2010 à 10:08
salut,


Public Class FindInfos
Structure HexArray

Dim myFind As New clsHexa.FindInfos.HexArray

myFind.OpenAdd("0F","FIRST")


normal que tu ne puisses pas "voir" OpenAdd, c'est une méthode de FindInfos et non de HexArray : rien à voir avec la portée

Dim myFind As New (clsHexa.)FindInfos.HexArray


maintenant tu ne veux pas "partager" ta structure donc :
*déclare-la private
*utilise une list OF plutôt qu'un tableau à redimensionner
*profite alors du constructeur qu'offre une classe au lieu d'une structure

Public Class FindInfos

    Private Class HexItem
        Public ChaineHexa As String
        Public FindMethod As String
        Public Sub New(ByVal sChaineHexa As String, ByVal sFindMethod As String)
            Me.ChaineHexa = sChaineHexa
            Me.FindMethod = sFindMethod
        End Sub
    End Class

    Private myHex As New List(Of HexItem)

    Public Sub OpenAdd(ByVal ChaineHexa As String, ByVal FindMethod As String)
        myHex.Add(New HexItem(ChaineHexa, FindMethod))
    End Sub
    Public Function Count() As Integer
        Return myHex.Count
    End Function
    Public Sub Close()
        myHex.Clear()
        myHex = Nothing
    End Sub

End Class



et enfin :

Dim myFind As New clsHexa.FindInfos.HexArray
Dim myFind As New FindInfos

'...

Debug.Print("NB ELEMENT: " & myFind.Count())
Console.WriteLine("NB ELEMENT: {0}", myFind.Count())


++

[hr]
3
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
25 déc. 2010 à 13:46
Merci Henry pour ce cours instructif, un vrai régal ^^

Merci PCPT pour l'exemple logique, un vrai bonheur ^^

Joyeuses fêtes, cher membres.
0
Rejoignez-nous