Strings, basics of the Unicode character set (UTF-8 and UTF-16 encodings, combining characters, etc.), Unicode support in .NET + support for application localization and related challenges.
Threads, synchronization primitives (lock, Monitor, WaitHandle subclasses), WinForms (WPF) threading model.
.NET memory model, volatile memory operations and memory fences, lock-free and wait-free data structures on .NET platform.
Programming with futures/promises, TPL (Task Parallel Library).
Basic network APIs (BSD sockets).
Asynchronous method calls and non-blocking programming paradigms (async/await).
Declarative programming in .NET: LINQ (to Objects), declarative program parallelization (PLINQ).
.NET reflection, assembly metadata, CIL code/assembler, dynamic code generation at runtime (lambda functions and Expression Trees, CodeDOM, Mono.Cecil).
Data persistence and object serialization: binary serialization, protocol buffers
Introduction to aspect oriented programming (AOP).
Application domains and principles of sandboxing in managed environment.
Advanced network APIs: remote method invocation (.NET Remoting).
Support for dynamic programming languages (IronPython, etc.) in .NET, implementing dynamic objects in C#.
In this course students will explore .NET platform's advanced programming techniques and internals, and specialized parts of standard .NET libraries. Successful completion of the course should give students a good knowledge of the wide range of features provided by the .NET platform, and allow them to effectively use the gained knowledge in real-life projects developed for .NET platform.
Course attendees are expected to have a good knowledge of the C# language and the key .NET platform principles as covered by the course "NPRG035 Programming in C# Language".