I love this book, it's not the usual 'how to learn by building a web store'. The chapters are arranged by questions and the detailed answers are much more practical as a learning tool and a reference for those experienced with C#
Steven Leech
Steven Leech
Sr. Technical Architect
I’m currently reading it, and am amazed by the clear and in-depth treatment of the subjects. A must-read for every developer. Especially considering the price, it’s an incredibly high quality/price ratio.
Arno Tolmeijer
Arno Tolmeijer
Senior Consultant

Why should I Purchase this eBook?

  • Solid Foundation and Handy Reference Guide

    C# has been around for a very long time, but its constant growth means there’s always more to learn. Organized around concepts, this eBook aims to provide a concise, yet solid foundation in C# and .NET. Use these concepts to deepen your existing knowledge, to learn new features OR to crack your next .NET Interview.

  • Available in multiple reading formats

    If you use an e-reader, it's probably a Kindle or an iPad. This 500 pages eBook is available in PDF, ePub (iPad) and Mobi (Kindle).

  • Latest information on C# and .NET

    C# 7 and .NET Core have introduced plenty of new features for the modern developer. This book covers most of the new language features and enhancements in C# 6.0, C# 7.0, C# 8.0 and .NET Core (including v3.0). We believe this knowledge will make you a better C# developer, and help you in your projects.

  • Discounted Price

    The eBook comes with a Limited-time discount. Utilize this offer and purchase it today!

I’ve read a big part of your writing, I like it. Straight forward writing, good layout and format and easy to read.

I am looking forward to the next part..
Rene van Kwawegen
Rene van Kwawegen
Lead Mechanical
I can truly recommend the book. I've been developing for more than 30 years and have been through many books on many topics. I really like the no nonsense way in which you set out the intricacies of C#.
Nel Prinsloo
Nel Prinsloo
Senior Software Developer
Thank you for the great book. It really is a great tool to gain some fundamental knowledge about C#.Congrats to the team of dotnetcurry and the authors of the book.
Pavel Savov
Pavel Savov
Software Developer

