how to be a c# ninja in 10 easy steps
DESCRIPTION
How to be a C# ninja in 10 easy steps. Benjamin Day. Benjamin Day. Brookline, MA Consultant, Coach, & Trainer Microsoft MVP for Visual Studio ALM Team Foundation Server, Software Testing, Scrum , Software Architecture Scrum.org Classes Professional Scrum Developer (PSD) - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/1.jpg)
How to be a C# ninja in 10 easy steps.
Benjamin Day
![Page 2: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/2.jpg)
Benjamin Day• Brookline, MA• Consultant, Coach, & Trainer• Microsoft MVP for Visual Studio ALM• Team Foundation Server, Software Testing,
Scrum, Software Architecture• Scrum.org Classes
– Professional Scrum Developer (PSD)– Professional Scrum Foundations (PSF)
• www.benday.com, [email protected], @benday
![Page 3: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/3.jpg)
Online courses at Pluralsight.com
![Page 4: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/4.jpg)
![Page 5: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/5.jpg)
Why did I write this talk?
![Page 6: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/6.jpg)
TOP 10 THINGS
![Page 7: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/7.jpg)
The List.1. Be humble2. Object-
orientation3. Write less code4. Value Types vs.
Reference Types5. Exceptions
6. Generics7. Collections8. IDisposable,
using, & garbage collection
9. LINQ10. Lambda
Expressions11. Async & Await
![Page 8: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/8.jpg)
#1: Be humble.
![Page 9: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/9.jpg)
Be humble.• Software is complex.• We developers…
– …want to please– …think we’re awesome– …almost always underestimate
![Page 10: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/10.jpg)
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.
![Page 11: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/11.jpg)
Tip for managers.• Your devs are afraid of you.
![Page 12: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/12.jpg)
Tip for executives.• Your devs are afraid of you.
• Your project managers are afraid of you.
• Your project managers are afraid of the devs.
![Page 13: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/13.jpg)
“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.
![Page 14: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/14.jpg)
#2: Remember Object-Orientation
![Page 15: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/15.jpg)
Object-Oriented Principles• The 4 tenets. What are they?
• Encapsulation• Polymorphism• Inheritance• Abstraction
INTERVIEW
QUESTION!
![Page 16: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/16.jpg)
#3: Write less code
![Page 17: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/17.jpg)
Save some typing.
![Page 18: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/18.jpg)
Less is more.(as long as it’s readable)
![Page 19: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/19.jpg)
Everything you write has to be maintained.
![Page 20: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/20.jpg)
Whatever has to be maintained is “inventory.”
![Page 21: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/21.jpg)
var vs. object
![Page 22: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/22.jpg)
Auto-Implemented Properties
![Page 23: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/23.jpg)
Read-Only Auto-Implemented Properties
![Page 24: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/24.jpg)
…and now I’m going to contradict myself.
![Page 25: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/25.jpg)
Avoid ternary operators
![Page 26: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/26.jpg)
#4: Value types vs. reference types
![Page 27: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/27.jpg)
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
INTERVIEW
QUESTION!
![Page 28: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/28.jpg)
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
INTERVIEW
QUESTION!
![Page 29: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/29.jpg)
#5: Exception Handling
![Page 30: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/30.jpg)
Throw vs. throw exthrow; throw ex;
INTERVIEW
QUESTION!
![Page 31: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/31.jpg)
#6: Generics
![Page 32: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/32.jpg)
What are generics?• Syntax that allows you to use similar
functionality with different types in a type-safe way
• Implementation is the same
• Data types are different
![Page 33: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/33.jpg)
• ViewModelField<T>• DomainObjectManager<T>
![Page 34: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/34.jpg)
#7: Collections
![Page 35: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/35.jpg)
What is a Collection?• Data type for organizing lists of objects
• Similar to an array
![Page 36: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/36.jpg)
• Part of the .NET framework
• 5 namespaces
![Page 37: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/37.jpg)
Array vs. List<T>Array• Size defined when
created
List<T>• Automatically expands
![Page 38: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/38.jpg)
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
INTERVIEW
QUESTION!
![Page 39: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/39.jpg)
#8: IDisposable, Using, and
Garbage Collection
![Page 40: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/40.jpg)
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.
![Page 41: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/41.jpg)
IDisposable
![Page 42: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/42.jpg)
IDisposable: Custom Cleanup• Gets called when the Garbage Collector is
disposing your object• Add custom logic
• For example, close any open database connections
![Page 43: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/43.jpg)
![Page 44: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/44.jpg)
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
INTERVIEW
QUESTION!
![Page 45: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/45.jpg)
Wrap database connections in ‘using’ blocks• Most database classes implement
IDisposable
![Page 46: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/46.jpg)
Why should you wrap calls to database object in ‘using’ statements?
INTERVIEW
QUESTION!
![Page 47: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/47.jpg)
But there’s a catch.
![Page 48: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/48.jpg)
The Garbage Collector doesn’t call IDisposable.Dispose().
![Page 49: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/49.jpg)
If you want to be bulletproof…
![Page 50: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/50.jpg)
…implement IDisposable along with a Destructor.
![Page 51: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/51.jpg)
#9: LINQ
![Page 52: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/52.jpg)
LINQ• Language-Integrated Query• Enables SQL-like querying of objects via
IEnumerable<T>
![Page 53: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/53.jpg)
LINQ StuffOperators• select• from• where• orderby
Useful functions• FirstOrDefault()• First()• Min()• Max()• Count()• Skip()• Take()• Reverse()• Sum()
![Page 54: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/54.jpg)
(Code Demo: LinqSample.cs)
![Page 55: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/55.jpg)
#10:Lambda expressions
![Page 56: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/56.jpg)
What’s a “lambda expression”?• Anonymous functions• Helpful for delegates
INTERVIEW
QUESTION!
![Page 57: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/57.jpg)
(Code Demos: LambdaExpressionSample.cs & LambdaExpressionForm.cs)
![Page 58: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/58.jpg)
#11: Async & Await
![Page 59: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/59.jpg)
Async programming is a pain in thedonkey.
![Page 60: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/60.jpg)
I complain about discuss this in a
couple of articles.
![Page 61: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/61.jpg)
http://msdn.microsoft.com/en-us/magazine/jj658977.aspx
![Page 62: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/62.jpg)
Why?• Async calls are really 3 calls.
• 1) the initiator
• 2) the do-er
• 3) the return handler
• They don’t share the same call stack.
![Page 63: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/63.jpg)
Who cares?• Since they don’t share the same call stack
you can’t…
• …return values using the return keyword
• …throw an exception– (DOH!!!)
![Page 64: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/64.jpg)
Async & Await• Async is all over the place in
Windows Phone, Windows Store / WinRT, and Silverlight
• Async, Await, Task, Task<TResult>help take the pain out of async programming.
• (New for Visual Studio 2012 & .NET 4.5)
![Page 65: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/65.jpg)
How does async & await work?
INTERVIEW
QUESTION!
![Page 66: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/66.jpg)
Basically, async & await injects a lot of glue to knit the calls together.
![Page 67: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/67.jpg)
Additional Reading• Essential C# 5.0
by Mark Michaelis
• Great overview of the language
• http://amzn.com/0321877586
![Page 68: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/68.jpg)
Additional Reading• CLR via C#
by Jeffrey Richter
• What’s going on under the hood of C# and the .NET Framework
• http://amzn.com/0735667454
![Page 69: How to be a C# ninja in 10 easy steps](https://reader036.vdocument.in/reader036/viewer/2022081801/568164aa550346895dd6aaaf/html5/thumbnails/69.jpg)
The List.1. Be humble2. Object-
orientation3. Write less code4. Value Types vs.
Reference Types5. Exceptions
6. Generics7. Collections8. IDisposable,
using, & garbage collection
9. LINQ10. Lambda
Expressions11. Async & Await