Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Passare dati tra classi
Forum - C# / VB.NET - Passare dati tra classi

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
fosforo (Normal User)
Expert


Messaggi: 334
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 14:45
Giovedì, 30/04/2020
Ciao
Domanda probabilmente banale.

Ho creato una classe
public void MyXML()

La classe fa parsing di un file XML.
I ChildNodes che mi interessano li metto in un string array.
string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];

Non riesco a far vedere l'array alla classe Form1.

Grazie






PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6060
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:55
Giovedì, 30/04/2020
Ma Form1 come interagisce con l'altra classe?

E perché deve "vedere" l'array? I dati in genere sono privati in una classe e resi disponibili all'esterno tramite apposite proprietà/metodi.

Se non dai maggiori informazioni si deve interpellare la "sfera di cristallo" ... ma è in riparazione ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 334
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 20:55
Giovedì, 30/04/2020
Grazie nessuno

Nella Form1 istanzio la classe
MyXMLXMLP = new MyXML();

Da Form1 pensavo di poter accedere all'array:
string miastringa= XmlCache [1,0]
ma non funziona.

Magari faccio un errore ma posto la classe MyXML.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Windows.Forms;

namespace cs_FolderSync
{
    class XMLparsing
    {
         public Array MyXML()
        {
            string Mypath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(Mypath + @"\11.xml");
            XmlNodeList xmlnode;
            string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];
            int i;
            //string str;
            xmlnode = xmlDoc.GetElementsByTagName("event"); //name XML element
            //InnerText(0)=InnerText(1)  start time=InnerText(2) clip_id=InnerText(3)
            // cycle for ChildNodes into array
            for (i = 0; i <= xmlnode.Count - 1; i++)
            {
                xmlnode.ChildNodes.Item(0).InnerText.Trim();
                _XmlCache[i, 0] = xmlnode.ChildNodes.Item(0).InnerText.Trim();
                _XmlCache[i, 1] = xmlnode.ChildNodes.Item(1).InnerText.Trim();
                _XmlCache[i, 2] = xmlnode.ChildNodes.Item(2).InnerText.Trim();
            }          
            return _XmlCache;
        }

    }    
}

Grazie anticipatamente

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6060
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:32
Giovedì, 30/04/2020
Ma scusa la classe si chiama

class XMLparsing

quindi che dici?

Semmai dovresti scrivere

             XMLparsing MyXMLXMLP = new XMLparsing();

            Array arr = MyXMLXMLP.MyXML();


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 334
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 9:36
Venerdì, 01/05/2020
Si è vero. Scusami
Sono solo test e faccio e rifaccio e alcune volte cambio nomi.
Ma il succo non cambia.

Il problema è che non riesco a esporre l'Array _XmlCache  alle altre classi.

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 867
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 9:48
Venerdì, 01/05/2020
Testo quotato

Postato originariamente da fosforo:

Si è vero. Scusami
Sono solo test e faccio e rifaccio e alcune volte cambio nomi.
Ma il succo non cambia.

Il problema è che non riesco a esporre l'Array _XmlCache  alle altre classi.



Devi studiare come si creano le Classi (Oggetti) nel OOP

  string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];

Devi dichiarare le proprietà di  string[,] _XmlCache come Public


Codice sorgente - presumibilmente VB.NET

  1. public  string[,] _XmlCache
  2. {
  3. get { return  _XmlCache; }
  4. set {  _XmlCache = value; }
  5. }


Ultima modifica effettuata da Ultimo il 01/05/2020 alle 9:58


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 334
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 12:45
Venerdì, 01/05/2020
Infatti.
Piano piano ci stavo arrivando.
Avevo capito che dovevo usare il Getter and Setter che ancora adesso capisco poco.

In rete trovo mille cose ma molto incasinate.
Hai da darmi un sito dove spiega molto semplicemente cos'è e come utilizzarli?


Grazie 1000

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 601
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:35
Venerdì, 01/05/2020
I consigli dati sono per scrivere un programma OOP, come si deve.
Capire e studiare è d'obbligo, i consigli di nessuno e Ultimo, se li metti in pratica, mantengono le variabili contenute nella Classe localizzate, evitando che altri parti del programma le modifichino, magari per errore.

C'è anche un metodo più diretto, che fa storcere un po' il naso a chi fa della programmazione OOP un sacro gral, ma siccome non è vietato, perseguibile.

Ti allego un esempio che fa nulla, solo per vedere come passare variabili e routine pubbliche tra le classi.


Carlo ha allegato un file: TestVariabiliFraClassi.zip (396725 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 01/05/2020 alle 13:49


in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6060
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:38
Venerdì, 01/05/2020
Testo quotato

Postato originariamente da Ultimo:

Testo quotato

Postato originariamente da fosforo:

Si è vero. Scusami
Sono solo test e faccio e rifaccio e alcune volte cambio nomi.
Ma il succo non cambia.

Il problema è che non riesco a esporre l'Array _XmlCache  alle altre classi.



Devi studiare come si creano le Classi (Oggetti) nel OOP

  string[,] _XmlCache = new string[xmlDoc.DocumentElement.ChildNodes.Count + 1, 3];

Devi dichiarare le proprietà di  string[,] _XmlCache come Public


Codice sorgente - presumibilmente VB.NET

  1. public  string[,] _XmlCache
  2. {
  3. get { return  _XmlCache; }
  4. set {  _XmlCache = value; }
  5. }





Devi studiare da un libro la teoria della OOP.

Altro che tutorial e siti. Lascia stare il linguaggio ed internet e STUDIA CORRETTAMENTE la TEORIA prima di tutto.
O avrai sempre una enorme confusione perché la questione non è semplice e i concetti complessi se non li studi.

Poi fai come vuoi


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo