We may earn an affiliate commission when you visit our partners.
Dmitri Nesteruk

This course presents a collection of interesting/unusual case studies where C# is used to solve a particular problem. This course is 100% practical, and demonstrates mainly the practical applications of C# in building solutions to common problems.

The main themes covered in this course are:

Read more

This course presents a collection of interesting/unusual case studies where C# is used to solve a particular problem. This course is 100% practical, and demonstrates mainly the practical applications of C# in building solutions to common problems.

The main themes covered in this course are:

  • Numerics — the specifics of how to work with numeric types in .NET, with a focus on SIMD data types and operations.

  • Reflection — how to operate reflection mechanisms to investigate assemblies and types, how to create types and invoke their members. Also a look at the practical use of reflection for working with attributes.

  • Memory Management — a discussion of latest C# features for high performance computation, such as the passing of value types by reference, ref structs and Span<T>.

  • Extension Methods — a seemingly simple mechanism has plenty of advanced uses.

In addition, this course comes with a section dedicated to assorted topics that also showcase advanced uses of C#. These topics include:

  • Exploiting IDisposable — shows how you can abuse the IDisposable/using mechanism in order to dynamically define operations as pairs of start/end calls. Useful for things like simple performance measurement.

  • Continuation Passing Style — demonstrates how you can define complex algorithms in terms of sequentially invoked methods with customized return types indicating the result of the operation.

  • Local Inversion of Control shows that sometimes inversion of control happens at a local scale. Here we use extension methods to invert control on a bunch of different data types, providing useful functionality.

  • Beyond the Maybe Monad — even though C# introduced the ?. operator in order to chain null checks together, the classic monad implementation, based on extension methods, is still relevant, as it can also handle other scenarios.

  • Mnemonics — not so much a C# language feature but rather an interesting way of defining huge sets of similar code templates that can be expanded quickly to the code constructs you need the most.

Course Pre-Requisites

  • Good understanding of C#

  • Understanding of object-oriented programming (OOP)

  • Experience writing real-world C# applications

Course Organization

  • 100% hands-on

  • Demonstrated either in Visual Studio or using the Kinetica rendering engine

  • Demos are single .CS files

  • Heavy use of IDE features

  • Ad-hoc use of 3rd-party packages

Enjoy.

Enroll now

What's inside

Learning objectives

  • Apply sophisticated c# solutions to problems
  • Explore different programming styles and approaches

Syllabus

An overview of what we'll encounter in this course.

Learn to work with numeric data types (including SIMD ones)

An overview of what we'll learn in this section.

Read more

An overview of built-in integral types.

An integer types with arbitrary precision.

An overview of the two IEEE754 floating-point types (float and double) and the specifics of their operation.

A specialized fixed-point type suitable for financial calculations.

An overview of how SIMD works and why you should care.

A look at .NET support for SIMD intrinsics.

A look at a general-purpose SIMD-enabled type.

A summary of what we've learned about numerics in .NET.

An overview of Reflection in .NET.

A look at System.Type, the cornerstone of all things related to Reflection.

We explore System.Type and find out what kind of information can be gleaned about types.

Given a System.Type, we can construct it — either by using System.Activator or by invoking a constructor.

A look at how to call methods using reflection.

Learn how to work with delegates and events using reflection.

You need reflection to work with attributes.

A summary of the things we've learned when working with reflection.

An overview of the principle of dynamic programming and the 'dynamic' keyword.

Introducing the 'dynamic' keyword.

A base class for all dynamic objects.

Practical example of dynamic object for parsing XML.

A dynamically growing object.

A look at how dynamic can help us implement the Visitor pattern.

A summary of what we've learned about dynamic programming in C#.

Think extension methods aren't 'advanced'? Think again.

A look at all the different types you can extend.

You can write ordinary and generic extension methods on synthesized ValueTuple types.

Extension methods typically add behavior. Let's take a look at how to add data persistence, too.

A look at some of the patterns you encounter when writing extension methods.

Fluent interface chaining is useful for a lot more than null checks!

A summary of the things we've learned about extension methods.

An overview of this section of the course.

A look at the 'in' keyword used for parameters.

Ref readonly variables.

We look at 'ref struct' and why it was needed for Span<T>.

A practical demonstration of Span<T>.

A summary of what we've learned about the C# memory management features.

