C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for...
Transcript of C# for Java Developers - GOTO Conference › dl › jaoo-aarhus-2010 › slides › ... · C# for...
![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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/2.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/3.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/4.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/5.jpg)
[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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/6.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/7.jpg)
[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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/8.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/9.jpg)
[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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/11.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/12.jpg)
[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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/18.jpg)
[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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022042311/5ed91a266714ca7f47692758/html5/thumbnails/25.jpg)
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