A Brief Introduction to C#

advertisement
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)
Download