Table of Contents

  • Section I - .NET and Common Language Runtime (CLR)

    Q1. Which platforms can I develop applications for using the .NET framework?

    Q2. How is .NET Core different from the .NET framework?

    Q3. What is .NET Standard and why does it matter to me?

    Q4. How can I create a .NET Standard library and use it from different runtimes?

    Q5. What is the Roslyn compiler and how can I use it?

    Q6. How did .NET framework evolve since version 1.0?

    Q7. How does the version of .NET and C# affect compatibility?

    Q8. What should I know about Garbage Collection in .NET?

    Q9. What is the best way to consume third party libraries in .NET?

    Q10. What are strong-named assemblies and how do I create them?

    Section II - The Type System

    Q11. How are value and reference types different?

    Q12. What is the difference between classes and structs?

    Q13. What is boxing and unboxing?

    Q14. Why are nullable types applicable only to value types?

    Q15. How are enumeration types supported in C#?

    Q16. How can multi-dimensional data be modelled using arrays?

    Q17. What are some of the less commonly used C# operators?

    Q18. How can method parameters be passed by reference?

    Q19. When does using anonymous types make sense?

    Q20. What does it mean that C# is a type safe language?

    Q21. How can dynamic binding be implemented in C#?

    Section III - Classes and inheritance

    Q22. What is polymorphism and how to implement it in C#?

    Q23. What is the meaning of individual accessibility levels?

    Q24. What are the advantages and disadvantages of abstract classes over interfaces?

    Q25. When should one explicitly implement an interface member?

    Q26. What does the 'new' modifier on a method mean?

    Q27. How to correctly override the Equals method?

    Q28. When and how to overload operators?

    Q29. How do delegates and events differ?

    Q30. What's special about the IDisposable interface?

    Q31. How do finalizers work?

    Q32. What is the purpose of static class members?

    Q33. When are extension methods useful?

    Q34. What are auto-implemented properties and why are they better than public fields?

    Q35. What are expression-bodied members?

    Section IV - String manipulation

    Q36. When can string interpolation be used instead of string formatting?

    Q37. How do locale settings affect string manipulation?

    Q38. When can string manipulation performance suffer and how to avoid it?

    Section V - Generics and Collections

    Q39. How can Generics improve code?

    Q40. How to implement a generic method or class?

    Q41. What are generic type constraints?

    Q42. How does the compiler handle the IEnumerable interface?

    Q43. What is covariance and contravariance?

    Q44. How to implement a method returning an IEnumerable?

    Q45. What advantages do collection classes have over arrays?

    Q46. Why are there so many collection classes and which one should I use?

    Q47. What problem do concurrent collections solve?

    Q48. How are immutable collections different from other collections?

  • Section VI - LINQ

    Q49. What is the basic structure of a LINQ query?

    Q50. How is LINQ query syntax translated to C# method calls?

    Q51. How to express inner and outer joins using LINQ?

    Q52. Which set manipulation operations are available in LINQ?

    Q53. How can LINQ query results be aggregated?

    Q54. How can LINQ query results be grouped?

    Q55. How can LINQ query results be reused without reevaluating?

    Q56. When and how is a LINQ query executed and how does this affect performance?

    Q57. How are lambda expressions used in LINQ queries?

    Q58. When should my function return IQueryable and when IEnumerable?

    Section VII - Parallel and Asynchronous programming

    Q59. What are the differences between concurrent, multithreaded and asynchronous programming?

    Q60. Which Timer class should I use and when?

    Q61. How to create a new thread and manage its lifetime?

    Q62. What is a critical section and how to correctly implement it?

    Q63. How to manage multiple threads in .NET framework?

    Q64. What abstractions for multithreaded programming are provided by the .NET framework?

    Q65. What is the recommended asynchronous pattern in .NET?

    Q66. What is an Asynchronous programming model?

    Q67. What is an Event-based asynchronous pattern?

    Q68. In what order is code executed when using async and await?

    Q69. What is the best way to start using asynchronous methods in existing code?

    Q70. What are some of the common pitfalls when using async and await?

    Q71. How are exceptions handled in asynchronous code?

    Q72. What are the best practices for asynchronous file operations?

    Section VIII - Serialization and Reflection

    Q73. What types of serialization are supported in the .NET framework?

    Q74. What is reflection and what makes it possible?

    Q75. What are potential dangers of using reflection?

    Q76. When to create custom attributes and how to inspect them at runtime?

    Section IX - C# 6, 7

    Q77. How has C# changed since its first version (C# v1.0 to 7.0)?

    Q78. How to upgrade older versions of C# code to C# 6.0?

    Q79. How did tuple support change with C# 7?

    Q80. What are local functions and when can they be useful?

    Q81. What is pattern matching and how is it supported in C# 7?

    Q82. What is a discard and when can it be used?

    Q83. What improvements for asynchronous programming have been introduced in C# 7?

    Q84. How was support for passing values by reference expanded in C# 7?

    Q85. How to handle Errors in C# (v6, v7)

    Q86. What Functional Programming Features are supported in C#


    Q87. What are the major new features in C# 8?

    Q88. How are .NET Core and .NET Standard evolving?


About the Author

Damir Arh has many years of experience with software development and maintenance; from complex enterprise software projects to modern consumer oriented mobile applications. Although he has worked with a wide spectrum of different languages, his favourite language remains C#. In his drive towards better development processes he is a proponent of test driven development, continuous integration and continuous deployment. He shares his knowledge by speaking at local user groups and conferences, blogging, and writing articles. He has received the prestiguous Microsoft MVP award for developer technologies for 7 times in a row.


In his spare time, he's always on the move: hiking, geocaching, running, and sport climbing.

You can follow him on twitter @damirarh or read his tutorials at https://www.dotnetcurry.com/author/damir-arh.


About the Technical Reviewer

Yacoub Massad is a software developer and architect that works mainly with Microsoft technologies. Currently, he works at Zeva International where he uses C#, .NET, and other technologies to create eDiscovery solutions. He is interested in learning and writing about software design principles that aim at creating maintainable software.

You can follow him on twitter @yacoubmassad and view his blog posts at criticalsoftwareblog.com