vb95
Messages postés3511Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention18 septembre 2024
-
Modifié le 21 avril 2017 à 18:02
Whismeril
Messages postés19144Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention16 septembre 2024
-
22 avril 2017 à 18:56
Bonjour
Posons les bases du problème
Une classe mère
Public Class ClassPartitionLogique Public Property TotalSectors as Long ' nombre total de secteurs ' etc ...... End Class
une classe fille qui hérite de la classe mère
Public Class ClassPartitionNTFS Inherits ClassPartitionLogique Public Property ClusterMFt as integer ' premier cluster de la MFT ' etc ...... End Class
Dans le projet il y a une list(of ClassPartitionLogique) définie dans la classe ClassPartitionLogique
Lorsque j'explore les partitions de mon PC celles-ci s'ajoutent à cette List(of) et s'affichent dans une listview
Si je sélectionne une partition dans la listview j'ouvre une nouvelle Form dépendante du système de fichiers
si j'ouvre une partition NTFS par exemple dans la nouvelle Form je sais quelle est la partition logique
Whismeril
Messages postés19144Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention16 septembre 2024660 21 avril 2017 à 18:34
Bonsoir
quand tu explores les partitions, tu ajoutes une partitionNtfs ou une partition?
vb95
Messages postés3511Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention18 septembre 2024169 Modifié le 21 avril 2017 à 19:10
bonsoir Whis
C'est comme les Cafetières de ton tuto ( la classe mère) et les 2 classes filles ( les cafetières avec filtre et celles avec dosette)
Lorsque j'explore les partitions j'ajoute un objet ClassPartionLogique
Je ne sais pas si la partition est NTFS ( donc classe fille ClassPartitionNTFS) ou FAT( donc classe fille ClassPartitionFAT)
Je n'ai pas fait la distinction entre les partitions FAT 16, FAT 32 et exFAT
Une fois la partition explorée je le sais mais je ne peux pas faire une List(of) avec 2 paramètres pour le of
Lorsque je sélectionne une partition dans la listview je sais quel est l'objet ClassPartitionlogique et si il est NTFS ou FAT ( donc quelle sera la classe fille à prendre en compte)
La classe PartitionNTFS dérivant de ClassPartitionlogique ( tout comme la ClassPartitionFAT) je ne sais pas comment renseigner un objet ClassPartitionNTFS qui aurait les propriétés de la Partition logique sélectionnée
Quelque chose comme PartionNTfs = un objet ClassPartitionNTFS avec toutes les propriétés de l'objet ClassPartitionlogique sélectionné
Whismeril
Messages postés19144Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention16 septembre 2024660
>
vb95
Messages postés3511Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention18 septembre 2024 21 avril 2017 à 19:30
Comme quoi ça mérite plus d'éclaircissements.
Si dans la liste de Partition, tu ajoutes des NTFS et des FAT
PartitionNTFS = CType(PartitionLogique, NTFS)
, parce que même si PartitionLogique est stockée comme une Partition, elle a été instanciée comme NTFS.
Dans l'autre sens, à savoir, je crée des Partitions et au cas par cas j'en ferai des NTFS ou des FAT, ça ne marche pas.
La raison est que chaque Partition a instanciée comme une Partition. En poussant un peu plus loin, il faut voir que le fait d'instancier un objet va bloquer dans la mémoire un (des) espaces pour lui.
Par exemple, une personne a un nom, une date de naissance et des numéros de téléphones, l'instanciation va bloquer un peu de place pour toute la chaine d'héritage ascendante, une place pour une string, une place pour une date et une place pour une liste d'entier. Cette liste d'entier est elle-même un objet qui est prête à pointer vers des emplacements d'entiers.
Au fur et à mesure que tu ajoutes des numéros, tu instancies d’abord un entiers, qui va se placer quelque part dans la mémoire et on signale à la liste que cet emplacement va se remplir est lié à elle.
C'est comme ça qu'un objet peut être dans plusieurs collections.
Donc quand tu instancies une Partition, y a pas l’emplacement pour ClusterMFt.
L'idéal serait donc d'instancier dès le départ la bonne classe.
Si ça n'est vraiment pas possible, alors il faut que tu instancies une NTFS qui "copie" une Partition.
Par exemple avec un constructeur qui prend une Partition en paramètres.
Y'a 2 bémols:
tu te retrouve avec 2 instances qui représentent la même partitions.
dans ta liste d'origine tu ne peux pas profiter du polymorphisme.
Ça peut se solutionner en supprimant la Partition de la liste et en y ajoutant la NTFS
Attention lors de la copie des champs, ça ne se comporte pas forcément comme on le pense quand on à des types références et des types valeurs.
Pour les types références, la copie fait pointer vers la référence initiale, et donc toute modification dans Partition sera sera effective dans NTFS et vice et versa.
Pour les types valeurs, la copie crée une nouvelle valeur et chaque instance a les siennes autonomes.
vb95
Messages postés3511Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention18 septembre 2024169
>
Whismeril
Messages postés19144Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention16 septembre 2024 21 avril 2017 à 20:38
bonsoir Whismeril
Merci pour ces éclaircissements
Là ce soir je n'ai plus le temps car j'ai du monde à la maison
Je te dirais ce qu'il en est plus tard !
bonne soirée
vb95
Messages postés3511Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention18 septembre 2024169
>
vb95
Messages postés3511Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention18 septembre 2024 Modifié le 22 avril 2017 à 17:46
Bonjour Whismeril
J'ai fait comme tu proposais
Dans une Classe Data générale j'ai défini ces 3 propriétés
Public Shared PartitionNTFS As ClassPartitionNTFS Public Shared PartitionFAT As ClassPartitionFAT Public Shared PartitionLogique As ClassPartitionLogique
' dans le code d'initialisation de la Form ClassData.PartitionLogique = ClassPartitionLogique.PartitionLogiques(ClassData.Selection) ClassData.PartitionFAT = New ClassPartitionFAT(ClassData.PartitionLogique)
' le constructeur de la classe PartitionFAT Public Sub New(Partitionlogique As ClassPartitionLogique)
Quand j'explore mon Pc j'obtiens une List(of ClassData.ClassPatitionLogique)
Lorsque je sélectionne une partition j'ai donc un objet PartitionLogique
Selon le système de fichiers je me sers de PatitionFAT ou PartitionNTFS avec un constructeur qui prend PartitionLogique en paramètre
Les faits des 2 instances de PartitionLogique ne me gène pas . Il me sert même car c'est dans PartitionLogique que je recherche la liste des clusters libres . Et cette liste existe en FAT et en NTFS et je m'en sers dans d'autres feuilles du projet avec PartitionLogique comme objet
Je ne me sers pas du polymorphisme dans ma liste d'origine
Ceci m'a permis de faire de l'héritage entre PartitionLogique et ses 2 classes filles ( PartitionFAT et PatitionNTFS)
Donc sujet résolu : un grand merci Whismeril
Whismeril
Messages postés19144Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention16 septembre 2024660
>
vb95
Messages postés3511Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention18 septembre 2024 22 avril 2017 à 18:56
Modifié le 21 avril 2017 à 19:10
C'est comme les Cafetières de ton tuto ( la classe mère) et les 2 classes filles ( les cafetières avec filtre et celles avec dosette)
Lorsque j'explore les partitions j'ajoute un objet ClassPartionLogique
Je ne sais pas si la partition est NTFS ( donc classe fille ClassPartitionNTFS) ou FAT( donc classe fille ClassPartitionFAT)
Je n'ai pas fait la distinction entre les partitions FAT 16, FAT 32 et exFAT
Une fois la partition explorée je le sais mais je ne peux pas faire une List(of) avec 2 paramètres pour le of
Lorsque je sélectionne une partition dans la listview je sais quel est l'objet ClassPartitionlogique et si il est NTFS ou FAT ( donc quelle sera la classe fille à prendre en compte)
La classe PartitionNTFS dérivant de ClassPartitionlogique ( tout comme la ClassPartitionFAT) je ne sais pas comment renseigner un objet ClassPartitionNTFS qui aurait les propriétés de la Partition logique sélectionnée
Quelque chose comme PartionNTfs = un objet ClassPartitionNTFS avec toutes les propriétés de l'objet ClassPartitionlogique sélectionné
21 avril 2017 à 19:30
Si dans la liste de Partition, tu ajoutes des NTFS et des FAT
, parce que même si PartitionLogique est stockée comme une Partition, elle a été instanciée comme NTFS.
Dans l'autre sens, à savoir, je crée des Partitions et au cas par cas j'en ferai des NTFS ou des FAT, ça ne marche pas.
La raison est que chaque Partition a instanciée comme une Partition. En poussant un peu plus loin, il faut voir que le fait d'instancier un objet va bloquer dans la mémoire un (des) espaces pour lui.
Par exemple, une personne a un nom, une date de naissance et des numéros de téléphones, l'instanciation va bloquer un peu de place pour toute la chaine d'héritage ascendante, une place pour une string, une place pour une date et une place pour une liste d'entier. Cette liste d'entier est elle-même un objet qui est prête à pointer vers des emplacements d'entiers.
Au fur et à mesure que tu ajoutes des numéros, tu instancies d’abord un entiers, qui va se placer quelque part dans la mémoire et on signale à la liste que cet emplacement va se remplir est lié à elle.
C'est comme ça qu'un objet peut être dans plusieurs collections.
Donc quand tu instancies une Partition, y a pas l’emplacement pour ClusterMFt.
L'idéal serait donc d'instancier dès le départ la bonne classe.
Si ça n'est vraiment pas possible, alors il faut que tu instancies une NTFS qui "copie" une Partition.
Par exemple avec un constructeur qui prend une Partition en paramètres.
Y'a 2 bémols:
Ça peut se solutionner en supprimant la Partition de la liste et en y ajoutant la NTFS
Attention lors de la copie des champs, ça ne se comporte pas forcément comme on le pense quand on à des types références et des types valeurs.
Pour les types références, la copie fait pointer vers la référence initiale, et donc toute modification dans Partition sera sera effective dans NTFS et vice et versa.
Pour les types valeurs, la copie crée une nouvelle valeur et chaque instance a les siennes autonomes.
21 avril 2017 à 20:38
Merci pour ces éclaircissements
Là ce soir je n'ai plus le temps car j'ai du monde à la maison
Je te dirais ce qu'il en est plus tard !
bonne soirée
Modifié le 22 avril 2017 à 17:46
J'ai fait comme tu proposais
Dans une Classe Data générale j'ai défini ces 3 propriétés
Quand j'explore mon Pc j'obtiens une List(of ClassData.ClassPatitionLogique)
Lorsque je sélectionne une partition j'ai donc un objet PartitionLogique
Selon le système de fichiers je me sers de PatitionFAT ou PartitionNTFS avec un constructeur qui prend PartitionLogique en paramètre
Les faits des 2 instances de PartitionLogique ne me gène pas . Il me sert même car c'est dans PartitionLogique que je recherche la liste des clusters libres . Et cette liste existe en FAT et en NTFS et je m'en sers dans d'autres feuilles du projet avec PartitionLogique comme objet
Je ne me sers pas du polymorphisme dans ma liste d'origine
Ceci m'a permis de faire de l'héritage entre PartitionLogique et ses 2 classes filles ( PartitionFAT et PatitionNTFS)
Donc sujet résolu : un grand merci Whismeril
22 avril 2017 à 18:56