How to be a C# ninja in 10 easy steps€¦ · How to be a C# ninja in 10 easy steps Benjamin Day....
Transcript of How to be a C# ninja in 10 easy steps€¦ · How to be a C# ninja in 10 easy steps Benjamin Day....
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
Copyright © 2011, Benjamin Day Consulting, Inc. www.benday.com 2
© 1993-2011 Scrum.org, All Rights Reserved
Professional Scrum at Scrum.org
Professional
Scrum
Product Owner
Professional Scrum Foundations
Professional
Scrum Master
Professional
Scrum
Developer.NET or Java
Product Owners
ExecutivesScrum Masters
Architects
Business Analysts
DB Specialists
Designers
Developers
Testers
Everyone
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. Covariencecontravariance
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 type-safe 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 | [email protected]