52
How to be a C# ninja in 10 easy steps Benjamin Day

How to be a C# ninja in 10 easy steps - Benjamin Day ...€¦ · Scrum Master Professional Scrum Developer.NET or Java Product Owners Executives Scrum Masters Architects Business

  • Upload
    lybao

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

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

[email protected]

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]