c# - the language for the 90s
DESCRIPTION
C# - the language for the 90s. Judith Bishop University of Pretoria, South Africa [email protected] Nigel Horspool University of Victoria, Canada [email protected]. Volunteers on a C# course in Africa. Do it in C# Naturally!. Contents. Introduction Basics. The fruits of our labours. - PowerPoint PPT PresentationTRANSCRIPT
1
C# - the language for the 90s
Judith BishopUniversity of Pretoria, South Africa
Nigel HorspoolUniversity of Victoria, Canada
2
Volunteers on a C# course in Africa
Do it in C# Naturally!
3
Contents
Introduction Basics
4
The fruits of our labours
5
Facts on C#
Designed at Microsoft by Anders Hejlsberg (Delphi, Java Foundation classes). Scott Wiltamuth and Peter Golde
Language of choice for programming in .NET
Standardised by ECMA December 2002 and ISO April 2003
It is expected there will be future revisions to this standard, primarily to add new functionality.
6
Goals
general-purpose
software engineering principles
software components for distributed environments.
source code portability
internationalization
embedded systems
Is this Java or C#?
7
Why should I know about C#?
A good language, well supported
Useful for teaching e.g. data structures, compilers, operating systems, distributed systems, first year
Inter-language operability via .NET (Java doesn't)
Multi-platform via Rotor (like Java)
Not tied to an IDE or rapid development (like VB or Delphi)
Efficiency potential (scientific programming)
Base for future development e.g. XEN
8
Contents
Introduction Basics
9
Syntactic niceties
using System;
class Welcome {
public static void Main() {
string name = " Peter ";
Console.WriteLine("Welcome to C#"
+ name);
Console.WriteLine(
"It is now " + DateTime.Now);
}
}
10
Some terminology
Program
types
data functions
fields
constantsvariables
constructorsmethodspropertiesoperators
simple
structured
int
classstruct
namespaces
11
Structured types - structs
Structs are lightweight - should be used often
Structs can have fields, methods, properties, constructors, operators, events, indexers, implemented interfaces, nesting
Structs cannot have destructors, inheritance, abstract
b
c
VMT P
struct T { int b, c; void p {...}}
T a;
12
Initialisation rules:– instance fields may not be initialised
– static fields may be initialised
– if there is a constructor, then all fields must be initialised there
– if no constructor, values are unspecified
13
The System.DateTime struct
// ConstructorsDateTime (int year, int month, int day);DateTime (int year, int month, int day int hour, int min, int sec);
// Static Propertiesstatic DateTime Now static DateTime Today static DateTime UTCNow // Instance propertiesint Dayint Monthint Yearint Hourint DayOfYear
Plus more
14
Example - Meetings
for (int hour=8; hour<=18; hour++) {
}
London New York08:00 AM 03:00 AM09:00 AM 04:00 AM10:00 AM 05:00 AM11:00 AM 06:00 AM
meeting = new DateTime (now.Year, now.Month, now.Day, hour, 0, 0);
offsetMeeting = meeting.AddHours(offset);
Console.WriteLine({0:t} {1:t}, meeting, offsetMeeting);
15
Properties by example
using System;
struct City { string name; DateTime meeting;
public City(string n, DateTime m) {
name = n; meeting = m; }
public DateTime Meeting { get {return meeting;} set {meeting = value;} }
public string Name { get {return name;} }}
class TestTutorial { public static void Main() { City conference = new City ("Klagenfurt", new DateTime(2003,8,24));
conference.Meeting = new DateTime
(2003,8, tutorial.Meeting.Day-1);
Console.WriteLine( "Speaking at " +conference.Name+ " on "+ conference.Meeting); }}
16
A struct vs a class
struct complex { double re, im;}Complex c;
must define equality and comparison
class complex { double re, im;}Complex d;
for values, must define equality and comparison
c d
17
Equality
public override bool Equals(object d) { Pet p = (Pet) d; return name==p.name && type==p.type;}
if (i>1 && p.Equals(list)) { Console.WriteLine("Oops - repeated data."); } else {
•Have to be careful because p==list willcompile, but will compare references
18
Value and reference semantics Value Types Reference Types
Types int float etc, struct, enum
array, class, interface, delegate
Values Fixed ranges defined by the user or API
Operators predefined defined by user or API
Assignment copies the value copies a reference
Equality must overload ops can overload ops
Created on the stack the heap
Derived from System.ValueType System.Object
Parameters passed by copy passed by reference
Dies when out of scope when garbage collected
19
in, out and ref parameters
in – pass by value
– the default
out– value copied out only (not in as well)
– used to return multiple values from a method
ref– pass by reference
– changes are made to the actual object
out and ref must be specified by caller and callee
void Rearrange(ref City a, ref City b) { DateTime temp = a.MeetingTime; a.MeetingTime = b.MeetingTime; b.MeetingTime = temp.MeetingTime;}
Rearrange(ref London, ref NewYork);
20
Output
Printing is done using the System.Console class
Three approaches:
1. Use concatenationConsole.WriteLine(name +" " + descr + " for G" +
price);
2. Use ToString
public override string ToString () { return name + " " + descr + " for G" + price;
}
Baskets grass, woven for G8.5
cont ...
21
Formatted output
3. Use a format string, where the justification and field widths of each item can be controlled
Console.WriteLine("{0} {1} for G{2,0:f2}"
name, descr, price);
Baskets grass, woven for G8.50
{N,M:s}
item number width - default is left,positive means right
format code e.g.f or C or D
22
Formatting other types
NumberFormatInfo f = new NumberFormatInfo();f.CurrencyDecimalSeparator = ",";f.CurrencyGroupSeparator = " ";f.CurrencySymbol = "€";
Less use of methods through format specifications
double amount = 10000.95;
Console.WriteLine(
String.Format(f, "{0:C}", amount);
€ 10 000,95
23
Control structures
C# has the standard C++ or Java control structures, viz:– for-else– while– do-while– switch-case
Conditions must be explicitly converted to bool
The switch has two very nice features:– case on strings
– Compulsory break after a case
if (s.Length == 0)Notif (s.Length)
24
Collections - Arrays
Arrays are indexed by number e.g.
int [] markCounts = new markCounts[101];
string [] monthNames = new string[13];
DateTime[] myExams = new DateTime[noOfExams];
C# follows the C/Java tradition of– Once declared, their size is fixed.
– The indices are integers and start at zero.
– There is a property called Length.
– The elements in the array can be any objects.
– Bounds are always checked (ArrayOutOfBoundsException)
25
Array class
Corresponding to the “type” array there is an Array class with useful methods e.g.
– Array.BinarySearch (a, v)– Array.Clear (a, first, num)– Array.IndexOf(a, v)– Array.Sort(a)
Example, including Split
public Date (string s) { string[] elements = s.Split(' '); day = int.Parse(elements[0]); month = Array.IndexOf(monthNames,elements[1]); }
26
Indexers
All of these have [ ] overloaded, so that they can operate exactly like an array in a program
C#’s rich collections include– Hash tables– Sorted lists– Stacks– Queues– BitArrays– ArrayLists
0123
A SL
Wed
A[1] SL["Wed"]
27
Example of SortedLists
COS110 350
GEOL210 80
ENG100 600
class Enrollments {
string code;
int size;
Enrollments (string c, int s) {
code = c;
size = s;
}
... other methods here
}
28
… continued
Define a list
SortedList year2003 = new SortedList(100);
Put an object in the list using the same notation as for arrays
year2003["PHY215"] = new Enrollment("PHY215", 32);
Print out the enrollment for Physics
Console.WriteLine("PHY215 has " +
(Enrollment)year2003["PHY215"].size + "students");
PHY215 has 32 students
29
Foreach loop
Designed to loop easily through a collection
foreach (type id in collection.Keys) {
... body can refer to id
}
Example
foreach (string course in year2003.Keys) {
Enrollment e = (Enrollment) year2003[course];
Console.WriteLine (e.code + " " + e.size);
}
Can’t say foreach (string course in year2003) Why?
30
Demonstration 1 - Public Holidays
The Public Holidays Program
Illustrates– switch on string
– sorted lists
– indexers
– Split
– file handling
GUI specification with Views
31
Output from the demo
32
Inheritance - virtual functions
overridden– base class specifies virtual, and derived class may supply
another version using override
overridden abstract– base class specifies virtual abstract, and derived class
must supply another version using override
virtualabstractV
virtualV
virtualV
override V
OR
override V
33
Virtual functions cont.
hidden– base class supplies a virtual function of the same name as an
existing derived class function. Override is not assumed. Derived class should be recompiled with function specified as new, to make the separation explicit.
F
virtualF
F
virtualF
new F
1
2
3
34
Demonstration 2 - StarLords
Illustrates– inheritance
– base constructor calling
– virtual and override
– ref parameters
35
Program output
36
Operator overloading
DateTime struct
public static DateTime operator +
(DateTime d, TimeSpan t);
public static TimeSpan operator -
(DateTime d1, DateTime d2);
birth + 18 Now - marriage
Not allowed for new ( ) || && = implicit can be used to make casting automatic
public static implicit operator CheckBox(GenObject RHS) {
return (CheckBox)RHS.Control;}
Indexer [ ] is not overloaded, but defined like a property with get and set.
37
Serialisation
Persistence of objects on the net or on disks or a server All classes marked as [Serializable] can have their objects
send out with writeObject and retrieved with readObject. C# serialization is special in that objects can be serialized in
binary or in XML using Serialize and Deserialize The XML serialising is done via SOAP
SoapFormatter swrite = new SoapFormatter ();
Swrite.Serialize(output,st);
SoapFormatter sread = new SoapFormatter ();
Fromdisk = (theType) sread.Deserialize(input);
Where output and input are the same file
38
Delegates
Delegates allow references to methods They separate methods from a specific name One step up from interfaces
MM
M
A
B C
F() -- calls M
M
MMM
I
A B C
F() -- calls M
MD
D1(P)D2(Q)D3(R)
F(D1) -- calls P via M
P Q R
A B C
Interfaces Inheritance Delegates
39
Events
Events manage external signals Each event is connected to a delegate Classes can register a matching callback method with an event
using += and deregister using -= When the event fires, all registered objects will have their
methods fired.
Once the event and delegate are set up (as they are in Windows Forms), the programmer only has to supply the callback methods.
40
Other C# basic goodies
Enumerations - System.Enum Param modifier allows variable number of parameters Five kinds of method access modifiers
– public - any object or subclass
– private - only the class that defined the method - default
– protected - only the class that defined it and its subclasses
– internal - for an assembly (this is the Java protected form)
– protected internal - as it says
Namespaces for creating a class structure– Remoting, Drawing, Forms, XML, Web
Assemblies for archiving compiled classes, metadata, images etc
41
Generics
Part of the Rotor Gyro download Defined in the OOPLSA paper by Kennedy and Syme
Better approach than dynamic polymorphism (based on object supertype) - safety, expressivity, clarity, efficiency
Stack s = new Stack();s.Push((int)s.Pop()+(int)s.Pop());Stack <int> s = new Stack <int> ();s.Push(s.Pop()+s.Pop());
Extension to the CLR giving exact runtime types, dynamic linking, and shared code
42
The bad news
Visual C# requirements– 96Mb workstation, 192Mb server
– 600Mb on system drive, 1.5GB installation drive
Visual Studio .Net Professional– On Windows XP Professionsal 160Mb
– 3.5Gb on installation drive including 500Mb on system drive
– Installation can take 4 hours
Java 1.4 and TextPad– Maximum 48M
– 70Mb on disk drive
But C# as a command line compiler is of reasonable size
43
Where to get C#
ECMA specs:
http://msdn.microsoft.com/net/ecma
Microsoft commercial C# and CLR SDK
http://msdn.microsoft.com/downloads
Shared source info (Rotor) – for non-Windows platforms
http://www.microsoft.com/sharedsource
Microsoft Academic Alliancehttp://www.msdnaa.net/
44
Further Reading
Bishop Judith and Horspool Nigel, “C# Concisely”, Addison Wesley, due out July 2003
Peter Drayton, Ben Albahari, Ted Neward, C# in a Nutshell, O’Reilly, March 2002
Troelsen, Andrew “C# and the .NET platform” A! press 2001
Visual Studio help files
DevHood tutorials -- see www.devhood.com
http://www.cs.up.ac.za/rotor -- for the Views project
45
.NET offerings
CLISSCLI.NET
ECMA standardisedCommonLanguageInfrastructure
Microsoft Windows’Web serviceFramework
Microsoft’sImplementation ofthe CLI (plus some)= Rotor
46
47