C#.NET Advanced


This course is for anyone who wants to apply their fundamantal C# knowledge to build more practical applications  using the new .NET Framework 4.6 and the C# language. This course will provide you with a comprehensive application of C# and should serve as a complete reference throughout your coding career.

Category: Tag:
Product Description

C#.NET 6 on .NET 4.6

Prerequisites / Further Training

Also have a look at our .NET Bootcamp and save

Intended Audience

This course provides a comprehensive foundation in the C# programming language and the core aspects of the .NET platform plus overviews of technologies built on top of C# and .NET (ADO.NET and Entity Framework, Windows Communication Foundation [WCF], Windows Presentation Foundation [WPF], and ASP.NET [WebForms, MVC, WebAPI]). Once you digest the information presented in course, you’ll be in a perfect position to apply this knowledge to your specific programming assignments, and you’ll be well equipped to explore the .NET universe further.

Day 1 topics are covered in review mode as these are covered in detail on the C#.NET Beginner Course – it is required and therefore assumed that you are up to speed on at least 66.7% of day 1 topics.

After this course you should be able to

  • Understand the .NET 4.6 platform and C# 6.
  • Discover the ins and outs of the leading .NET technology.
  • Find complete coverage of XAML, .NET 4.6 and Visual Studio 2015 together with an overview of the new Windows Runtime
  • Students will gain a solid foundation of object-oriented development techniques, attributes and reflection, generics and collections as well as advanced topics such as CIL opcodes and emitting dynamic assemblies.


On the same level as Microsoft : 20483B . View the MCPD Course Schedules

Further Training

OO Analysis and Design
Design Patterns

Course Material

Up to date course material is provided

Course info

Day 1
Day 1 topics are covered in review mode as these are covered in detail on the C#.NET Beginner Course – it is required and assumed that you are up to speed on at least 66.7% of day 1 topics.

Overview of C#.NET Beginner 

  • An Initial Look at the .NET Platform
  • Introducing the Building Blocks of the .NET Platform (the CLR, CTS, and CLS)
  • Additional .NET-Aware Programming Languages
  • An Overview of .NET Assemblies
  • Understanding the Common Type System
  • Understanding the Common Language Specification
  • Understanding the Common Language Runtime
  • The Assembly/Namespace/Type Distinction
  • Exploring an Assembly Using ildasm.exe
  • The Platform-Independent Nature of .NET
  • Building C# Applications on the Windows OS
  • Building .NET Applications Beyond the Windows OS
  • The Anatomy of a Simple C# Program
  • An Interesting Aside: Some Additional Members of the System.Environment Class
  • The System.Console Class
  • System Data Types and Corresponding C# Keywords
  • Working with String Data
  • Narrowing and Widening Data Type Conversions
  • Understanding Implicitly Typed Local Variables
  • C# Iteration Constructs
  • Decision Constructs and the Relational/Equality Operators
  • Methods and Parameter Modifiers
  • Understanding C# Arrays
  • Understanding the enum Type
  • Understanding the Structure (aka Value Type)
  • Understanding Value Types and Reference Types
  • Understanding C# Nullable Types


  • Introducing the C# Class Type
  • Understanding Constructors
  • The Role of the this Keyword
  • Understanding the static Keyword
  • Defining the Pillars of OOP
  • C# Access Modifiers
  • The First Pillar: C#’s Encapsulation Services
  • Understanding Automatic Properties
  • Understanding Object Initialization Syntax
  • Working with Constant Field Data
  • Understanding Partial Classes

