A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running...

31
A Brief Introduction to C# David Buksbaum

Transcript of A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running...

Page 1: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

A Brief Introduction to C#David Buksbaum

Page 2: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Agenda

• Goals

• Background Information

• C# - Up and Running

• Quick Comparison to Java

• Networking Namespaces

• References

Page 3: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Goals

• Provide enough information to allow you to follow the code samples

• Highlight key differences with Java

• Tell you where you can get the compilers

• Tell you where to go for more details on C#

• Tell you where to go for more detailed comparisons with Java

• Not to debate which is better, more important, faster, slower, or looks better in emacs

Page 4: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Quick Glossary

• BCL – Base Class Library

• CLR – Common Language Runtime

• GUI – Graphic User Interface

• MSIL – Microsoft Intermediate Language

• MS – Microsoft

• SCM – Service Control Manager

• SOA – Service Oriented Architecture

Page 5: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

.NET

• .NET is:• Microsoft’s Platform for Windows Development• CLR – the Virtual Machine that runs MSIL aka MS

Byte Code• BCL aka .NET Framework• A set of compilers that can generate MSIL C#,

Visual Basic, C++, Java (the MS flavor)

• There are 50+ languages that generate MSIL• http://www.dotnetpowered.com/languages.aspx

• Most interoperate with each other

Page 6: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

C#

• Language Created by Anders Hejlsberg (father of Delphi)

• The Derivation History can be viewed here: http://www.levenez.com/lang/history.html

• Principle Influencing Languages:• C++• Delphi• Java

• Designed to be an optimal Windows development language

Page 7: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

C# - Up and Running

• A Simple C# Application

• Application Types

• Compiler & Run Time

Page 8: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

A Sample C# Application

Page 9: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Application Types

• Console Application• Has standard streams (out, in, err)• GUI can be added manually

• Windows Application• GUI based• No standard streams (out, in, err)• Main thread is shared by the GUI message pump & your

code

• Service• No standard streams (out, in, err)• Main thread is commandeered by the SCM• No GUI

Page 10: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Compiler Options from MS

• SDK contains the command line compiler (C:\WINDOWS\Microsoft.NET\Framework\{version}\csc.exe)• {version} looks like v2.0.50727

• Express Edition – Free IDE to work with Visual C#• Reduced runctionality version of Visual Studio

• Visual Studio – The full development system• Optimizations, Data Access, Multi-Language, etc• $$$

Page 11: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Options Beyond MS

• Mono• Open source development SDK for .NET• Windows, Linux, Mac OS X, Solaris, Unix• Sponsored by Novell• Food for thought: Suse + KDE + Mono = ???

• Sharp Develop• Open source IDE that uses .NET SDK or Mono• Written in C#

Page 12: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Quick Comparison to Java

• What’s the same• Syntactically Similar• Garbage Collected VM Environment• Immutable Strings• Exceptions (try / catch / finally)• Object as root• Single Inheritance model• Multi-Interface model

Page 13: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s Different & Relevant

• Keywords• base vs. super• lock vs. synchronized• : vs. extends & implements• is vs. instanceof

• Exceptions• No throws keyword• See

http://msdn.microsoft.com/chats/transcripts/vstudio/vstudio_032103.aspx

Page 14: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s Different & Relevant – cont.

• Namespaces• namespace vs. package• using vs. import• No wildcard using

• using namespace; // brings it all in – non-recursive

• Type Aliasing• using newtypename = namespace.type;

• Directory structure != namespace hierarchy (as in C++)

Page 15: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s Different & Relevant – cont.• Properties• get, set and get/set• public string MyProperty { get { return(_text); } set { _text =

value; } }

• Delegates• Type safe function pointers• To create• public delegate bool CompareHandler(object left, object

right);

• To use• CompareHandler ch = new CompareHandler(myMethod);• bool retval = ch(obj1, obj2);

Page 16: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s Different & Relevant – cont.

• Enumerations• public enum Protocol { UDP, TCP };• public enum Direction { Up = 0, Down = 1, Left = 2,

Right = 4 };• Direction d = Direction.Down;• int x = (int)d;• Direction d = Direction.Parse(“Up”);• string s = d.ToString();

Page 17: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s Different & Relevant – cont.

• Value Types• Primitives are the same plus• Unsigned values

• ubyte, ushort, uint, ulong

• Careful: byte in java is sbyte in C#• Class objects to wrap primitives

• Int32 x = new Int32(4);• int x = Int32.Parse(“4”);

Page 18: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s Different & Relevant – cont.

