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...