Default interface methods allow us to create mixins for consumption via duck typing.

A look at a programming style that can help with structuring your code.

Inversion of Control doesn't have to be application-wide. The principle also applies to little things.

How can you write mundane code faster? Use mnemonics, of course!

A summary of the things we've learned in this course.

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Explores SIMD data types and operations, which are essential for high-performance computing and numerical analysis in modern C# applications
Covers reflection mechanisms, enabling developers to dynamically inspect and manipulate types, which is useful for building extensible and configurable applications
Discusses modern .NET memory management techniques, such as passing value types by reference and using Span, which are crucial for optimizing performance and reducing memory allocations
Requires a good understanding of C# and object-oriented programming, suggesting it is designed for developers with some prior experience
Demonstrates advanced uses of extension methods, which can help developers write more expressive and maintainable code by adding functionality to existing types
Emphasizes hands-on demos using Visual Studio, indicating that learners will need access to this IDE to fully participate in the course

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Advanced c# concepts and practical use

According to students, this course provides excellent, in-depth coverage of advanced C# topics often overlooked elsewhere, particularly focusing on practical, hands-on examples. Learners found the course content highly relevant for experienced developers looking to deepen their understanding of subjects like Numerics, Reflection, Memory Management (Span<T>), and advanced Extension Methods. The demonstrations are clear and effective, making complex topics accessible. While the pace is quick and requires a solid C# foundation, many appreciated the challenge and the level of detail, noting it's one of the best advanced C# resources available.
Difficult material, but worth the effort.
"It's a challenging course, no doubt, but the payoff in understanding is huge."
"Required focused attention, but the insights gained into C# internals were incredibly valuable."
"The difficulty level is appropriate for an 'advanced' course. It pushes you to think deeper."
"Some sections needed rewatching, but the effort was rewarded with a much better grasp of advanced features."
Material is well-structured and high quality.
"The course is exceptionally well-made. The explanations are clear, and the topics are logically structured."
"Content quality is top-notch. It's evident a lot of expertise went into creating this material."
"One of the best advanced programming courses I've taken online."
"The demos were well-prepared and demonstrated the concepts effectively."
"I found the explanations concise yet comprehensive, covering the necessary details without being overly academic."
Focuses heavily on practical examples and code.
"Loved the hands-on approach. Demonstrations using real code were crucial for understanding these advanced concepts."
"The course is 100% practical as advertised. Seeing the concepts applied in code made all the difference."
"The examples are very clear and well-explained. Following along with the code demos was easy and effective."
"Each topic was accompanied by practical code examples that illustrated the concepts perfectly."
"This course isn't just theory; it shows you how to apply advanced C# features to solve actual problems."
Covers C# topics rarely found in other courses.
"Excellent course. Covers many advanced topics that aren't usually covered in other courses, such as SIMD and Span<T>."
"The course material dives deep into fascinating, often-overlooked aspects of C# like advanced reflection and memory management."
"Really appreciated the sections on Numerics, Reflection, and Span<T>. These are areas I wanted to understand better, and the course delivered."
"Finally, a course that covers genuinely advanced C# concepts beyond LINQ and async/await. This is gold for experienced devs."
"I learned so much about the nuances of C# features like 'in' parameters and 'ref struct' that I didn't fully grasp before."
Not for beginners; assumes existing C# skill.
"This course is definitely not for beginners. You need a solid foundation in C# and OOP to keep up."
"As the title suggests, it's advanced. Make sure you meet the prerequisites before attempting this."
"The pace is quite fast, assuming you are already comfortable with C# fundamentals."
"Some topics are quite complex and require prior experience with real-world C# applications to fully appreciate."
"If you're not already proficient in C#, you might struggle with the depth and speed of the material."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Advanced Topics in C# with these activities:
Review Object-Oriented Programming (OOP) Principles
Reinforce your understanding of OOP principles, as the course assumes a solid foundation in this area. This will help you better grasp the advanced C# concepts presented.
Show steps
  • Review the core concepts of OOP: encapsulation, inheritance, and polymorphism.
  • Practice implementing these concepts in C# with simple examples.
  • Identify real-world scenarios where OOP principles are applied.
