How to be a C# ninja in 10 easy steps Benjamin Day
Benjamin Day Consultant, Coach, Trainer Scrum.org Classes Professional Scrum Developer (PSD) Professional Scrum Foundations (PSF) TechEd, VSLive, DevTeach, O Reilly OSCON Visual Studio Magazine, Redmond Developer News Microsoft MVP for Visual Studio ALM Team Foundation Server, TDD, Testing Best Practices, Silverlight, Windows Azure http://blog.benday.com benday@benday.com Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 2
Professional Scrum at Scrum.org Professional Scrum Product Owner Product Owners Executives Professional Scrum Master Scrum Masters Professional Scrum Developer.NET or Java Architects Business Analysts DB Specialists Designers Developers Testers Professional Scrum Foundations Everyone 1993-2011 Scrum.org, All Rights Reserved
TOP 10 THINGS Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 4
The List. 1. Be humble 2. Object-orientation 3. Write less code 4. Value Types vs. Reference Types 5. Exceptions 6. Generics 7. Collections 8. IDisposable, using, & garbage collection 9. LINQ 10. Lambda Expressions Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 5
Some extras. 11. Virtual, override, & new() 12. Tune out the static 13. Partial classes & methods 14. Covarience contravariance 15. Named parameters 16. Optional parameters 17. Dynamic keyword Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 6
BE HUMBLE. Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 7
Be humble. Software is complex. We developers want to please think we re awesome almost always underestimate Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 8
Tips. Keep it simple. Expect to make mistakes. Not everyone will understand your abstractions. Favor maintainability over slickness. Write unit tests. Lots of unit tests. Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 9
C# doesn t do Xyz. C# sucks. Lesson I learned. There s a reason it s built that way. Don t fight it. Embrace it. Learn from the design. Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 10
Remember Object-Orientation Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 11
Object-Oriented Principles 4 tenets Encapsulation Polymorphism Inheritance Abstraction Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 12
WRITE LESS CODE Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 13
Save some typing. Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 14
Less is more. (as long as it s readable) Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 15
Everything you write has to be maintained. Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 16
var vs. object Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 17
Auto-Implemented Properties Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 18
Read-Only Auto-Implemented Properties Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 19
Avoid ternary operators Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 20
VALUE TYPES VS. REFERENCE TYPES Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 21
Whuh? Value Types Non-object types Stored in memory stack int, long, char, byte, etc. float, double decimal bool User-defined Structs Enumerations Reference Types Object types Stored in memory heap Variables are pointers to memory location Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 22
Boxing and Unboxing Boxing Process of wrapping a value type in an object reference Unboxing Converting a boxed value type object back into an value type variable Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 23
EXCEPTION HANDLING Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 24
Throw vs. throw ex throw; throw ex; Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 25
GENERICS Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 26
What are generics? Syntax that allows you to use similar functionality with different types in a typesafe way Implementation is the same Data types are different Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 27
ViewModelField<T> DomainObjectManager<T> Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 28
COLLECTIONS
What is a Collection? Data type for organizing lists of objects Similar to an array Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 30
Part of the.net framework 5 namespaces Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 31
Array vs. List<T> Array Size defined when created List<T> Automatically expands Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 32
ArrayList vs. List<T> ArrayList Not type-safe Everything is an object Watch out for boxing / unboxing List<T> Type-safe Everything must be an instance of T Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 33
IDISPOSABLE, USING, AND GARBAGE COLLECTION Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 34
What is Garbage Collection? Background process in.net Determines when an object is not needed Deletes it automagically Frees up memory You worry much less about memory management. Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 35
IDisposable Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 36
IDisposable: Custom Cleanup Gets called when the Garbage Collector is disposing your object Add custom logic For example, close any open database connections Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 37
Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 38
What does the using statement do? Wraps instance of IDisposable for block of code Instance is disposed automatically at the end of the code block Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 39
Wrap database connections in using blocks Most database classes implement IDisposable Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 40
Why should you wrap calls to database object in using statements? Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 41
LINQ Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 42
LINQ Language-Integrated Query Enables SQL-like querying of objects via IEnumerable<T> Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 43
LINQ Stuff Operators select from where orderby Useful functions FirstOrDefault() First() Min() Max() Count() Skip() Take() Reverse() Sum() Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 44
(Code Demo: LinqSample.cs) Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 45
LAMBDA EXPRESSIONS Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 46
What s a lambda expression? Anonymous functions Helpful for delegates Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 47
(Code Demos: LambdaExpressionSample.cs & LambdaExpressionForm.cs) Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 48
Additional Reading Essential C# 4.0 by Mark Michaelis Great overview of the language Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 49
Additional Reading CLR via C# by Jeffrey Richter What s going on under the hood of C# and the.net Framework Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 50
The List. 1. Be humble 2. Object-orientation 3. Write less code 4. Value Types vs. Reference Types 5. Exceptions 6. Generics 7. Collections 8. IDisposable, using, & garbage collection 9. LINQ 10. Lambda Expressions Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 51
Thank you. http://blog.benday.com http://www.benday.com benday@benday.com