You are on page 1of 52

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, OReilly 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 Professional Professional


Scrum Scrum Master Scrum
Product Owner Developer
.NET or Java

Architects
Business Analysts
Product Owners DB Specialists
Scrum Masters
Executives 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 6. Generics
2. Object-orientation 7. Collections
3. Write less code 8. IDisposable, using, &
4. Value Types vs. garbage collection
Reference Types 9. LINQ
5. Exceptions 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 were 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# doesnt do Xyz. C# sucks.
Lesson I learned.

Theres a reason its built that way.


Dont 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 its 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 Reference Types
Non-object types Object types
Stored in memory stack Stored in memory heap
int, long, char, byte, etc. Variables are pointers to
float, double memory location
decimal
bool
User-defined
Structs
Enumerations

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 List<T>
Size defined when Automatically expands
created

Copyright 2011, Benjamin Day Consulting, Inc. www.benday.com 32


ArrayList vs. List<T>
ArrayList List<T>
Not type-safe Type-safe
Everything is an object Everything must be an
Watch out for boxing / instance of T
unboxing

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 Useful functions
select FirstOrDefault()
from First()
where Min()
orderby 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


Whats 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

Whats 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 6. Generics
2. Object-orientation 7. Collections
3. Write less code 8. IDisposable, using, &
4. Value Types vs. garbage collection
Reference Types 9. LINQ
5. Exceptions 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

You might also like