Review 'C# 8.0 and .NET Core 3.0 – Modern Cross-Platform Development'
Expand your knowledge of C# 8.0 and .NET Core 3.0, which are used in the course. This book will provide a broader context for the advanced topics covered.
Show steps
  • Read the chapters relevant to the course topics, such as memory management and reflection.
  • Experiment with the code examples provided in the book.
  • Compare the book's explanations with the course materials.
Implement custom extension methods
Practice writing extension methods to gain a deeper understanding of their capabilities and limitations. This will help you appreciate the advanced uses of extension methods discussed in the course.
Show steps
  • Create extension methods for common data types like strings and integers.
  • Implement generic extension methods for collections.
  • Explore different patterns for writing extension methods, such as fluent interfaces.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Review 'Pro C# 7: With .NET and .NET Core'
Gain a deeper understanding of the C# language by reviewing a comprehensive book on C# 7. This will provide a broader context for the advanced topics covered in the course.
View Pro C# 7 on Amazon
Show steps
  • Read the chapters relevant to the course topics, such as reflection and memory management.
  • Compare the book's explanations with the course materials.
  • Identify any differences or updates in later versions of C#.
Blog post on Span<T>
Solidify your understanding of Span<T> by writing a blog post explaining its purpose, benefits, and usage. This will force you to articulate the concepts in your own words and identify any gaps in your knowledge.
Show steps
  • Research Span<T> and its relationship to memory management in C#.
  • Write a clear and concise explanation of Span<T> for a technical audience.
  • Include code examples demonstrating how to use Span<T> effectively.
  • Publish your blog post on a platform like Medium or your personal website.
Implement a custom attribute
Apply your knowledge of reflection and attributes by creating a custom attribute and using reflection to access its properties. This will provide hands-on experience with these advanced C# features.
Show steps
  • Define a custom attribute with properties relevant to your project.
  • Apply the attribute to classes, methods, or properties in your code.
  • Use reflection to retrieve the attribute and access its properties at runtime.
  • Use the attribute's properties to modify the behavior of your application.
Contribute to a .NET open-source project
Apply your advanced C# skills by contributing to a .NET open-source project. This will provide real-world experience and expose you to different coding styles and project management practices.
Show steps
  • Identify a .NET open-source project that aligns with your interests and skills.
  • Review the project's documentation and contribution guidelines.
  • Find an issue to work on or propose a new feature.
  • Submit a pull request with your changes.
  • Respond to feedback from the project maintainers.

Career center

