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
•
/>•
Most interoperate with each other
C#
•
Language Created by Anders Hejlsberg (father of
Delphi)
•
The Derivation History can be viewed here:
/>•
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\
{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
/>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