Introduction to C#

7 downloads 4294 Views 4MB Size Report
Jan 22, 2008 ... Goals of the C# language. • A simple, modern, general-purpose object-oriented langauge. • Software robustness and programmer productivity.
Introduction to C#

Game Design Experience Professor Jim Whitehead January 22, 2008

Creative Commons Attribution 3.0 (Except imported slides, as noted) creativecommons.org/licenses/by/3.0

Goals of the C# language • A simple, modern, general-purpose object-oriented langauge • Software robustness and programmer productivity ▶

Strong type checking, array bounds checking, detection of use of uninitialized variables, source code portability, automatic garbage collection

• Useable in creating software components • Ease of learning by programmers familiar with C++ and Java • Usable for embedded and large system programming • Strong performance, but not intended to compete with C or assembly language Type II safety cans for flammables

Brief history of C# • Originated by Microsoft as a response to Java ▶

Initial public release in 2000

• Language name inspired by musical note C# ▶ ▶

A “step above” C/C++ (and Java) Linux wags: Db (D-flat, same note, different name)

• Lead designers: Anders Hejlsberg, Scott Wiltamuth ▶

Hejlsberg experience: Turbo Pascal, Borland Delphi, J++

• C# standardized via ECMA and ISO ▶

However, Microsoft retains architectural control

Key language features • Unified object system ▶

Everything type is an object, even primitives

• Single inheritance • Interfaces ▶

Specify methods & interfaces, but no implementation

• Structs ▶

cking, Flickr www.flickr.com/photos/spotsgot/1414345/

A restricted, lightweight (efficient) type

• Delegates ▶ ▶

Expressive typesafe function pointer Useful for strategy and observer design patterns

• Preprocessor directives