Learners who complete Advanced Topics in C# will develop knowledge and skills that may be useful to these careers:
Software Engineer
A software engineer is involved in the design, development, testing, and maintenance of software systems. This course, focused on practical C# applications, may be useful for software engineers who need to tackle unusual or complex challenges. The course's coverage of topics like numerics, reflection, and memory management may help build a foundation for creating robust and efficient solutions. The hands-on nature of the course, with demos in Visual Studio, is also excellent exposure. If you want to be a Software Engineer, consider this course.
Software Developer
A software developer creates and maintains software applications. This course, with its focus on advanced C# topics, may be useful for developers seeking to deepen their understanding of the language and apply it to solve complex problems. The course's exploration of numerics, reflection, and memory management helps build a foundation for writing high-performance C# code. Someone wanting to become a Software Developer may enjoy the hands-on demonstrations. They may also like working with Visual Studio or the Kinetica rendering engine.
High-Performance Computing Engineer
A high performance computing (HPC) engineer optimizes software for execution on parallel and distributed systems. This course, with its emphasis on numerics (including SIMD) and .NET memory management, may be extremely valuable. Topics may help build a strong foundation for HPC engineers using C#. If you are interested in becoming an HPC Engineer, you may find the hands-on examples in single .CS files helpful.
Application Developer
Application developers design, develop, and implement software applications. This course, with its emphasis on practical C# applications and advanced language features, may be useful for application developers who wish to expand their capabilities. The course helps developers build a foundation in areas such as reflection, extension methods, and memory management. This may be necessary to create efficient and maintainable applications. Someone interested in becoming an Application Developer should find the section on assorted topics showcasing advanced uses of C# very interesting.
Financial Software Developer
Financial Software Developers create software for trading, risk management, and other financial applications. This course, particularly the section on numerics (including fixed-point types for financial calculations) and memory management, may be helpful. It helps build a foundation for those developers working with C# in the financial sector. If you want to be a Financial Software Developer, the course's exploration of memory management techniques is particularly relevant for high-frequency trading systems.
Software Architect
Software architects design the structure of software systems. This course, with its deep dive into advanced C# topics and programming styles, can be very helpful for architects. It may help build a strong foundation in language features critical for complex systems. For Software Architects, the sections on extension methods and memory management are especially relevant.
Algorithm Developer
Algorithm developers design and implement algorithms for solving complex computational problems. This course, with its focus on numerics, memory management, and continuation passing style, may be useful for algorithm developers who need to implement high-performance algorithms in C#. The course helps build a foundation for optimizing code for speed and efficiency. Those looking to become Algorithm developers may enjoy the demos presented in single .CS files.
Game Developer
Game developers create video games for various platforms. This course, with its exploration of C# applications, may be useful for game developers who use the Unity game engine, which relies heavily on C#. The course's discussion of SIMD data types, reflection, and the dynamic keyword may help build a foundation for optimizing game performance and creating dynamic game content. If you are a Game Developer, consider how the course's focus on exploiting IDisposable and Continuation Passing Style may be beneficial.
Systems Architect
A systems architect designs and oversees the implementation of complex software systems. This course may be helpful for those seeking to improve systems design by exploring advanced C# techniques and applying them to real-world problems. The study of memory management and reflection helps build a foundation for architects to optimize system performance and create flexible architectures. Becoming a Systems Architect takes extensive experience, but this course can give you an advantage.
Database Programmer
Database programmers write code to interact with databases, often focusing on performance and data integrity. This course, particularly the sections on numerics and memory management, may be valuable for those database programmers who work with C#. The course helps build a foundation in optimizing data access and manipulation using C#. If you're a Database Programmer, the section on mnemonics may be useful for managing large sets of code templates.
Software Consultant
Software consultants advise clients on technology solutions, often requiring a broad understanding of different languages and frameworks. This course, by providing a deep dive into advanced C# techniques, may be useful for consultants who need to recommend or implement C# based solutions. The course's exploration of various topics helps software consultants build a foundation for assessing the suitability of C# for specific projects and providing expert guidance. Someone wishing to become a Software Consultant will appreciate the instructor's use of 3rd party packages.
Robotics Engineer
Robotics engineers design, build, and program robots. This course, with its focus on C# applications, may be useful for robotics engineers who use C# for robot control and automation. The course's discussion of memory management techniques may help build a foundation for writing efficient and real-time control software. Considering a career as a Robotics Engineer? This course will expose you to the ad-hoc use of 3rd-party packages.
Compiler Developer
Compiler developers work on the creation and optimization of compilers and related tools. This course, with its exploration of reflection, memory management, and advanced C# features, may be valuable for those interested in compiler development. The course helps build a foundation for understanding how C# code is processed and optimized. If you become a Compiler Developer, you may find the discussion of the 'dynamic' keyword and its implementation particularly interesting.
Firmware Engineer
Firmware engineers develop low-level software that controls hardware devices. This course, with its focus on memory management in C#, may be useful for firmware engineers who need to optimize code for resource-constrained environments. The course helps build a foundation for writing efficient and reliable firmware. Someone who wishes to become a Firmware Engineer may enjoy the section on assorted topics showcasing advanced uses of C#.
Quantitative Analyst
A quantitative analyst, or quant, uses mathematical and statistical methods to analyze financial data and develop trading strategies. While this role often requires advanced degrees (Master's or PhD), this course, specifically the sections on numerics and SIMD, may be useful for quants who use C# for development. The course helps build a foundation for optimizing numerical computations and developing efficient trading algorithms. For someone who wishes to be a Quantitative Analyst, the use of mnemonics can be very helpful for code generation.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Advanced Topics in C#.
Provides a comprehensive overview of C# 8.0 and .NET Core 3.0, covering many of the language features and platform capabilities used in the course. It is particularly helpful for understanding the context and practical applications of advanced C# topics. While not strictly required, it serves as a valuable reference for solidifying your understanding of the material. It is commonly used as a textbook in academic settings.
Offers a deep dive into C# 7, covering many of the language features that are still relevant in later versions. It provides a solid foundation for understanding the evolution of C# and the rationale behind certain design decisions. While some features may be outdated, the core concepts and principles remain valuable. This book useful reference for understanding the historical context of C# development.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser