310 likes | 338 Views
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
E N D
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
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\{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 • $$$
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); } } ResultNumbers < 5:41320
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
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/
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_language • 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.asp?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)