Inheritance / Polymorphism

  • The Basic Mechanics of Inheritanc
  • Revising Visual Studio Class Diagrams
  • The Second Pillar of OOP: The Details of Inheritance
  • Programming for Containment/Delegation
  • The Third Pillar of OOP: C#’s Polymorphic Support
  • Understanding Base Class/Derived Class Casting Rules
  • The Master Parent Class: System.Object


  • Ode to Errors, Bugs, and Exceptions
  • The Role of .NET Exception Handling
  • The Simplest Possible Example
  • Configuring the State of an Exception
  • System-Level Exceptions (System.SystemException)
  • Application-Level Exceptions (System.ApplicationException)
  • Processing Multiple Exceptions
  • Debugging Unhandled Exceptions Using Visual Studio


  • Understanding Interface Types
  • Defining Custom Interfaces
  • Implementing an Interface
  • Invoking Interface Members at the Object Level
  • Interfaces As Parameters
  • Interfaces As Return Values
  • Arrays of Interface Types
  • Implementing Interfaces Using Visual Studio
  • Explicit Interface Implementation
  • Designing Interface Hierarchies
  • The IEnumerable and IEnumerator Interfaces
  • The ICloneable Interface
  • The IComparable Interface

Day 2

The core C# Advanced Course starts here

Collections and Generic

  • The Motivation for Collection Classes
  • The Problems of Nongeneric Collections
  • The Role of Generic Type Parameters
  • The System.Collections.Generic Namespace
  • The System.Collections.ObjectModel Namespace
  • Creating Custom Generic Methods
  • Creating Custom Generic Structures and Classes
  • Constraining Type Parameters

Delegates / events / lambdas

  • Understanding the .NET Delegate Type
  • The Simplest Possible Delegate Example

Sending Object State Notifications Using Delegates

  • Understanding Generic Delegates
  • Understanding C# Events
  • Understanding C# Anonymous Methods
  • Understanding Lambda Expressions

Advanced language features

  • Understanding Indexer Methods
  • Understanding Operator Overloading
  • Understanding Custom Type Conversions
  • Understanding Extension Methods
  • Understanding Anonymous Types
  • Working with Pointer Types

LINQ to Objects

  • LINQ-Specific Programming Constructs
  • Understanding the Role of LINQ
  • Applying LINQ Queries to Primitive Arrays
  • Returning the Result of a LINQ Query
  • Applying LINQ Queries to Collection Objects
  • Investigating the C# LINQ Query Operators
  • The Internal Representation of LINQ Query Statements

Day 3

Object Lifetime

  • Classes, Objects, and References
  • The Basics of Object Lifetime
  • The Role of Application Roots
  • Understanding Object Generations
  • Concurrent Garbage Collection Prior to .NET 4.0
  • Background Garbage Collection Under .NET 4.0 and Beyond
  • The System.GC Type
  • Building Finalizable Objects
  • Building Disposable Objects
  • Building Finalizable and Disposable Types
  • Understanding Lazy Object Instantiation

Assembly configuration

  • Defining Custom Namespaces
  • The Role of .NET Assemblies
  • Understanding the Format of a .NET Assembly
  • Building and Consuming Custom Class Library
  • Understanding Private Assemblies
  • Understanding Shared Assemblies
  • Consuming a Shared Assembly
  • Configuring Shared Assemblies
  • Understanding Publisher Policy Assemblies
  • Understanding the <codeBase> Element
  • The System.Configuration Namespace
  • The Configuration File Schema Documentation

Reflection and attributes

  • The Necessity of Type Metadata
  • Understanding Reflection
  • Building a Custom Metadata Viewer
  • Dynamically Loading Assemblies
  • Reflecting on Shared Assemblies
  • Understanding Late Binding
  • Understanding the Role of .NET Attributes
  • Building Custom Attributes
  • Assembly-Level Attributes
  • Reflecting on Attributes Using Early Binding
  • Reflecting on Attributes Using Late Binding
  • Putting Reflection, Late Binding, and Custom Attributes in Perspective
  • Building an Extendable Application

Dynamic types / DLR

  • The Role of the C# dynamic Keyword
  • The Role of the Dynamic Language Runtime
  • Simplifying Late-Bound Calls Using Dynamic Types
  • Simplifying COM Interoperability Using Dynamic Data
  • COM Interop Using C# Dynamic Data

