C# theory and practice