26
Introduction to C# Modified by Ian Horswill,based on slides from: 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

Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Embed Size (px)

Citation preview

Page 1: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Introduction to C#

Modified by Ian Horswill,based on slides from:

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

Page 2: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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

Page 3: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Key language features

• Syntax similar to ActionScript• Types similar to Meta

► But named differently• Object called “object”• Integer called “int”• List of objects is called object[ ]

► Arrays (lists) are strongly typed• Array of integers different from array of strings

• Inheritance similar to Meta• Interfaces

► Contain methods, but no fields

• Structs► Like classes, but handle memory differently► More efficient for certain applications

• Delegates► Procedures, similar to → in meta

cking, Flickrwww.flickr.com/photos/spotsgot/1414345/

Page 4: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Hello World example

class Hello{ static void Main() { // Use the system console object System.Console.WriteLine(“Hello, World!”); }}

• (Nearly) all C# code consists of class definitions

• Class definitions contain both the fields of the class and all its methods

• C# programs start by running the method named Main inside a particular class

• Here that class is called Hello

• For XNA games, it’s usually called Game1

oskay, Flickrwww.flickr.com/photos/oskay/472097903/

Page 5: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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.

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

oskay, Flickrwww.flickr.com/photos/oskay/472097903/

Page 6: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

What it would really look like

using System;

namespace MyProgram { class Hello { static void Main() { // Use the system console object Console.WriteLine(“Hello, World!”); } }}

• Classes are structured into namespaces, as in Meta

• System is the namespace with all the built-in C# stuff

• System.Console is a class with static methods for printing to the screen

oskay, Flickrwww.flickr.com/photos/oskay/472097903/

Page 7: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

What it would really look like

using System;

namespace MyProgram { class Hello { static void Main() { // Use the system console object Console.WriteLine(“Hello, World!”); } }}

• As in Meta, the using directive tells C# that it should check the System namespace when looking for the values of names

oskay, Flickrwww.flickr.com/photos/oskay/472097903/

Page 8: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

What it would really look like

using System;

namespace MyProgram { class Hello { static void Main() { // Use the system console object Console.WriteLine(“Hello, World!”); } }}

• As in Meta, the using directive tells C# that it should check the System namespace when looking for the values of names

• So using it allows us to just say Console.WriteLine, rather than System.Console.WriteLine, because the System part is understood.

oskay, Flickrwww.flickr.com/photos/oskay/472097903/

Page 9: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

What it would really look like

using System;

namespace MyProgram { class Hello { static void Main() { // Use the system console object Console.WriteLine(“Hello, World!”); } }}

• As in Meta, the using directive tells C# that it should check the System namespace when looking for the values of names

• So using it allows us to just say Console.WriteLine, rather than System.Console.WriteLine, because the System part is understood.

• And in practice, we generally tell C# what namespace our new classes are supposed to be added to.

oskay, Flickrwww.flickr.com/photos/oskay/472097903/

Page 10: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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► /// <comment_in_xml>

• Automatic XML commenting facility

Peter Hellberg, Flickrwww.flickr.com/photos/peterhellberg/1858249410

Page 11: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Classes and Objects

• A class combines together► Data

• Class variables► Behavior

• Methods

• 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)

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

Page 12: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Defining a variable or field

• Type► The kind of data the variable is restricted to► Use object if you don’t want to restrict what kind of data it stores

• Name► Name of the field of variable

• Initial value► Expression for the initial value to give to this variable► For fields, you can only put constants here (e.g. numbers, strings, null), and a few other things

Type name = initialvalue;

Simple examples:

int num = 0; // an integer set to 0;int num; // an integer, no initial value

specifiedstring myString = “this is a string!”; // a string set to “this

is a string!”string[] mystrings; // this variable can hold a

list (array) of // strings, but doesn’t yet have

a valuestring[] mystrings = new string[10](); // an array of 10

strings (each of which is initially null)

cking, Flickrwww.flickr.com/photos/spotsgot/1559060/

Page 13: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Defining a method (i.e. a procedure)

• ReturnType► Type of value returned by the procedure► Use void if it doesn’t return anything

• Type arg► Type and name of each argument

• Body► Code to run when the procedure is called► Use return statement to return a value;

ReturnType name(Type arg1, Type arg2, …) { body }

Simple example:

int Square(int num) { return num*num;} cking, Flickr

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

Page 14: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Defining a class (simple version)

• Base-class (optional)► Indicates (optional) parent for inheritance► If omitted, assumed to be Object

• Class-bodyCode for the variables and methods of the class

► Fields to be stored within objects of this class► Methods that can be called on objects of this class► Constructor, a special kind of method that’s called automatically when an object of this type is

created. Always named the same as the class, and doesn’t include a return type

class name : base-class{ class-body }

Simple example:

class MyClass{ int num = 0; // a simple variable

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

cking, Flickrwww.flickr.com/photos/spotsgot/1559060/

Page 15: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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

cking, Flickrwww.flickr.com/photos/spotsgot/1500855/

Page 16: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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(); // Create instance of A B b = new B(); // 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, Flickrwww.flickr.com/photos/nawuxika/270033468/

Page 17: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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

► 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.

Clearly Ambiguous, Flickrwww.flickr.com/photos/clearlyambiguous/47022668/

Page 18: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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:► num_slugs: is public in A► Can’t see:

• num_trees: protected in A

• num_tree_sitters: private in BRaindog, Flickrwww.flickr.com/photos/raindog/436176848/

Page 19: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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 constructorfor every class

• Creates object but takes no other action► 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

bucklava, Flickrwww.flickr.com/photos/9229859@N02/1985775921/

Page 20: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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;int i = 123;string s = "Hello world";string s = "Hello world";

123123ii

ss "Hello world""Hello world" Slide adapted from “Introduction to C#”, Anders Hejlsbergwww.ecma-international.org/activities/Languages/Introduction%20to%20Csharp.ppt

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

Page 21: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Predefined Types

• C# predefined types► Reference object, string► Signed sbyte, short, int, long► Unsigned byte, ushort, uint, ulong► Character char► Floating-point float, double, decimal► Logical bool

• Predefined types are simply aliases for system-provided types

► For example, int == System.Int32

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

Page 22: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Variables

• Variables must be initialized or assigned to before first use

• Class members take a visibility operator beforehand

• Constants cannot be changed

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;

Page 23: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Enumerations

• 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

enum identifier [: base-type]{ enumerator-list}

Example:

enum Grades{ gradeA = 94, gradeAminus = 90, gradeBplus = 87, gradeB = 84}

Page 24: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Conditionals

• C# supports C/C++/Java/JavaScript/ActionScript 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

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”);}

Page 25: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

Switch statement

• Alternative to if► Evaluates expression► Finds matching case and executes its code

• Case (usually) must end with break;

switch (expression){ case constant-

expression: statement(s); break; [default: statement(s);]

Example:string weather = “snowing”;switch (weather) { case “snowing”:

System.Console.Writeln(“It is snowing!”);

break; case “raining”: System.Console.Writeln(“I

am wet!”); break; default:

System.Console.Writeln(“Weather OK”);

break;}

Page 26: Introduction to C# Modified by Ian Horswill,based on slides from: Game Design Experience Professor Jim Whitehead January 22, 2008 Creative Commons Attribution

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