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 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 .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 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 C# - Up and Running • A Simple C# Application • Application Types • Compiler & Run Time A Sample C# Application 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 Compiler Options from MS • SDK contains the command line compiler (C:\WINDOWS\Microsoft.NET\Framework\{vers ion}\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 • $$$ 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# 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 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 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++) 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); 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(); 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”); 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! 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 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 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… 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 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 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); } } Result Numbers < 5: 4 1 3 2 0 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 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 References Links • .NET SDK • • http://www.microsoft.com/downloads/details.aspx?FamilyI D=fe6f2099-b7b4-4f47-a244c96d69c35dec&DisplayLang=en MS Visual Studio C# Express Edition • • http://msdn.microsoft.com/vstudio/express/visualcsharp/ MS Visual Studio • http://msdn.microsoft.com/vstudio/ Links – cont. • MONO • http://www.mono-project.com/Main_Page • Sharp Develop • http://www.icsharpcode.net/OpenSource/SD/ 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_langua ge Online Tutorials • • http://www.csharp-station.com/Tutorial.aspx http://www.c-sharpcorner.com/Tutorials.asp 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.a sp?z=y&isbn=0735621632&itm=3)