Intermediate C# Programming 2 day remote one on one training course - £450 plus VAT

Please note:

Due to the current coronovirus situation this course is currently only available as a live remote one on one course.

Once things are back to normal we will be running public dates in London, Manchester, Sheffield, Leeds, Nottingham and Birmingham, as well as in-person one on one courses and private (closed) courses.

Click here to register your interest in this course and we will keep you informed when any new dates are added.


Take your C# skills to the next level with this popular course bringing you right up to date with the latest C# features. This follow-on to our popular Programming with C# course will introduce those with some C# experience to more advanced concepts such as generics, reflection, interfaces, indexers, and how to query collections with LINQ. It will also show you how to read/write data to/from a database using ADO.NET, or to/from XML. It will also cover Lists, lambda expressions, anonymous types, extension methods and more.


2 days


£450 plus VAT (£540 inc VAT) for our remote live one on one course, accessed over the internet - click here for details


We can arrange dates to suit you - please contact us for further details or to book this course.


Delegates should have a working knowledge of C#, to the level provided by our Programming with C# course. They certainly need to understand concepts such as classes, objects, methods and properties. If in doubt please contact us before booking.

Detailed course contents

Reflection and Custom Attributes

  • What is reflection?
  • The Type type
  • Getting the Type of a class or object
  • Using reflection to find out if a class is abstract or sealed
  • Viewing a type’s properties and methods
  • Other uses of reflection
  • Custom attributes
  • Uses of custom attributes
  • Creating custom attributes
  • Adding custom attributes to a class
  • Viewing the custom attributes of a class
  • Adding attribute properties
  • Using an attribute with properties
  • Adding attribute constructors
  • Viewing more details about the attributes


  • What are Indexers?
  • Declaring an Indexer
  • Using indexers
  • Overloaded Indexers


  • What is generics?
  • Uses for generics
  • Flexibility using generics
  • Substitution parameter naming convention
  • Type safety with generics
  • Using generics with a class


  • Lists
  • Creating a List
  • foreach loop with a List
  • Other supported methods and properties

Abstract behaviour in classes

  • Preventing instantiation from a class
  • Creating an abstract class
  • Members of an abstract class
  • Concrete and abstract methods


  • What is an interface?
  • Interface rules
  • Inheriting from an interface
  • Creating an interface
  • Properties of an interface
  • Methods in an interface
  • Basing a class on an interface
  • Basing an interface on an interface
  • Multiple inheritance
  • Interfaces as variable or parameter data types
  • The IComparable and IComparable interfaces

Lambda Expressions

  • Lambda Expressions
  • Replacing a method with a lambda expression

Object Initializers

  • C# Object Initializers
  • C# Object Initializer syntax
  • C# Object Initializer without constructor
  • C# Object Initializer with constructor

Partial classes

  • Partial classes

Implicitly typed local variables with var

  • Implicitly typed local variables
  • var examples

Extension methods

  • Extending a class without access to its code
  • Using static behaviour
  • Creating an extension method


  • What is a Delegate?
  • Creating a Delegate
  • Referencing a Method
  • Using a delegate
  • Multicasting
  • Creating a Multicasting Delegate
  • Scope
  • Removing Method References
  • Removing Method References - Multicasting


  • LINQ (Language INtegrated Query)
  • LINQ queries
  • How LINQ works
  • The query variable
  • LINQ query syntax
  • The from clause
  • The select clause
  • Returning a customised data type
  • The where clause
  • The orderby clause
  • The group clause
  • The Single method
  • Aggregate functions
  • Aggregate functions where no arguments are required
  • Aggregate functions where the object cannot be directly aggregated

LINQ extension methods

  • Extension Methods in System.Linq
  • Passing lambda expressions
  • Where and OrderBy
  • Combining methods


  • XML and .NET
  • The System.Xml namespace
  • Using XmlReader to read XML
  • Using XmlWriter to create XML
  • Using the DOM
  • Using XmlDocument
  • Using XmlDocument to create a new document
  • Using XmlDocument to create a document from a file
  • The GetElementsByTagName method
  • The SelectNodes method
  • Modifying an XML document
  • LINQ and XML
  • Creating XML with Linq
  • Using LINQ to query XML
  • Querying a sub-element
  • Serialising objects into XML
  • Default XML layout
  • Customising the default XML layout
  • Modifying XML output without access to the class code
  • Changing the name of the root element
  • Deserialising XML to an object
  • Class name different from the name of the root element

Connected data access with ADO.NET

  • What is ADO.NET?
  • ADO.NET namespaces
  • High level data access process
  • Creating a connection object
  • Storing connection strings in config files
  • Command objects
  • CommandType and CommandText
  • Command object methods
  • Disposing of resources
  • The using statement
  • ExecuteNonQuery
  • ExecuteScalar
  • ExecuteReader
  • Data readers
  • Using a Data Reader
  • Cleaning up after data readers
  • Command parameters
  • Adding parameters to commands
  • A command with parameters

ADO.NET disconnected data access

  • The DataTable Object
  • The DataColumn object
  • The DataRow object
  • Manually creating and filling a datatable
  • The Rows collection
  • The Columns collection
  • The DataSet object
  • Data adapters
  • Data adapter properties
  • Working with data locally
  • Filling a DataTable with a data adapter

Error handling

  • Review of basic exception handling (try .. catch.. finally)
  • The Exception Class
  • Catching the Exception instance
  • The Exception Message
  • More error handling
  • Basic Exception Handling
  • try .. catch
  • finally
  • The Exception Class
  • Catching the Exception instance
  • The Exception Message
  • Derived Exception Classes
  • FormatException
  • OverflowException
  • IndexOutOfRangeException
  • DivideByZeroException
  • Catching Multiple Exceptions
  • Exception Nesting
  • Throwing an Exception
  • Passing a message to the Exception class
  • Custom Exceptions
  • Defining Custom Exceptions
  • Throwing custom Exceptions
  • Custom Exception with constructor
  • Throwing a custom exception whose constructor takes arguments


  • What are the course times?
    • Most course days run from 9.30am to around 4pm, however as we are currently only offering one on one remote courses during the current crisis, we can be quite flexible if you would like to do different hours.

  • Do I need anything?
    • For our live remote one on one courses you only need a computer with the Chrome browser, and speakers or headphones to hear the instructor. When it comes time to do an exercises you can either connect to our computer to do them, or do them on your own computer. We will advise for your specific course what software you would need to do them on your own computer but don't worry, you can connect to ours if you prefer.

  • How can I pay?
    • Once you have booked you will receive a confirmation email, and shortly after that, an invoice. For online courses payment is required before the start of the course. Payment can be made by bank transfer (BACS etc), cheque or card.

Other courses