C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for...

26
C# for Java Developers Patrick Linskey [email protected] @plinskey

Transcript of C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for...

Page 1: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

C# for Java DevelopersPatrick Linskey

[email protected]@plinskey

Page 2: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Who am I?

• Patrick Linskey

• 13 years of Java experience, 11 professionally

• 2 years of professional C# experience

Page 3: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Who are you?

• Hopefully, Java developers who are interested in learning about C#

• ... for client, server, or mobile deployment

Page 4: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Apology to Readers

Much of this talk happens in Visual Studio.

Sorry about that.

I will make the code available at http://github.com/pcl -- the commit history provides some detail.

Page 5: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

[Anders Hejlsberg]

Page 6: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Some Terminology

• Common Language Runtime, not JVM

• Intermediate Language, not Java bytecode

• Assembly, not JAR

• [Attribute], not @Annotation

Page 7: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

[Syntax]

Page 8: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Coding Conventions

• All methods use InitialCaps

• Constants use InitialCaps instead of ALL_CAPS

• Namespaces are not as consistently-scoped as are packages in the Java world

• Assembly names are first-class constructs

Page 9: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

[Unit Testing]

Page 10: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

MSTest vs. NUnit

• I use NUnit because it seems more familiar

• Without ReSharper, NUnit / Visual Studio integration is a bit weak

Page 11: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Visual Studio

• Most people seem to use it

• $$$

• ReSharper (plugin from JetBrains) is a must

• #1 awesome Visual Studio feature: program counter manipulation during debug sessions

Page 12: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

[LINQ and Functions]

Page 13: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

LINQ

• Can evaluate LINQ queries against database, XML, collections, etc.

• Anything IEnumerable or IQueryable

• Also: JOIN, GROUP BY, HAVING, ...

Page 14: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Function Objects

• We saw Func<int, int> in fib

• Generally: Func<TArg1, TArg2, TReturn>

• Support for up to 16 arguments!

Page 15: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Action Objects

• Action<TArg1, TArg2, ...>

• Also supports 16 args!

• Equivalent to a void method return type

Page 16: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Tuples

• Tuple<T1, T2, T3, ...>

• Up to 8 items

• Useful for easy multi-object returns, LINQ queries

Page 17: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Anonymous Types

• Predate tuples

var ratio = new { Numerator = 2, Denominator = 3 };Console.Out.WriteLine( ratio.Numerator / ratio.Denominator);

Page 18: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

[Object-Orientation]

Page 19: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Virtual keyword

• By default, methods are resolved at compile time

• To get polymorphic method invocation, highlight the methods as ‘virtual’

Page 20: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

The Ecosystem

Page 21: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Third-Party is Weak

• Outside UI widgets, nowhere near as much activity as in the Java world

• Few open-source projects

• http://stackoverflow.com is your friend

Page 22: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Spring.NET is great

• Lags the Java Spring Framework a bit

• I’ve only used dependency injection and lifecycle management features

• WPF (and presumably Silverlight) have their own resource management

• It’s possible to bridge the two

Page 23: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Yay!

• Generics are reified, and support covariance and contravariance

• Dynamic method invocation with the ‘dynamic’ pseudo-type (akin to ObjC’s ‘id’)

• += syntax for all delegate fields / properties

• Func, Action, raw Delegate

Page 24: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

More Cool Stuff

• @ strings

• Indexers

• Partial classes (UI and codegen)

• Structs

Page 25: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Some Missing Features

• No anonymous inner classes (use closures / function objects instead)

• All inner classes are static

• Enums cannot have state or methods

• Can emulate methods with extension methods

Page 26: C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for Java Developers Patrick Linskey plinskey@gmail.com @plinskey. Who am I? ... •Can

Questions?

Patrick Linskey

[email protected]

code: http://github.com/pcl