Hello World example class Hello { static void Main() { // Use the system console object System.Console.WriteLine(“Hello, World!”); } } Creates a new object type (class) called Hello. It contains a single method, called Main. Main contains one line, which writes “Hello, World!” on the display. The method that performs this action is called WriteLine.

oskay, Flickr www.flickr.com/photos/oskay/472097903/

The WriteLine method belongs to the System.Console object. The keyword “static” means that the method Main can be called even if there is no current instance of the class. It’s a class method, not an instance method. The line beginning with // is a comment, and does not execute. Demonstration of creating Hello World inside Visual C# Express

Syntax • Case-sensitive • Whitespace has no meaning ▶

Sequences of space, tab, linefeed, carriage return

• Semicolons are used to terminate statements (;) • Curly braces {} enclose code blocks • Comments: ▶ ▶ ▶

/* comment */ // comment /// • Automatic XML commenting facility

Peter Hellberg, Flickr www.flickr.com/photos/peterhellberg/1858249410

Classes and Objects • A class combines together ▶

Data • Class variables



Behavior • Methods

• A key feature of objectoriented languages ▶

Jelly bean mold, photo by daxiang stef www.flickr.com/photos/daxiang/96508482/

Procedural languages, such as C, did not require clustering of data and behavior

• Class/instance distinction ▶ ▶

▶ ▶

Class defines variables & methods Need to create instanced of the class, called objects, to use variables & methods Exception: static methods and variables Analogy: a jelly bean mold (class) can be used to create a large number of jelly beans (objects, instances of the class)

Defining a class [attributes] [access-modifiers] class identifier [:base-class [,interface(s)]] { class-body } Simple example: class A { int num = 0; } •

public, private, protected, internal, protected internal

Base-class Indicates (optional) parent for inheritance

Interfaces ▶



Can safely be ignored

Access modifiers: one of





www.flickr.com/photos/spotsgot/1559060/

Attributes: used to add metadata to a class





// a simple variable

A (int initial_num) { num = initial_num; } // set initial value of num ▶



cking, Flickr

Indicates (optional) interfaces that supply method signatures that need to be implemented in the class

Class-body ▶

Code for the variables and methods of the class

Inheritance • Operationally ▶

▶ ▶

If class B inherits from base class A, it gains all of the variables and methods of A Class B can optionally add more variables and methods Class B can optionally change the methods of A

• Uses ▶ ▶

Reuse of class by specializing it for a specific context Extending a general class for more specific uses

• Interfaces ▶



Allow reuse of method definitions of interface Subclass must implement method definitions

cking, Flickr www.flickr.com/photos/spotsgot/1500855/

Inheritance Example class A { public void display_one() { System.Console.WriteLine("I come from A"); } } class B : A { public void display_two() { System.Console.WriteLine("I come from B, child of A"); } } class App { static void Main() { A a = new A(); B b = new B();

}

}

// Create instance of A // Create instance of B

a.display_one(); // I come from A b.display_one(); // I come from A b.display_two(); // I come from B, child of A Enya_z, Flickr www.flickr.com/photos/nawuxika/270033468/

In-class demo of this code in Visual C# Express

Visibility • A class is a container for data and behavior • Often want to control over which code: ▶ ▶

Can read & write data Can call methods

• Access modifiers: ▶

Public • No restrictions. Members visible to any method of any class



Clearly Ambiguous, Flickr www.flickr.com/photos/clearlyambiguous/47022668/

Private • Members in class A marked private only accessible to methods of class A • Default visibility of class variables



Protected • Members in class A marked protected accessible to methods of class A and subclasses of A.

Visibility Example class A { public int num_slugs; protected int num_trees; … } class B : A { private int num_tree_sitters; … } class C { … }

• Class A can see: ▶ ▶

num_slugs: is public num_trees: is protected, but is defined in A

• Class B can see: ▶ ▶ ▶

num_slugs: is public in A num_trees: is protected in parent A num_tree_sitters: is private, but is defined in B

• Class C can see: ▶ ▶

Raindog, Flickr www.flickr.com/photos/raindog/ 436176848/

num_slugs: is public in A Can’t see: • num_trees: protected in A • num_tree_sitters: private in B

Constructors • Use “new” to create a new object instance ▶

This causes the “constructor” to be called

• A constructor is a method called when an object is created ▶

C# provides a default constructor for every class • Creates object but takes no other action



bucklava, Flickr www.flickr.com/photos/9229859@N02/1985775921/

Typically classes have explicitly provided constructor

• Constructor ▶ ▶ ▶

Has same name as the class Can take arguments Usually public, though not always • Singleton design pattern makes constructor private to ensure only one object instance is created

Type System •

Value types ▶ ▶ ▶



Directly contain data Cannot be null Allocated on the stack

Reference types ▶ ▶ ▶

Contain references to objects May be null Allocated on the heap int i = 123; string s = "Hello world";

i s

Numeral type, by threedots www.flickr.com/photos/threedots/115805043/

123 "Hello world"

Slide adapted from “Introduction to C#”, Anders Hejlsberg www.ecma-international.org/activities/Languages/ Introduction%20to%20Csharp.ppt

Predefined Types • C# predefined types ▶ ▶ ▶ ▶ ▶ ▶

Reference Signed Unsigned Character Floating-point Logical

object, string sbyte, short, int, long byte, ushort, uint, ulong char float, double, decimal bool

• Predefined types are simply aliases for systemprovided types ▶

For example, int == System.Int32 Slide from “Introduction to C#”, Anders Hejlsberg www.ecma-international.org/activities/Languages/ Introduction%20to%20Csharp.ppt

Unusual types in C# • Bool ▶



Holds a boolean value, “true” or “false” Integer values do not equal to boolean values • 0 does not equal false • There is no built-in conversion from integer to boolean

• Decimal ▶

▶ ▶

A fixed precision number up to 28 digits plus decimal point Useful for money calculations 300.5m • Suffix “m” or “M” indicates decimal

tackyspoons, Flickr www.flickr.com/photos/tackyspoons/812710409/

Unified type system • All types ultimately inherit from object ▶

Classes, enums, arrays, delegates, structs, …

• An implicit conversion exists from any type to type object

object Stream MemoryStream

Hashtable FileStream

int

double

Slide from “Introduction to C#”, Anders Hejlsberg www.ecma-international.org/activities/Languages/ Introduction%20to%20Csharp.ppt

Variables type variable-name [= initialization-expression]; Examples: int number_of_slugs = 0; string name; float myfloat = 0.5f; bool hotOrNot = true; Also constants: const int freezingPoint = 32;

• Variables must be initialized or assigned to before first use • Class members take a visibility operator beforehand • Constants cannot be changed

Enumerations enum identifier [: base-type] { enumerator-list} Example: enum Grades { gradeA = 94, gradeAminus = 90, gradeBplus = 87, gradeB = 84 }

• Base type can be any integral type (ushort, long) except for char • Defaults to int • Must cast to int to display in Writeln ▶

Example: (int)g.gradeA

Conditionals if (expression) statement1 [else statement2] Example: if (i < 5) { System.Console.Writeln(“i is smaller than 5”); } else { System.Console.Writeln(“i is greater than or equal to 5”); }

• C# supports C/C++/Java syntax for “if” statement • Expression must evaluate to a bool value ▶

No integer expressions here

• == means “equal to” for boolean comparison ▶ ▶

if (i == 5) // if i equals 5 if (i = 5) // error, since i = 5 is not a boolean expression

Switch statement switch (expression) { case constant-expression: statement(s); jump-statement [default: statement(s);]

Example: const int raining = 1; const int snowing = 0; int weather = snowing; switch (weather) { case snowing: System.Console.Writeln(“It is snowing!”); goto case raining; case raining; System.Console.Writeln(“I am wet!”); break; default: System.Console.Writeln(“Weather OK”); break; }

• Alternative to if • Typically use break • Can use goto to continue to another case

Homework • Read in Programming C# ▶ ▶ ▶

Chapter 1 (C# and the .NET Framework) Chapter 2 (Getting Started: "Hello World") Chapter 3 (C# Language Fundamentals)

• Try one of the example code samples for yourself in Visual C# Express ▶

Work with your partner

• Book is available online, via O’Reilly Safari ▶ ▶

http://safari.oreilly.com/0596006993 Use on-campus computer to access

More resources • Introduction to C# Anders Hejlsberg ▶ ▶

http://www.ecma-international.org/activities/Languages/Introduction%20to%20Csharp.ppt High-level powerpoint presentation introducing the C# language by its designer