Alors :
this, c'est un mot clef permettant de designer l'instance courante d'un objet.
Exemple
class Personne
{
public string nom = ""
public Personne(string nom)
{
this.nom = nom;
}
}
Ici, tu utilises this dans le constructeur pour bien faire la différence entre la variable d'instance nom et la variable passé en paramètre.
On utilise this plus souvent pour passer une instance en paramètre. Et c'est tout. Dans ton exemple, théoriquement, j'aurai nommé mes variables autrement pour ne pas utiliser this, car c'est assez trompeur, on ne sait plus trop de quoi on parle vu que les variables ont le même nom, même si this est là pour faire la différence.
Exemple :
foo.bar(this);
Pour résumer, this c'est la représentation de ton objet dans sa propre classe.
Hors de la classe tu fais :
Type obj = new type();
obj.doIt();
Dans la classe tu feras :
this.doIt();
Ensuite les propriétés.
public int Age
{
get;
set;
}
Ca c'est une propriété par défaut, tu peux en faire à partir de C# 3 il me semble. Tout ce qu'elle fait, (et c'est possible de le voir avec de la réflexion) c'est créer deux méthodes et une variable:
get_age() et set_age(int v) qui travaillent avec une variable dont on ne connait pas le nom peu importe.
En fait, ça te permet de travailler plus vite avec une variable, en respectant l'encapsulation et compagnie.
Au lieu de faire obj.SetAge(10); tu n'as qu'à faire : obj.Age = 10;
C'est TOUT !
Ensuite si tu veux faire quelques vérifications, alors tu vas devoir écrire un peu plu de code comme dans tes exemples.
public int _Age = 0;
public int Age
{
set { _Age = value; }
get { return _Age; }
}
Ici comme au dessus, deux méthodes sont crées, et tu as cette fois décrit leur corps. Il faut savoir que ce que je viens d'écrire là est tout à fait similaire (voir identique) à ce que j'ai écrit plus haut (get; set;)
Si je le transforme en méthode ça équivaut à :
set_age(int value)
{
_Age = value;
}
get_age()
{
return _Age;
}
Comme tu peux le voir, c'est assez simple, et value n'est en fait qu'un mot clef qui correspond au paramètre de la méthode set.
L'utilité de décrire le corps d'un set ou d'un get est simple, tu peux faire quelques vérifications dans ton accesseur.
Exemple
set
{
if ( value > 10 ) _Age = value;
else _Age = 0;
}
Voila.
J'espère que tu as tout bien compris 
Si tu as des questions, hésite pas.