Processes, appdomains

  • The Role of a Windows Process
  • Interacting with Processes Under the .NET Platform
  • Understanding .NET Application Domains
  • Interacting with the Default Application Domain
  • Creating New Application Domains
  • Understanding Object Context Boundaries
  • Summarizing Processes, AppDomains, and Context


  • Motivations for Learning the Grammar of CIL
  • Examining CIL Directives, Attributes, and Opcodes
  • Pushing and Popping: The Stack-Based Nature of CIL
  • Understanding Round-Trip Engineering
  • Understanding CIL Directives and Attributes
  • .NET Base Class Library, C#, and CIL Data Type Mappings
  • Defining Type Members in CIL
  • Examining CIL Opcodes
  • Building a .NET Assembly with CIL
  • Understanding Dynamic Assemblies

Day 4


  • The Process/AppDomain/Context/Thread Relationship
  • A Brief Review of the .NET Delegate
  • The Asynchronous Nature of Delegates
  • Invoking a Method Asynchronously
  • The System.Threading Namespace
  • The System.Threading.Thread Class
  • Manually Creating Secondary Threads
  • The Issue of Concurrency
  • Programming with Timer Callbacks
  • Understanding the CLR ThreadPool
  • Parallel Programming Using the Task Parallel LibraryParallel LINQ Queries (PLINQ)
  • Asynchronous Calls with the async Keyword

File IO / Object Serialization

  • Exploring the System.IO Namespace
  • The Directory(Info) and File(Info) Types
  • Working with the DirectoryInfo Type
  • Working with the Directory Type
  • Working with the DriveInfo Class Type
  • Working with the FileInfo Class
  • Working with the File Type
  • The Abstract Stream Class
  • Working with StreamWriters and StreamReaders
  • Working with StringWriters and StringReaders
  • Working with BinaryWriters and BinaryReaders
  • Watching Files Programmatically
  • Understanding Object Serialization
  • Configuring Objects for Serialization
  • Choosing a Serialization Formatter
  • Serializing Objects Using the BinaryFormatter
  • Serializing Objects Using the SoapFormatter
  • Serializing Objects Using the XmlSerializer
  • Serializing Collections of Objects
  • Customizing the Soap/Binary Serialization Process

ADO.NET Part 1

  • A High-Level Definition of ADO.NET
  • Understanding ADO.NET Data Providers
  • Additional ADO.NET Namespaces
  • The Types of the System.Data Namespace
  • Abstracting Data Providers Using Interfaces
  • Creating the AutoLot Database
  • The ADO.NET Data Provider Factory Model
  • Understanding the Connected Layer of ADO.NET
  • Working with Data Readers
  • Building a Reusable Data Access Library
  • Creating a Console UI–Based Front End
  • Understanding Database Transactions

ADO.NET Part 2

  • Understanding the Disconnected Layer of ADO.NET
  • Understanding the Role of the DataSet
  • Working with DataColumns
  • Working with DataRows
  • Working with DataTables
  • Binding DataTable Objects to Windows Forms GUIs
  • Working with Data Adapters
  • Adding Disconnected Functionality to AutoLotDAL.dll
  • Multitabled DataSet Objects and Data Relationships
  • The Windows Forms Database Designer Tools
  • Isolating Strongly Typed Database Code into a Class Library
  • Programming with LINQ to DataSet

Entity Framework

  • Understanding the Role of the Entity Framework
  • Code First from an Existing Database
  • Using the Model Classes in CodeHandling Database Changes
  • AutoLotDAL Version 4
  • Test-Driving AutoLotDAL
  • Entity Framework Migrations
  • Revisiting the Transaction Test
  • Concurrency
  • Interception
  • ObjectMaterialized and SavingChanges Events
  • Deploying to SQL Server


  • A Tale of Two XML APIs
  • Members of the System.Xml.Linq Namespace
  • Working with XElement and XDocument
  • Manipulating an In-Memory XML Document

Day 5

