04 Classes Methods Stmts

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 28

Classes, Methods and

Statements
Objectives

“With regards to programming classes, methods and statements, C#


offers what you would come to expect from a modern OOPL…”

• Classes
• Namespaces
• Methods
• Statements

Microsoft 2
Part 1

• Classes…

Microsoft 3
The class is key

• In .NET, classes play a central role


– every type is represented by a class
– all data and code must reside within a class

public class Customer


public class App {
.
{ .
.
public static void Main() }
{ public class Globals
. {
. .
.
. .
} }
} public class Utility
{
.
.
.
}

Microsoft 4
Part 2

• Namespaces…

Microsoft 5
Namespaces

• The FCL contains thousands of classes…


• Inevitably, name collisions will occur
– between classes in the FCL
– between your classes and those in the FCL

• Namespaces are a way to minimize collisions…


– as well as logically organize our code

Microsoft 6
Definition

• A namespace N is a set of names qualified by N

namespace Workshop
{ Workshop.Customer
public class Customer
{
.
.
.
}
Workshop.Product
public class Product
{
.
.
.
}
}//namespace

Microsoft 7
Example

• Framework Class Library (FCL)


contains 1000's of classes
– organized by namespaces

Microsoft 8
FCL namespaces

• FCL's outermost namespace is "System"


• FCL technologies nested within System…

Namespace Purpose Assembly


System Core classes, types mscorlib.dll

System.Collections Data structures mscorlib.dll

System.Data Database access System.Data.dll

System.Windows.Forms GUI System.Windows.Forms.dll

System.XML XML processing System.Xml.dll

Microsoft 9
Namespace != Assembly

• Orthogonal concepts:
– namespace for logical organization
– assembly for physical packaging

• You must reference an assembly in order to use it


• You can "import" a namespace to reduce typing…

Microsoft 10
Fully-qualified references

• A fully-qualified reference starts with the outermost namespace:

System.Console.WriteLine("message");

• If you want, you can import a namespace & drop imported prefix
– using directive allows you to import a namespace…

using System;
.
.
.
Console.WriteLine("message");

Microsoft 11
Complete example

• using directive(s) specified at top of file namespace Workshop


{
public class Customer
{
.
.
/* main.cs */ .
}
using System; public class Product
using Workshop; {
.
.
public class App .
}
{ }
public static void Main()
{
Customer c;
c = new Customer("jim bag", 94652);
Console.WriteLine( c.ToString() );
}
}

Microsoft 12
Point of clarification

• using directive only includes types from specified namespace


• nested namespaces must be separately imported...

/* main.cs */

using System;
using System.Windows;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;

public class App


{
.
.
.
}

Microsoft 13
Part 3

• Methods…

Microsoft 14
Types of methods

• Classes contain 2 types of methods:


– subroutines with no return value (void)
– functions with a return value (int, string, etc.)

• Methods may be:


– instance
– static

• Instance methods require an object to call


• Static methods are global and thus require only class name

Microsoft 15
Example

• Array class in FCL


– fully-qualified name is System.Array

namespace System
{
public class Array
{
instance method public int GetUpperBound(int dimension)
(absence of static) { ... }

static method public static void Sort(Array a)


(presence of static) { ... }
.
.
.
}
}

Microsoft 16
Calling methods

• Here's an example of calling into the Array class:

/* main.cs */

using System;

public class App


{
public static void Main()
{
int[] data = { 11, 7, 38, 55, 3 };

Array.Sort(data);

for (int i=0; i<=data.GetUpperBound(0); i++)


Console.WriteLine(i + ": " + data[i]);
}
}

Microsoft 17
Parameter passing

• C# offers three options:


– pass-by-value (default)
– pass-by-reference
– pass-by-result ("copy-out")

• More subtle than you might think…

Microsoft 18
Case 1: pass-by-value with a value type

• Bits are copied…

value 99 stack frame for Foo

public class App


stack frame for Main
{ i 99
public static void Main() Stack
{
int i = 99;
Foo(i);
System.Console.WriteLine(i); // i = 99
}

private static void Foo(int value)


{
value = value + 1;
}
}

Microsoft 19
Case 2: pass-by-ref with a value type

• Reference is passed…

value stack frame for Foo

public class App


stack frame for Main
{ i 99
public static void Main() Stack
{
int i = 99;
Foo(ref i);
System.Console.WriteLine(i); // i = 100
}

private static void Foo(ref int value)


{
value = value + 1;
}
}

Microsoft 20
Case 3: pass-by-value with a reference type

• Reference is copied…

A
public class App
{
public static void Main() Vals
{ array
Stack
int[] Vals;
Vals = new int[1000];
Vals[0] = 99;
Foo2(Vals);
System.Console.WriteLine(Vals[0]); // 100
}

private static void Foo2(int[] A)


{
A[0] = A[0] + 1;
}
}
Microsoft 21
Case 4: pass-by-ref with a reference type

• Reference to reference
is passed…
A
public class App
{
public static void Main() Vals
{ array
Stack
int[] Vals;
Vals = new int[1000];
Vals[0] = 99;
Foo2(ref Vals);
System.Console.WriteLine(Vals[0]); // 100
}

private static void Foo2(ref int[] A)


{
A[0] = A[0] + 1;
}
}
Microsoft 22
Case 5: pass-by-result?

• Pass-by-result is identical to pass-by-ref, except:


– no value is passed in
– result is copied back upon method return

public class App


{
public static void Main()
{
int a, b;
ComputeXYZ(out a, out b);
System.Console.WriteLine("Results: " + a + ", " + b);
}

private static void ComputeXYZ(out int r1, out int r2)


{
r1 = ...;
r2 = ...;
}
}

Microsoft 23
Part 4

• Statements…

Microsoft 24
Statements in C#

• C# supports the standard assortment…

• Assignment
• Subroutine and function call
• Conditional
– if, switch
• Iteration
– for, while, do-while
• Control Flow
– return, break, continue, goto

Microsoft 25
Examples

x = obj.foo();

if (x > 0 && x < 10)


count++;
else if (x == -1)
...
else {
... while (x > 0)
} {
...

x--;
} for (int k = 0; k < 10; k++)
{
...
}

Microsoft 26
foreach

• Specialized foreach loop provided for collections like array


– reduces risk of indexing error
– provides read only access

int[] data = { 1, 2, 3, 4, 5 };
int sum = 0;

foreach foreach (int x in data)


{
sum += x;
}

type value collection

Microsoft 27
Summary

• Standard OOP language support:


– namespaces
– classes
– methods
– statements

• Two types of methods


– instance methods require an object to call
– static methods are global and thus require only class name

Microsoft 28

You might also like