Skip to content

Instantly share code, notes, and snippets.

@CarbonHeartDev
Created March 4, 2019 13:19
Show Gist options
  • Save CarbonHeartDev/8af662bc2e3e325e4f38a485335b43ae to your computer and use it in GitHub Desktop.
Save CarbonHeartDev/8af662bc2e3e325e4f38a485335b43ae to your computer and use it in GitHub Desktop.
Spiegazione getters e setters

C# Getters e Setters in poche parole

Nella programmazione orientata agli oggetti esporre pubblicamente i campi di una classe "nudi e crudi" è sconsigliato in quanto se in futuro si volessero implementare delle verifiche sui suddetti campi (ad esempio assicurarsi che rientrino in un range e lanciare un eccezione in caso contrario) diventa più complicato. La soluzione consiste nell'incapsulare i campi che si vogliono esporre in un metodo getter ed eventualmente se si vuole permettere all'utente la modifica di un campo in un setter.

Java e C++ impongono un approccio "tradizionale" e molto verboso al problema ad esempio:

Double x = triangolo.getBase();
triangolo.setAltezza(y);

C# offre una soluzione più elegante al problema

using System;

class Persona{
	public string Nome_Cognome{get;set;} 
	//Inserendo [accesso] [tipo] [nome_campo]{get;set;} si ottiene una proprietà automatica che offre dei semplici getters/setters di default che eventualmente possono essere arricchiti in futuro
	public DateTime DataNascita{
		get{
		return DataNascita;
		}
		set{
			if(DataNascita > DateTime.Now){
				throw(new ArgumentException());
			}
			else{
				DataNascita = value;
		}
		}
	}
	//Questo secondo costruttore è stato affinchè il getters funzioni normalmente mentre il setter verifichi la data inserita prima di settarla
	
	public TimeSpan eta{
		get{
		return DateTime.Now - DataNascita;
	}
	} 
	//Le proprietà possono essere anche di sola lettura (o scrittura) e non linkate ad alcun campo ma "virtuali"
}

Nel codice le proprietà si usano come normali variabili ad esempio

Persona prova = new Persona();
prova.Nome_Cognome="Emiliano Sandri";
prova.DataNascita= new DateTime(1998,9,23,0,0,0);
Console.WriteLine(prova.eta);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment