Accessible from your Account page after purchase. Requires the free QuickTime Player software.
Videos can be viewed on: Windows 8, Windows XP, Vista, 7, and all versions of Macintosh OS X including the iPad, and other platforms that support the industry standard h.264 video codec.
Register your product to gain access to bonus material or receive a coupon.
2+ Hours of Video Instruction
Overview
How well do you know C#? Put your knowledge to the test with Bill Wagner’s C# Puzzlers video LiveLesson!
Description
The C# language is more than a decade old, and that maturity means more complexity. This added complexity increases the chances for mistakes and unmaintainable code. Bill regularly presents “C# Puzzlers” at user groups and CodeMash events. All the “puzzlers” in this LiveLesson have been put to the test with intermediate level developers who tried to break, workaround, and outsmart the code.
C# Puzzlers exposes common misconceptions that can occur when developers are unclear about how language features interact or lack understanding about how a single features works. Using the fun “Puzzler” format, Bill demonstrates these misconceptions via screencasts using small code samples. He gives you an opportunity to figure it out first, and then explores different ways to modify the code until its behavior is correct.
This collection of Puzzlers is divided into six sections. Each section delves into the rules that govern the aspects of the C# language that developers find most confusing:
How the Puzzlers work:
1) Each puzzle shows a reasonably small piece of code, and then asks viewers to guess what the code does.
2) You take the opportunity to try and figure it out.
2) Bill then demonstrates what the code does, and why many developers believe it would behave differently.
3) To close out the lesson he discusses how you could write the code differently to accomplish the same result without the misconceptions.
About the Instructor
Bill Wagner has spent his entire career in the software industry, spanning both technical and business roles. Bill’s technical time is spent between curly braces, primarily with C#. He’s the author of the bestselling “Effective C#”, now in its second edition, and “More Effective C#”. His articles have appeared in MSDN Magazine, the C# Developer Center, Visual C++ Developer’s Journal, Visual Studio Magazine, ASP.NET Pro, .NET Developer’s Journal and more. He’s written hundreds of technical articles and actively blogs on technical and business topics. Bill is also a Microsoft Regional Director.
He spent eight years as a self-employed consultant before co-founding SRT Solutions with Dianne Marsh. Over the past decade, SRT Solutions has grown into a premier software development company, amassing 4 FastTrack awards (2011, 2010, 2008, 2007), the Michigan 50 Companies to Watch award (2011), and making the Inc 500/5000 list (2011 and 2012). Bill was also awarded Automation Alley’s Emerging Technology Leader award in 2011.After a successful exit from SRT Solutions, Bill now spends his time helping developers improve their skills.
Skill Level
This topic should be of interest to anyone developing using the C# language. This includes Windows Server, Windows 8, Windows Phone, MonoDroid, and Mono Touch developers at the following skill level:
Intermediate
Topics Covered
Who Should Take This Course
Developers
C# programmers
Course Requirements
Some experience with C# programming.
Table of Contents
The introductory Puzzler introduces the format using a puzzle, and discusses some of the nuances of object construction.
Lesson I. Generics
Generics are still one of the most important aspects of the .NET environment and the C# language. So many of the features we use every day are built upon generics in one way or another. Generics are still a complicated feature. You must create code whose types are not known until runtime. The compiler must generate IL with minimal information about the actual types that will be represented by the type parameters. The JIT must convert that IL into executable code and plug in the real types for the type parameters. Finally, the meta data carried along must include information that enables reflection and other advanced techniques to work correctly.
Puzzle 1 - Operations on Generic Type Parameters
What information gets conveyed, and what information cannot get used when a real type is substituted for a type parameter?
Puzzle 2 - Generics and Specializations
What happens when you create overloads for generic methods?
Puzzle 3 - Generics and Variance
How do generics and arrays differ with respect to variance?
Puzzle 4 - Generics, Constraints and Overloads
How does the compile choose between different candidate generic methods?
Lesson II. Method Resolution
The rules that govern method resolution in C# are necessarily complex. The features the community has asked for and the team has implemented have only added more complexity to those rules with each new release of the C# language. If you want to be a strong C# developer, you need to have at least a working knowledge of these rules.
Puzzle 5 - Overloading base class methods
What happens when derived classes create overloads of base class methods?
Puzzle 6 - Overloaded methods and null parameters
How does the compiler resolve overloaded methods when you use null parameters?
Puzzle 7 - Overloaded methods and null parameters revisited
What if the overloaded parameter types are unrelated?
Puzzle 8 - Overloaded methods and null parameters and Generics
What if one of the methods is generic?
Lesson III. Named and Optional Parameters
Named and optional parameters sound so simple at first examination. But this feature has significant implications on other features in the language. It also has significant implications on areas as fundamental as how parameters are passed to called methods.
Puzzle 9 - Optional parameters and constructors
When is a default constructor not a default constructor?
Puzzle 10 - Optional Parameters and Overloads
Which is the better match?
Puzzle 11- Evaluation of Named Parameters
When do parameters get evaluated? Why does it matter?
Lesson IV. LINQ
LINQ introduced totally new ways of constructing and organizing programs. There were new rules related to how you wrote algorithms. Those rules still cause developers confusion in some cases.
Puzzle 12 - Bound Variables
When are LINQ queries evaluated?
Puzzle 13 - Method calls in LINQ queries
How does LINQ process expressions and method calls?
Lesson V. Value and Reference Semantics
Reference types and value types behave differently in many important ways. They also behave the same in many other ways. It can be difficult to keep those differences in mind as you get too accustomed to the similarities.
Puzzle 14 - Value type Semantics
When does copying values hurt?
Puzzle 15 - Value types and events
What happens when value types receive event notifications?
Lesson VI. Dynamic Programming in C#
Dynamic extensions move many of the common tasks that were performed by the compiler to runtime libraries. The interplay between static and dynamic typing creates new complications in C# programs. This section discusses some of the most common ways where static and dynamic types interact in ways that can be surprising.
Puzzle 16 - Dynamic Types and Extension Methods
How do dynamic types interact with extension methods?
Puzzle 17 - Anonymous types and Dynamic Methods
Under what conditions can anonymous types be treated dynamically?
Puzzle 18- Creating Dynamic Types in C#
Why would you pick different ways to implement dynamic types?
About LiveLessons Video Training
LiveLessons Video Training series publishes hundreds of hands-on, expert-led video tutorials covering a wide selection of technology topics designed to teach you the skills you need to succeed. This professional and personal technology video series features world-leading author instructors published by your trusted technology brands: Addison-Wesley, Cisco Press, IBM Press, Pearson IT Certification, Prentice Hall, Sams, and Que. Topics include: IT Certification, Programming, Web Development, Mobile Development, Home and Office Technologies, Business and Management, and more. View all LiveLessons on InformIT at: http://www.informit.com/livelessons
Get all the downloads for the puzzles and solutions for C# Puzzler’s LiveLesson.
The introductory Puzzler introduces the format using a puzzle, and discusses some of the nuances of object construction.
I. GenericsGenerics are still one of the most important aspects of the .NET environment and the C# language. So many of the features we use every day are built upon generics in one way or another. Generics are still a complicated feature. You must create code whose types are not known until runtime. The compiler must generate IL with minimal information about the actual types that will be represented by the type parameters. The JIT must convert that IL into executable code and plug in the real types for the type parameters. Finally, the meta data carried along must include information that enables reflection and other advanced techniques to work correctly.
Puzzle 1 - Operations on Generic Type ParametersWhat information gets conveyed, and what information cannot get used when a real type is substituted for a type parameter?
Puzzle 2 - Generics and SpecializationsWhat happens when you create overloads for generic methods?
Puzzle 3 - Generics and VarianceHow do generics and arrays differ with respect to variance?
Puzzle 4 - Generics, Constraints and OverloadsHow does the compile choose between different candidate generic methods?
II. Method ResolutionThe rules that govern method resolution in C# are necessarily complex. The features the community has asked for and the team has implemented have only added more complexity to those rules with each new release of the C# language. If you want to be a strong C# developer, you need to have at least a working knowledge of these rules.
Puzzle 5 - Overloading base class methodsWhat happens when derived classes create overloads of base class methods?
Puzzle 6 - Overloaded methods and null parametersHow does the compiler resolve overloaded methods when you use null parameters?
Puzzle 7 - Overloaded methods and null parameters revisitedWhat if the overloaded parameter types are unrelated?
Puzzle 8 - Overloaded methods and null parameters and GenericsWhat if one of the methods is generic?
III. Named and Optional ParametersNamed and optional parameters sound so simple at first examination. But this feature has significant implications on other features in the language. It also has significant implications on areas as fundamental as how parameters are passed to called methods.
Puzzle 9 - Optional parameters and constructorsWhen is a default constructor not a default constructor?
Puzzle 10 - Optional Parameters and OverloadsWhich is the better match?
Puzzle 11- Evaluation of Named ParametersWhen do parameters get evaluated? Why does it matter?
IV. LINQLINQ introduced totally new ways of constructing and organizing programs. There were new rules related to how you wrote algorithms. Those rules still cause developers confusion in some cases.
Puzzle 12 - Bound VariablesWhen are LINQ queries evaluated?
Puzzle 13 - Method calls in LINQ queriesHow does LINQ process expressions and method calls?
V. Value and Reference SemanticsReference types and value types behave differently in many important ways. They also behave the same in many other ways. It can be difficult to keep those differences in mind as you get too accustomed to the similarities.
Puzzle 14 - Value type SemanticsWhen does copying values hurt?
Puzzle 15 - Value types and eventsWhat happens when value types receive event notifications?
VI. Dynamic Programming in C#Dynamic extensions move many of the common tasks that were performed by the compiler to runtime libraries. The interplay between static and dynamic typing creates new complications in C# programs. This section discusses some of the most common ways where static and dynamic types interact in ways that can be surprising.
Puzzle 16 - Dynamic Types and Extension MethodsHow do dynamic types interact with extension methods?
Puzzle 17 - Anonymous types and Dynamic MethodsUnder what conditions can anonymous types be treated dynamically?
Puzzle 18- Creating Dynamic Types in C#Why would you pick different ways to implement dynamic types?