• Structures• Stack based elements, not heap based• Value type• struct packet { int code; string data; };

• Boxing / Unboxing• Conversion between value type and reference type• packet p = new packet();• object o = (object)p; // boxed• packet p2 = (packet)o; // unboxed• Significant performance cost!

Page 19: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s Different & Relevant – cont.

• Cross Platform Support• .NET from Microsoft is not cross platform• It is for Windows only• Mono can run cross platform, but is unproven in

large production environments• MS is currently resisting moving cross platform• The future is not set

Page 20: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s not Relevant, but Useful

• App Domains• One or more per process• Represents a VM hosted logical process• Communications between App Domains requires

marshalling (IPC)

• Assemblies• Similar to Java JAR files• Physically they are EXE and/or DLL files

Page 21: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s not Relevant, but Useful

• Attributes• Meta tags that provide run time information for a

type, NOT the instance• Example: [Serializable] public class foo { int x; };• [Serializable] is converted into the class

SerializableAttribute• Attributes can be retrieved at run time• Many framework sub-systems use attributes• Serialization, XML, Interop, Conditional, Obsolete, etc…

Page 22: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s not Relevant, but Useful• Polymorphism• Methods default to being non-virtual• To be virtual it must be defined as virtual• eg: public virtual int Add(int x, int y);

• To override a virtual method, you use the override keyword• eg. public override int Add(int x, int y);

• Methods not marked virtual are equivalent to Java final methods

• Methods can be marked with new to break the virtual chain

Page 23: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s not Relevant, but Useful

• Interop• Access to native code through attributes• [DllImport(“user32.dll”)] static int

GetSystemMetrics(int);• The DllImport attribute informs the compiler and

runtime that the tagged method is inside a native DLL.

• Options such as the actual name in the DLL, marshalling strategies, calling convention, and more can be set using the attribute

Page 24: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

What’s not Relevant, but Useful• .NET 2.0 – out now

• Generics• Partial Types• Anonymous Methods• Nullable Types

• .Net 3.0• Its all about data

• Tuples & Query constructs

public void Linq1() {

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var lowNums = from n in numbers where n < 5 select n;Console.WriteLine("Numbers < 5:"); foreach (var x in lowNums) { Console.WriteLine(x); }

}

ResultNumbers < 5:41320

Page 25: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Networking Namespaces• System.Messaging• Functionality for MSMQ

• System.Net• Provides access to higher protocols (FTP, HTTP, DNS)

• System.Net.Information• Network information classes providing statistics, interface

information, and ping• System.Net.Sockets• Light weight wrappers around TCP and UDP sockets

• System.Runtime.Remoting• Provides functionality for high level distributed programming

(similar to RMI)• System.Web• Provides high level access to HTTP

Page 26: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Future of .NET Networking

• Windows Communications Foundation• Formally code named Indigo• Designed to make SOA an integral part of Windows• Tight coupling with .NET designs• For more information• http://msdn.microsoft.com/windowsvista/default.aspx?

pull=/library/en-us/dnlong/html/wcfarch.asp

Page 27: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

References

Page 28: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Links

• .NET SDK• http://www.microsoft.com/downloads/

details.aspx?FamilyID=fe6f2099-b7b4-4f47-a244-c96d69c35dec&DisplayLang=en

• MS Visual Studio C# Express Edition• http://msdn.microsoft.com/vstudio/express/visualcsharp/

• MS Visual Studio• http://msdn.microsoft.com/vstudio/

Page 29: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Links – cont.

• MONO• http://www.mono-project.com/Main_Page

• Sharp Develop• http://www.icsharpcode.net/OpenSource/SD/

Page 30: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Links – cont.• C# Links• http://msdn1.microsoft.com/en-us/default.aspx• http://gotdotnet.com/• http://www.c-sharpcorner.com/• http://msdn.microsoft.com/community/codezone/• http://en.wikipedia.org/wiki/

C_Sharp_programming_language

• Online Tutorials• http://www.csharp-station.com/Tutorial.aspx• http://www.c-sharpcorner.com/Tutorials.asp

Page 31: A Brief Introduction to C# David Buksbaum. Agenda Goals Background Information C# - Up and Running Quick Comparison to Java Networking Namespaces References.

Books

• Programming C#, Fourth Edition by Jesse Liberty (http://search.barnesandnoble.com/booksearch/isbnInquiry.a

sp?z=y&isbn=0596006993&itm=2)• CLR Via C#: Applied Microsoft .Net

Framework 2.0 Programming by Jeffrey Richter (http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?z=y&isbn=0735621632&itm=3)