- ホーム
- > 洋書
- > 英文書
- > Computer / Languages
Full Description
"Shining a bright light into many of the dark corners of C# 3.0, this book not only covers the `how,' but also the `why,' arming the reader with many field-tested methods for wringing the most from the new language features, such as LINQ, generics, and multithreading. If you are serious about developing with the C# language, you need this book."-Bill Craun, Principal Consultant, Ambassador Solutions, Inc. "More Effective C# is an opportunity to work beside Bill Wagner. Bill leverages his knowledge of C# and distills his expertise down to some very real advice about programming and designing applications that every serious Visual C# user should know. More Effective C# is one of those rare books that doesn't just regurgitate syntax, but teaches you how to use the C# language."-Peter Ritchie, Microsoft MVP: Visual C# "More Effective C# is a great follow-up to Bill Wagner's previous book. The extensiveC# 3.0 and LINQ coverage is extremely timely!"-Tomas Restrepo, Microsoft MVP: Visual C++, .NET, and Biztalk Server "As one of the current designers of C#, it is rare that I learn something new about the language by reading a book. More Effective C# is a notable exception. Gently blending concrete code and deep insights, Bill Wagner frequently makes me look at C# in a fresh light-one that really makes it shine. More Effective C# is at the surface a collection of very useful guidelines. Look again. As you read through it, you'll find that you acquire more than just the individual pieces of advice; gradually you'll pick up on an approach to programming in C# that is thoughtful, beautiful, and deeply pleasant. While you can make your way willy-nilly through the individual guidelines, I do recommend reading the whole book-or at least not skipping over the chapter introductions before you dive into specific nuggets of advice. There's perspective and insight to be found there that in itself can be an important guide and inspiration for your future adventures in C#."-Mads Torgersen, Program Manager, Visual C#, Microsoft "Bill Wagner has written an excellent book outlining the best practices for developers who work with the C# language. By authoring More Effective C#, he has again established himself as one of the most important voices in the C# community. Many of us already know how to use C#. What we need is advice on how to hone our skills so that we can become wiser programmers. There is no more sophisticated source of information on how to become a first-class C# developer than Bill Wagner's book. Bill is intelligent, thoughtful, experienced, and skillful. By applying the lessons from this book to your own code, you will find many ways to polish and improve the work that you produce."-Charlie Calvert, Community Program Manager, Visual C#, Microsoft In More Effective C#, Microsoft C# MVP and Regional Director Bill Wagner introduces fifty brand-new ways to write more efficient and more robust software. This all-new book follows the same format as Wagner's best-selling Effective C# (Addison-Wesley, 2005), providing clear, practical explanations, expert tips, and plenty of realistic code examples. Wagner shows how to make the most of powerful innovations built into Microsoft's new C# 3.0 and .NET Framework 3.5, as well as advanced C# language capabilities not covered in his previous book. Drawing on his unsurpassed C# experience, the author reveals new best practices for working with LINQ, generics, metaprogramming, and many other features. He also uncovers practices that compromise performance or reliability and shows exactly how to avoid them. More Effective C# shows how toUse generics to express your design intent more effectivelyMaster advanced generics techniques, such as constraints, method constraints, and generic specializationUse the multithreaded techniques you'll need to work with the .NET framework every dayExpress modern design idioms using the rich palette of C# language featuresSuccessfully mix object oriented and functional programming constructsCreate composable interfaces and avoid confusion in public interfacesUse extension methods to separate contracts from implementationProgram successfully with C# closures and anonymous typesWrite more effective LINQ queriesMake the most of LINQ Lazy Evaluation Queries and Lambda ExpressionsDistinguish and convert between delegates and expression treesEfficiently utilize nullable types and partial classesUse implicit properties for mutable, nonserializable dataYou're already a successful C# programmer-this book can help you become an outstanding one.
Contents
Introduction xiii Chapter 1Replacements of 1.x Framework API Classes 4Item 2: Define Constraints That Are Minimal and Sufficient 14Item 3: Specialize Generic Algorithms Using Runtime Type Checking 19Item 4: Use Generics to Force Compile-Time Type Inference 26Item 5: Ensure That Your Generic Classes Support Disposable Type Parameters 32Item 6: Use Delegates to Define Method Constraints on Type Parameters 36Item 7: Do Not Create Generic Specialization on Base Classes or Interfaces 42Item 8: Prefer Generic Methods Unless Type Parameters Are Instance Fields 46Item 9: Prefer Generic Tuples to Output and Ref Parameters 50Item 10: Implement Classic Interfaces in Addition to Generic Interfaces 56 Chapter 2: Multithreading in C# 63Item 11: Use the Thread Pool Instead of Creating Threads 67Item 12: Use BackgroundWorker for Cross-Thread Communication 74Item 13: Use lock() as Your First Choice for Synchronization 78Item 14: Use the Smallest Possible Scope for Lock Handles 86Item 15: Avoid Calling Unknown Code in Locked Sections 90Item 16: Understand Cross-Thread Calls in Windows Forms and WPF 93 Chapter 3: C# Design Practices 105Item 17: Create Composable APIs for Sequences 105Item 18: Decouple Iterations from Actions, Predicates, and Functions 112Item 19: Generate Sequence Items as Requested 117Item 20: Loosen Coupling by Using Function Parameters 120Item 21: Create Method Groups That Are Clear, Minimal, and Complete 127Item 22: Prefer Defining Methods to Overloading Operators 134Item 23: Understand How Events Increase Runtime Coupling Among Objects 137Item 24: Declare Only Nonvirtual Events 139Item 25: Use Exceptions to Report Method Contract Failures 146Item 26: Ensure That Properties Behave Like Data 150Item 27: Distinguish Between Inheritance and Composition 156 Chapter 4: C# 3.0 Language Enhancements 163Item 28: Augment Minimal Interface Contracts with Extension Methods 163Item 29: Enhance Constructed Types with Extension Methods 167Item 30: Prefer Implicitly Typed Local Variables 169Item 31: Limit Type Scope by Using Anonymous Types 176Item 32: Create Composable APIs for External Components 180Item 33: Avoid Modifying Bound Variables 185Item 34: Define Local Functions on Anonymous Types 191Item 35: Never Overload Extension Methods 196 Chapter 5: Working with LINQ 201Item 36: Understand How Query Expressions Map to Method Calls 201Item 37: Prefer Lazy Evaluation Queries 213Item 38: Prefer Lambda Expressions to Methods 218Item 39: Avoid Throwing Exceptions in Functions and Actions 222Item 40: Distinguish Early from Deferred Execution 225Item 41: Avoid Capturing Expensive Resources 229Item 42: Distinguish Between IEnumerable and IQueryable Data Sources 242Item 43: Use Single() and First() to Enforce Semantic Expectations on Queries 247Item 44: Prefer Storing Expression<> to Func<> 249 Chapter 6: Miscellaneous 255Item 45: Minimize the Visibility of Nullable Values 255Item 46: Give Partial Classes Partial Methods for Constructors, Mutators, and Event Handlers 261Item 47: Limit Array Parameters to Params Arrays 266Item 48: Avoid Calling Virtual Functions in Constructors 271Item 49: Consider Weak References for Large Objects 274Item 50: Prefer Implicit Properties for Mutable, Nonserializable Data 277 Index 283