Sono studente universitario ed all'università abbiamo approfondito bene il C con le sue struct... ma il Java è stato trattato in maniera fin troppo leggera e la teoria che ci sta dietro le classi del Java, ora che mi sto esercitando a programmare in C# (molto richiesto in ambito lavorativo), mi sarebbe stata molto comoda.
Ora stavo cercando di costruire una libreria per la costruzione di una tabella di Hash (già fatto in C con risultati eccellenti: 30+ all'esame di laboratorio) ma ammetto che l'uso di un array di struct è decisamente più semplice che usare due classi annidate come si dovrebbe fare in Java/C#.
Il codice in C# che ho prodotto fino a questo momento è il seguente:
codice:
public class Table
{
protected class Record
{
private string data;
private bool deleted;
public Record() //costruttore generico
{
this.data = "";
this.deleted = false;
}
public Record(string data) //costruttore specifico
{
this.data = data;
this.deleted = false;
}
public void add(string data)
{
if (deleted == true)
this.deleted = false;
this.data = data;
}
}
private int dimTable;
private static Record[] table;
public Table(int dimTable) //costruttore di Table
{
//dovrebbe creare n (dove n == dimTable) istanze di Record
table = new Record[dimTable];
this.dimTable = dimTable;
}
public void add(int idx, string data)
{
table[idx].add(data);
}
}
Di seguito invece posto il codice del Main che utilizza la libreria Table postata sopra:
codice:
namespace Project1
{
class main
{
static Table table = new Table(10);
public static void Main(string[] args)
{
table.add(0, "ciao");
Console.ReadLine();
}
}
}
Il compilatore mi compila correttamente il codice senza darmi alcunché riguardo ad errori di sintassi o balle simili... però quando arriva all'istruzione table.add(0, "ciao"); il compilatore si ferma alla funzione
codice:
public void add(int idx, string data)
{
table[idx].add(data);
}
e mi segnala l'errore NullReferenceException. (ed a quanto ho capito, sembra che Table non vada ad istanziare Record)
Ci ho sbattuto più volte la testa ma non sono riuscito a tirar fuori nessuna soluzione... non riesco proprio a capire dove sto sbagliando e che tipo di errore faccio se di distrazione (caldo afoso/poca concetrazione) o se è proprio un errore concettuale.
A questo punto spero che qualcuno di voi riesca ad illuminarmi e spiegarmi meglio. Ringrazio tutti quanti per l'aiuto didattico...