CSCI 1302
Object-Oriented Programming
Intermediate C#
Agenda
Parameter passing (ref, out, & value)
Static
Const
Overloading
Inheritance
Parameter Passing
By default, parameters are passed by value
A copy of the value is passed
The original is not modifiable
Use “ref” to create by-reference parameter passing
A reference to the value is passed (akin to a pointer)
The original (actual) parameter is modifiable
Use “out” when data is strictly coming out of (and being
created in) the function
The original has no value
A new value will be placed into the parameter by the function
By Value Parameter Example
float CalculateCost (float unit_cost, int how_many)
{
return unit_cost * how_many;
}
static void Main()
{
...
line_cost = CalculateCost(uc, hm);
...
}
By Value Parameter Example
float CalculateCost (float unit_cost, int how_many)
{
return unit_cost * how_many;
}
Even if you change
static void Main() these locally, they won’t
{ change in Main.
...
line_cost = CalculateCost(uc, hm);
...
}
By Reference Parameter Example
void UpdateGrade (ref float grade, float factor)
{
grade += factor;
}
static void Main()
{
...
for(i=0; i 4))
}
static void Main()
{
...
ReadChoice(c);
...
}
Out Parameter Example
void ReadChoice (out int choice)
{
do {
Console.WriteLine("Please enter a choice 1-4: ");
choice = Int32.Parse(Console.ReadLine());
} while ((choice 4))
}
Choice is generated in
static void Main()
the module and then
{
... returned to Main
ReadChoice(c);
...
}
Static
Each instance of a class (called an object)
has a copy of the attributes
Changing an attribute in one object doesn’t
affect the attribute of another object
But what if we want persistence (shared)
among all instances?
Static Variables
void PrintNumbers ()
{
static int count = 0;
Console.WriteLine(count);
count++;
}
static void Main()
{
...
for(i=0; i MaxSpeed)
currentSpeed = MaxSpeed;
}
...
}
Overloading
Overloading involves using the same
method/function name
Vary the number of parameters
Vary the type of parameters
Cannot just change return type (ambiguity in
invocation)
Useful to keep things simple
Squaring a number…
Overloading Example
int Square (int i)
{
return i * i;
}
float Square (float i)
{
return i * i;
}
static void Main()
{
...
float x = Square(5.3);
int y = Square(9);
...
}
Operator
Overloading
class BMW_Z4
{
...
public BMW_Z4 ()
{
Initialize(0, 2004, false);
}
Notice same method
public BMW_Z4 (int my)
{ name, different
Initialize(0, my, false);
} parameters
private Initialize(int cs, int my, bool tu)
{
currentSpeed = cs; Place common
ModelYear = my;
TopUp = tu; initialization in a
}
...
separate function
}
Inheritance
Inheritance allows one class to take on the
properties of another
Superclass-subclass relationship
Sometimes called parent-child relationship
Use the keyword extends to express this
relationship
Subclass will “inherit” certain attributes and
methods
Benefit: good design, reuse of code
Class Hierarchy
Mammal
int weight
giveBirth( )
Land-Mammal
int numLegs
Question: how many
Dog attributes does Dog
boolean rabid have?
Chihuahua SheepDog
Things to Note
Land-Mammal is a superclass to Dog, but
a subclass to Mammal
Dog has three attributes
weight,numLegs and rabid
Two from inheritance, one it declared itself
Visibility and Inheritance
Public – allows all to see
Private – allows only class in which defined to
see
Protected – allows class and all subclasses that
inherit to see
Consequently, we’ll now use protected instead
of private by default… (common)
C# Syntax
class Person
{
...
}
class Student : Person
{
...
}
Notice the use of “:”
class Professor : Person
{
...
}
The Base Class: “Object”
All classes in C# inherit (sometimes implicitly)
from Object
Includes common set:
ToString()
GetType()
Equals()
Often useful to override (implement) these virtual
functions
“public override string ToString()…”
FIN