C# Syntassi
System.Console.WriteLine() 
//stampa a video il messaggio 
System.Console.ReadLine() 
//fa sì che l'applicazione aspetti che l'utente prema il tasto INVIO prima di terminare.

Dichiarazione di una classe

public class Persona
{
  string mNome;
  string mCognome;
  //Altre variabili...
 
  public Persona(string Nome, string Cognome)
  {
    //Imposta le proprietà iniziali della classe.
    mNome = Nome;
    mCognome = Cognome;
  }
 
  public void StampaMessaggio()
  { }
 
  private void Appoggio()
  { }
}
 
//Crea un oggetto p che è istanza della classe Persona 
Persona p = new Persona("Marco", "Minerva");

Setter e getter di un campo

Si fa così

public string Nome
{
  get { return mNome; }
  set
  {
    if (value == string.Empty)
      mNome = "(Nessun nome)";
    else
      mNome = value;
  }
}
 
//Si utilizzano così
Console.WriteLine(p.Nome); 
p.Nome = "Pippo";

Namespace

Più classi possono essere raggruppate in un unico namespace. Ad esempio:

namespace Prova
{
  public class Classe1
  { }
 
  public class Classe2
  { }
}
//Con questo costrutto, per dichiarare, ad esempio, un oggetto di tipo Classe1 è necessario scrivere:
Prova.Classe1 c1 = new Prova.Classe1();

Si possono definire namespace annidati, ad esempio:

namespace N1
{
  namespace N2
  {
    public class Classe1
    { }
 
    public class Classe2
    { }
  }
}
 
N1.N2.Classe1 c1 = new N1.N2.Classe1();
N1.N2.Classe2 c2 = new N1.N2.Classe2();

Per non dover indicare ogni volta i namespace in cui si trovano le classi che si stanno utilizzando, è possibile utilizzare la parola chiave using

using System;
 
public class HelloWorld
{
  public static void Main()
  {
    Console.WriteLine("Ciao Mondo!");
    Console.ReadLine();
  }
}

Tipi di dato

I tipi sono come quelli di java

//Il tipo struct permette di definire nuovi tipi di dati a partire da quelli esistenti:
public struct Persona
{
  public string Nome;
  public string Cognome;
}

ogni membro deve avere un modificatore di accesso (public, private, ecc.).

Ecco un esempio che utlizza una struct come una classe, ne definisce anche il costruttore

public class HelloWorld
{
  public struct Persona
  {
    public string Nome;
    public string Cognome;
 
    public Persona(string Nome, string Cognome)
    {
      this.Nome = Nome;
      this.Cognome = Cognome;
    }
 
    public string NomeCompleto
    {
      get { return Nome + " " + Cognome; }
    }
  }
 
  public static void Main()
  {
    Persona p = new Persona("Marco", "Minerva");
    System.Console.WriteLine("Ciao " + p.NomeCompleto + "!");
    System.Console.ReadLine();
  }
}

La differenza tra struct e class sta nel fatto che "Il tipo struct è adatto alla rappresentazione di oggetti leggeri […] Se ad esempio si dichiara una matrice di 1.000 oggetti [classi] Point, si allocherà ulteriore memoria per i riferimenti a ciascun oggetto. In questo caso la struttura risulta meno onerosa". Inoltre una struct può implementare interfacce ma non può ereditare.

Le enum consentono di associare nomi simbolici a costanti numeriche.

public enum Stati : byte
{
  Italia, America, Francia, Inghilterra //,...
}
 
Stati s = Stati.America;
System.Console.WriteLine("Stato selezionato: " + s.ToString());

Passaggio di parametri

  • in: passaggio per valore
  • ref e out: passaggio per riferimento. ref richiede che si inizializzi la variabile prima della chiamata del metodo, mentre con out è sufficiente dichiarare la variabile e passarla senza inizializzazione. In pratica con out è possibile inizializzare intere strutture dati dall'interno di un metodo.
// Se non specificato diversamente, il parametro è di tipo «in»
public void Calcola(int N){ N = 10; }
 
public void CalcolaOut(out int N){ N = 10; }
 
public void CalcolaRef(ref int N){ N += 1; }
Un possibile utilizzo di questi metodi è il seguente:
 
int i = 7;
Calcola(i); 
 
//All'uscita, i vale ancora 7
int i = 7;
CalcolaRef(ref i); 
 
//All'uscita, i vale i + 1 = 8
// i è solo dichiarata non inizializzata
int i;
 
// la passiamo con «out»
CalcolaOut(out i); 
 
//All'uscita, i vale 10

Ereditarietà

public class Studente : Persona
{
  private int mMatricola;
 
  public Studente(string Nome, string Cognome, int Matricola)
  : base(Nome, Cognome)
  {
    mMatricola = Matricola;

base usato in questo contesto richiama il costruttore della superclasse
Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License