Yo,
Il va falloir savoir beaucoup, beaucoup de choses
En C# :
-La programmation concurrentielle afin de gérer plusieurs clients (multi-thread, async - les façons sont multiples en C# - l'asynchrone étant le plus facile et le plus efficace) ainsi que la synchronisation qui s'en suit (parce qu'au final, tu utiliseras des threads)
-La reflection te sera utile - l'émission (?) de code au runtime est éventuellement un plus (comme le weaving - avec Fody ou encore plus low level avec Cecil)
-Comprendre le GC (au moins la base : générations, LOC...), IDisposable, les ressources non managées (Socket...)
-Exception, try, catch, using
-POO & consorts (Interface, classe abstraite, polymorphisme, encapsulation etc..)
-Les delegates
-Les génériques
-Value type (struct), reference type (class), passage par copie, référence (ref, out)
-Les attributs
-Maîtrise de VS
Et tant d'autres choses...
Ailleurs:
-TCP (Protocole connecté, Nagle...tant de choses à dire sur TCP)
-RSA, AES
-AS3 - éventullement son bytecode, assez proche de l'IL de MS (CLR)
-Compilation JIT
-Base de données (SQL : Postgre, Oracle, MSSQL ou noSQL : mongo, redis etc...)
-Pathfinding (A*)
-"IA"
-Design patterns
-Principes SOLID
-Binaire (+ comprendre l'endianess)
C'est une liste non exhaustive qui doit lister 20% des choses que requis la conception d'un ému...bonne chance.