Oggetto non istanziato nonostante il costruttore: dove sbaglio?

di il
4 risposte

Oggetto non istanziato nonostante il costruttore: dove sbaglio?

Ho nel Form1.cs:
namespace FlyingSkyUp
{
    public partial class Form1 : Form
    {
        //Istanza per oggetti "globali"
        C_PianoDiVolo IlPianoDiVolo = new C_PianoDiVolo();

        public Form1()
        {
            InitializeComponent();
ecc..
e ho la classe C_PianoDiVolo.cs:
namespace FlyingSkyUp
{
    public class C_PianoDiVolo
    {
        private string DepIcao;
        private string DestIcao;
        private ArrayList Route;
 
        public C_PianoDiVolo() //Costruttore di istanza
        {
            DepIcao = "";
            DestIcao = "";
            ArrayList Route = new ArrayList();
        }

        public void ImpostoIlFL(string[] sFileLetto)
        {
            foreach (string sRiga in sFileLetto)
            {
                try
                {
                    this.Route.Add("sTesto");   <- ERRORE: Route non è istanziato ????? 
DOMANDA
Mi sono creato una istanza da Form1 in maniera che sia visto da tutti i componenti di Form1 che ne avranno bisogno.
Quando creo questo oggetto (C_PianoDiVolo), ho pensato di farmi un costruttore personale, che dovrebbe prepararmi ArrayList pronto da usare.
E quando mi richiamo il metodo ImpostoIlFL di C_PianoDiVolo mi ritrovo Route (l'ArrayList) non istanziato (cioè null !).

Ovvio che il mio ragionamento è sbagliato altrimenti c# non mi darebbe errore.. per cui nel mio ragionamento, dove sbaglio ?
Devo ANCHE istanziare la "Route" in "public partial class Form1 : Form" ?
Questo però non ha senso !
Io "voglio" che quando viene creato il C_PianoDiVolo, con il costruttore venga automaticamente creata la Route pronta per essere utilizzata.

DOMANDA 2:
Perché se istanzio "IlPianoDiVolo" dentro "public Form1()" mi dice che:
Errore CS0103 Il nome 'IlPianoDiVolo' non esiste nel contesto corrente ??
Potrò istanziare un oggetto dove mi pare ?

4 Risposte

  • Re: Oggetto non istanziato nonostante il costruttore: dove sbaglio?

    Riguardando il codice, trovo l'errore nel costruttore:
    ArrayList Route = new ArrayList();
    che in forma corretta deve essere: Route = new ArrayList();

    A questo punto, però mi spiegate la differenza tra scrivere nel costruttore:
    ArrayList Route = new ArrayList();
    Route = new ArrayList();

    per piacere ?
  • Re: Oggetto non istanziato nonostante il costruttore: dove sbaglio?

    Perché hai due «ArrayList Route»? Appena sopra non hai mica messo «string DestIcao»...
  • Re: Oggetto non istanziato nonostante il costruttore: dove sbaglio?

    Osservazione giusta. Grazie.
  • Re: Oggetto non istanziato nonostante il costruttore: dove sbaglio?

    jockerfox ha scritto:


    A questo punto, però mi spiegate la differenza tra scrivere nel costruttore:
    ArrayList Route = new ArrayList();
    Route = new ArrayList();
    Nella prima riga, stai dichiarando nel costruttore una variabile locale di nome Route e di tipo ArrayList, che vai a inizializzare con una lista vuota. L'identificatore è uguale a quello usato per il campo privato, quindi quest'ultimo viene nascosto dalla variabile locale che ha la precedenza, quindi stai di fatto inizializzando la variabile e non il campo.

    Nella seconda riga, stai correttamente inizializzando il campo privato: non c'è un tipo davanti al nome, e nemmeno var come parola chiave, quindi si presuppone che ti stai riferendo - come è giusto che sia - al campo privato della classe.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
4 risposte