Upload
hogan
View
48
Download
0
Tags:
Embed Size (px)
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 Presentation
Citation preview
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)– Professional Scrum Foundations (PSF)
• www.benday.com, [email protected], @benday
Online courses at Pluralsight.com
Why did I write this talk?
TOP 10 THINGS
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
#1: Be humble.
Be humble.• Software is complex.• We developers…
– …want to please– …think we’re awesome– …almost always underestimate
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.
Tip for managers.• Your devs are afraid of you.
Tip for executives.• Your devs are afraid of you.
• Your project managers are afraid of you.
• Your project managers are afraid of the devs.
“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.
#2: Remember Object-Orientation
Object-Oriented Principles• The 4 tenets. What are they?
• Encapsulation• Polymorphism• Inheritance• Abstraction
INTERVIEW
QUESTION!
#3: Write less code
Save some typing.
Less is more.(as long as it’s readable)
Everything you write has to be maintained.
Whatever has to be maintained is “inventory.”
var vs. object
Auto-Implemented Properties
Read-Only Auto-Implemented Properties
…and now I’m going to contradict myself.
Avoid ternary operators
#4: Value types vs. reference types
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!
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!
#5: Exception Handling
Throw vs. throw exthrow; throw ex;
INTERVIEW
QUESTION!
#6: Generics
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
• ViewModelField<T>• DomainObjectManager<T>
#7: Collections
What is a Collection?• Data type for organizing lists of objects
• Similar to an array
• Part of the .NET framework
• 5 namespaces
Array vs. List<T>Array• Size defined when
created
List<T>• Automatically expands
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!
#8: IDisposable, Using, and
Garbage Collection
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.
IDisposable
IDisposable: Custom Cleanup• Gets called when the Garbage Collector is
disposing your object• Add custom logic
• For example, close any open database connections
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!
Wrap database connections in ‘using’ blocks• Most database classes implement
IDisposable
Why should you wrap calls to database object in ‘using’ statements?
INTERVIEW
QUESTION!
But there’s a catch.
The Garbage Collector doesn’t call IDisposable.Dispose().
If you want to be bulletproof…
…implement IDisposable along with a Destructor.
#9: LINQ
LINQ• Language-Integrated Query• Enables SQL-like querying of objects via
IEnumerable<T>
LINQ StuffOperators• select• from• where• orderby
Useful functions• FirstOrDefault()• First()• Min()• Max()• Count()• Skip()• Take()• Reverse()• Sum()
(Code Demo: LinqSample.cs)
#10:Lambda expressions
What’s a “lambda expression”?• Anonymous functions• Helpful for delegates
INTERVIEW
QUESTION!
(Code Demos: LambdaExpressionSample.cs & LambdaExpressionForm.cs)
#11: Async & Await
Async programming is a pain in thedonkey.
I complain about discuss this in a
couple of articles.
http://msdn.microsoft.com/en-us/magazine/jj658977.aspx
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.
Who cares?• Since they don’t share the same call stack
you can’t…
• …return values using the return keyword
• …throw an exception– (DOH!!!)
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)
How does async & await work?
INTERVIEW
QUESTION!
Basically, async & await injects a lot of glue to knit the calls together.
Additional Reading• Essential C# 5.0
by Mark Michaelis
• Great overview of the language
• http://amzn.com/0321877586
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
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
Thank you.
http://www.benday.com | [email protected]