Je ne suis pas positif que j'utilise code> code> correctement. Je suis très nouveau à OOP et beaucoup de la documentation sur MSDN suppose, je comprends le lingo que je ne fais pas toujours.
J'ai créé les classes ( itemData code> et
matériaux code >) Dans le cadre d'une nouvelle demande de création d'articles. Les deux classes ont de nombreuses autres propriétés, mais elles ont été simplifiées pour cet exemple. P>
Public Class CreateNewItem
Public NewItem As New ItemData
Private Sub AssignMaterialID(FamilyID As String)
Dim MaterialCount As Long = NewItem.Material.LongCount
NewItem.Material.Add(MaterialCount + 1)
NewItem.Material(MaterialCount + 1).MaterialID = "ITEM000101"
NewItem.Material(MaterialCount + 1).UnitofMeasure= "CASE"
End Sub
EndClass
3 Réponses :
Bonjour essayer le tableau au lieu de collections, En outre, il semble que vous ayez oublié le type de la variable p>
Dim matériau () en tant que chaîne p>
espoir fonctionne bien ... P>
Je ne pense pas que Array me permet d'attribuer des propriétés, ce qui signifie que mon programme devra garder une trace de l'élément rempli ou non. Ai-je tort?
Lorsque vous créez un tableau d'un type (n'importe quel type), vous pouvez toujours utiliser n'importe quelle propriété de cette classe. Vous pouvez utiliser une gamme de "itemData" afin que chaque élément de la matrice ait son sur la collecte de matériaux, vous pouvez faire ce que vous voulez.
Vous devez créer une instance de la classe de matériaux et la définir, comme ceci.
NewItem.Material.Add(New Material With {.MaterialID = "ITEM000101", .UnitofMeasure = "CASE"}) NewItem.Material.Add(New Material With {.MaterialID = "ITEM000102", .UnitofMeasure = "BOX"})
La meilleure option à mon avis serait de définir le constructeur d'accepter des arguments pour renseigner des champs dans la classe code> matériau CODE>, puis créer facilement des objets et les ajouter à la liste, comme ci-dessous:
Imports System Module Program Sub Main(args As String()) Dim newItem As New ItemData newItem.Material.Add(New Material("ITEM000101", "CASE")) ' etc. End Sub End Module Public Class ItemData Public FamilyID As String Public Description As String Public Material As New List(Of Material) End Class Public Class Material ' All your code can be simplified Public Property MaterialID As String Public Property UnitofMeasure As String Public Sub New(MaterialID As String, UnitofMeasure As String) Me.MaterialID = MaterialID Me.UnitofMeasure = UnitofMeasure End Sub End Class
Merci. J'ai fait simplifier la classe de matériaux. Je ne suis pas sûr de savoir pourquoi je pensais que cela avait besoin de l'ensemble de l'obtention et de la création (c'est ma nouveauté à OOP montrant). Quant au constructeur, il existe des lots et de nombreux attributs - et non seulement les deux que j'ai énumérées - et les attributs sont ajoutés à différents moments via le processus de création d'éléments, certains d'entre eux sont facultatifs, etc. J'ai une solution de travail, mais en utilisant toutefois tout L'aide que j'ai reçue ici. Merci à tout le monde!
@ Mavryk76 Vous êtes les bienvenus. Vous devriez marquer la réponse, vous pensez vous aider le plus, comme accepté (coche verte à gauche).
Il y a mille choses qui pourraient être dites à ce sujet. Quelques: 1) Ceci:
Public FamayID en tant que chaîne code> n'est pas une propriété, est un champ. Vous voudrez peut-être le transformer dans une propriété auto réadonnée:
Public Readonly Propriété familyId comme chaîne code>, il ne peut donc être défini que dans le constructeur de classe. Probablement la même chose pour le champ code> (code>. 2) Ceci:
Public _MaterialID en tant que chaîne code> est un champ de support, utilisé par la propriété
matériauid code>. Il doit être déclaré
privé code> (non accessible de l'extérieur de la classe). Le générateur de code aurait dû faire cela pour vous, lorsque vous avez entré
Prop code> +
onglet code>.
3) Lorsque vous souhaitez ajouter un nouvel objet de matériau à la liste des matériaux de la classe code> itemData code>, vous devez ajouter un nouvel objet code> objet code>, pas un numéro i>: c'est une liste
(de matériau) code>, pas une liste
(de long) code>. Créez un nouveau matériau:
Dim ItemAaterial en tant que nouveau matériau () avec {.maaterialid = "[Quelqu'un ID]" ", .Unitofmeasure =" cas "(...)} code>. Ensuite, ajoutez-le:
newitem.materials.add (itemmaterial) code> 4)
UnitOfmeAsure code> devrait être un
énumérateur code> (...)
Je vous remercie. J'ai ajusté mes publicités publiques à des propres privées car la justification a du sens; J'ai toujours besoin de penser à l'autre partie RE: Constructeur de classe (Termes Google pour demain).
Nope b>. Les propriétés doivent être
Public Code>, les définir
privé code> défaite le but d'avoir des propriétés dans ce cas.
Readonly code> et
privé code>, deux choses différentes. Le constructeur de classe est tout simplement
Sub Nex () code>. Vous pouvez avoir un constructeur comme celui-ci:
Sub NOUVEL PUBLIC (ID en tant que chaîne, une description en tant que chaîne) CODE>, vous ne pouvez donc créer qu'une nouvelle classe si vous avez déjà une pièce d'identité et une description à attribuer à la nouvelle. objet. Dans le contrateur, vous définissez ensuite le
famautoryid code> et
description code> Propriétés. Depuis qu'ils sont réadis, ils ne peuvent être définis que dans le constructeur de classe.
Je choisirais un nom différent pour votre liste (de matériel) dans votre classe ItemData. Peut-être que les matériaux comme le pluriel indiqueraient une collection de quelque nature que ce soit.
Merci encore. Cela fonctionne comme prévu. Une partie de la hangup pour moi était que je n'ai pas toutes les valeurs des propriétés à l'époque que je crée du matériel et même en utilisant votre méthode (jusqu'à ce que je puisse passer du résultat), je ne pouvais pas voir où un index a été attribué pour se référer plus tard quand je Je voulais remplir ces détails. Je suis bon maintenant, merci beaucoup!