Introducing Windows Communication Foundation

  • A Potpourri of Distributed Computing APIs
  • The Role of WCF
  • Investigating the Core WCF Assemblies
  • The Visual Studio WCF Project Templates
  • The Basic Composition of a WCF Application
  • The ABCs of WCF
  • Building a WCF Service
  • Hosting the WCF Service
  • Building the WCF Client Application
  • Simplifying Configuration Settings
  • Using the WCF Service Library Project Template
  • Hosting the WCF Service Within a Windows Service
  • Invoking a Service Asynchronously from the Client
  • Designing WCF Data Contracts

Windows Presentation Foundation

  • The Motivation Behind WPF
  • The Various Flavors of WPF
  • Investigating the WPF Assemblies
  • Building a WPF Application Without XAML
  • Building a WPF Application Using Only XAML
  • Transforming Markup into a .NET Assembly
  • Understanding the Syntax of WPF XAML
  • Building a WPF Application Using Code-Behind Files
  • Building WPF Applications Using Visual Studio
  • Building a Custom XAML Editor with Visual Studio

Programming with WPF Controls

  • A Survey of the Core WPF Controls
  • A Brief Review of the Visual Studio WPF Designer
  • Controlling Content Layout Using Panels
  • Building a Window’s Frame Using Nested Panels
  • Understanding WPF Commands
  • Understanding Routed Events
  • A Deeper Look at WPF APIs and Controls
  • Building the Ink API Tab
  • Introducing the Documents API
  • Building the Documents Tab
  • Introducing the WPF Data-Binding Model
  • Understanding the Role of Dependency Properties
  • Building a Custom Dependency Property

WPF Graphics Rendering Services

  • Understanding WPF’s Graphical Rendering Services
  • Rendering Graphical Data Using Shapes
  • WPF Brushes and Pens
  • Applying Graphical Transformations
  • Working with the Visual Studio Transform Editor
  • Rendering Graphical Data Using Drawings and Geometries
  • Working with Vector Images
  • Rendering Graphical Data Using the Visual Layer

WPF Resources, Animations, Styles, and Templates

  • Understanding the WPF Resource System
  • Working with Object (Logical) Resources
  • Understanding WPF’s Animation Services
  • Authoring Animations in XAML
  • Understanding the Role of WPF Styles
  • Logical Trees, Visual Trees, and Default Templates
  • Building a Control Template with the Trigger Framework

Notifications, Commands, Validation, and MVVM

  • Introducing Model-View-ViewModel
  • The WPF Binding Notification System
  • Validation
  • Using Data Annotations
  • Creating Custom Commands
  • Fully Implementing MVVM
  • Updating AutoLotDAL for MVVM
  • Full MVVM Example
  • Duration and pricing
    • Full-time over 5 days (R10995)
    • Part-time over 4 weeks (2 nights per week, 3 hour sessions) (R11995)
    • Part-time over 8 Saturdays, 3 hour sessions (R11995)
    • Please note : For part-time courses we do not have a fixed schedule and you will be placed on a waiting list until we get a group of 4+ together. Please book with no dates on the bookings form. This will automatically put you on the waiting list. We will confirm with you as soon as we have a part-time group together.
    • Distance-learning over up to 3 months (R9995)
    • International exams are not included in the course price.
    • Prices exclude Vat for Vat-registered companies


    1. Upon completion of this course we will issue you with attendance certificate to certify your attendance and / or completion of the prescribed minimum examples.
    2. You may sit for our competency assessment test and on passing you will obtain our competency certificate.
    3. Our competency assessment can be booked and taken by someone who has not attended the course at a cost of R2950.


    You can download the course registration form on our home page or by clicking here


    You may download a pdf copy of this page by clicking on the pdf icon at the top of the page.


    Please email us


    On the calendar below. If your browser doesn’t display the calendar below, please click on this link or try using Google Chrome, alternatively please enquire via our Contact Us page.







Print Friendly, PDF & Email
Additional Information

Distance-Learning, Full-time, Part-Time