C# fundamentals