71
Introduction to Programming in .Net Environment Masoud Milani

C sharp part2

Embed Size (px)

Citation preview

Page 1: C sharp part2

Introduction to Programming in

.Net Environment

Masoud Milani

Page 2: C sharp part2

Programming in C#

Part 2

Page 3: C sharp part2

Introduction to Programming in .Net Environment

1-3 ©Masoud Milani

Overview

Classes

Inheritance

Abstract classes

Sealed classes

Files

Delegates

Interfaces

Page 4: C sharp part2

Introduction to Programming in .Net Environment

1-4 ©Masoud Milani

Classes Members

Constants Fields Methods

parameters

Properties Indexer Operators Constructors Destructors

Overloading

Page 5: C sharp part2

Introduction to Programming in .Net Environment

1-5 ©Masoud Milani

Parameters Passing Pass by value

Value types are passed by value by default

int Smallest(int a, int b) {

if (a > b) return b;

else return a;}

Change in a value parameter is not reflected in the caller

Page 6: C sharp part2

Introduction to Programming in .Net Environment

1-6 ©Masoud Milani

Parameters Passing Pass by reference

out (output)

void Smaller(int a, int b, out int result){

result=a>b?b: a;}

Change in a out parameter is reflected in the caller

The function can not use the value of an out parameter before an assignment is made to it.

int a=20;int b=30;

Smaller(a, b, out sm);

sm=20

Page 7: C sharp part2

Introduction to Programming in .Net Environment

1-7 ©Masoud Milani

Parameters Passing Pass by reference

ref (input and output)

void Swap(ref int a, ref int b){

int t=a;a=b;b=t;

}

Change in a ref parameter is reflected in the caller

The function can use the value of a reference parameter before an assignment is made to it.

int a=20;int b=30;

Swap(ref a, ref b);

a=30b=20

Page 8: C sharp part2

Introduction to Programming in .Net Environment

1-8 ©Masoud Milani

Parameters Passing Reference types are passed by

reference by defaultpublic class ParamClass{

public int myValue;}

ParamClass p=new ParamClass();

p.myValue=9;

Console.WriteLine("Before Increment, p.myValue={0}", p.myValue);

Increment(p);

Console.WriteLine("After Increment, p.myValue={0}",

p.myValue);

static void Increment(ParamClass q){

q.myValue++;}

Before Increment, p.myValue=9

After Increment, p.myValue=10

Page 9: C sharp part2

Introduction to Programming in .Net Environment

1-9 ©Masoud Milani

Variable Number of Parameters

int a=Smallest(5, 4, -3, 45, 2);

int b=Smallest(1, 2, 3);

int Smallest(params int[] a){

int smallest=int.MaxValue;foreach (int x in a)

if (x < smallest)smallest=x;

return smallest;}

Page 10: C sharp part2

Introduction to Programming in .Net Environment

1-10 ©Masoud Milani

Method Overloading

More than one method with the same name can be defined for the same class

methods must have different signatures

Page 11: C sharp part2

Introduction to Programming in .Net Environment

1-11 ©Masoud Milani

Operator Overloading

More than one operator with the same name can be defined for the same class

Overloaded operators must be public

Static

Precedence and associativity of the operators can not be changed.

Page 12: C sharp part2

Introduction to Programming in .Net Environment

1-12 ©Masoud Milani

Operator Overloadingpublic class MyType{

public MyType(int v){

myValue=v;}

public int myValue;

public static MyType operator + (MyType x, MyType y)

{return new MyType(x.myValue +

y.myValue);}

}

MyType p(5);MyType q(6);

MyType s=p+q;

s += p;

Page 13: C sharp part2

Introduction to Programming in .Net Environment

1-13 ©Masoud Milani

Operator Overloadingpublic class MyType{

…public static MyType operator + (MyType x, int y){

return new MyType(x.myValue + y);}

}

MyType p(5);

MyType s=p+7;

s += 7

Page 14: C sharp part2

Introduction to Programming in .Net Environment

1-14 ©Masoud Milani

Operator Overloadingpublic class MyType{

…public static MyType operator ++ (MyType x){

x.myValue += 1;return new MyType(x.myValue + 1);

}

}

MyType p(5);

MyType s=p++;

Page 15: C sharp part2

Introduction to Programming in .Net Environment

1-15 ©Masoud Milani

Operator Overloadingpublic class MyType{

…public static bool operator

true(MyType x){

return x.myValue !=0;}

public static bool operator false (MyType x)

{return x.myValue == 0;

}

}

MyType z(5);

if (z)

Console.WriteLine("true");else Console.WriteLine("false");

Page 16: C sharp part2

Introduction to Programming in .Net Environment

1-16 ©Masoud Milani

Indexers

Indexers are properties that allow objects to be accessed like arrays

The accessor functions for indexers take additional parameter(s) for index

Indexers can not be declared static

Exams ex=new Exams();

ex [1] =100;Indexe

r

Page 17: C sharp part2

Introduction to Programming in .Net Environment

1-17 ©Masoud Milani

Indexer

public class Exams{

public int this[int examNo]{

get{

…}set{

…}

}

Exams ex=new Exams();

ex[1]=100;ex[2]=50;

int average=ex[1] + ex[2];

Page 18: C sharp part2

Introduction to Programming in .Net Environment

Exampleusing System;

/// <summary>///     A simple indexer example./// </summary>class IntIndexer{    private string[] myData;

    public IntIndexer(int size)    {        myData = new string[size];

        for (int i=0; i < size; i++)        {            myData[i] = "empty";        }    }

   1-18 ©Masoud Milani

Page 19: C sharp part2

Introduction to Programming in .Net Environment

Examplepublic string this[int pos]

    {        get       {            return myData[pos];        }        set       {            myData[pos] = value;        }    }

   

1-19 ©Masoud Milani

Should use this keyword

Page 20: C sharp part2

Introduction to Programming in .Net Environment

Examplestatic void Main(string[] args)

    {        int size = 10;

        IntIndexer myInd = new IntIndexer(size);

        myInd[9] = "Some Value";        myInd[3] = "Another Value";        myInd[5] = "Any Value";

        Console.WriteLine("\nIndexer Output\n");

        for (int i=0; i < size; i++)        {            Console.WriteLine("myInd[{0}]: {1}", i,

myInd[i]);        }    }} 1-20 ©Masoud Milani

Page 21: C sharp part2

Introduction to Programming in .Net Environment

OutputIndexer Output

myInd[0]: empty

myInd[1]: empty

myInd[2]: empty

myInd[3]: Another Value

myInd[4]: empty

myInd[5]: Any Value

myInd[6]: empty

myInd[7]: empty

myInd[8]: empty

myInd[9]: Some Value1-21 ©Masoud Milani

Page 22: C sharp part2

Introduction to Programming in .Net Environment

1-22 ©Masoud Milani

Exercise

Write a class Exams that have 3 private integer fields exam1, exam2

and exam3

An indexer that sets or gets the value of each exam

A public property Average that returns the average of the three exams

Page 23: C sharp part2

Introduction to Programming in .Net Environment

1-23 ©Masoud Milani

Exams class

public class Exams{

public Exams(int ex1, int ex2, int ex3){

…}

private int exam1;private int exam2;private int exam3;

public double Average{

…}

}

Page 24: C sharp part2

Introduction to Programming in .Net Environment

1-24 ©Masoud Milani

Inheritance

Implements isA relation Student isA Person

public class Person{

public Person(string fn, string ln)

{firstName=fn;lastName=ln;

}

private string firstName;private string lastName;

}

public class Student : Person{ public Student(string fn, string ln, string mj): base(fn, ln)

{major=mj;

}

private string major;}

Page 25: C sharp part2

Introduction to Programming in .Net Environment

1-25 ©Masoud Milani

Inheritance A subclass can hide the inherited members of

its superclass using the keyword new

public class Person{

… public void Show() { Console.Write("Name: {0}, {1}", lastName, firstName)}

}

public class Student : Person{

…public new void Show(){

base.Show();Console.Write("major: {0}",

major);}

}

Page 26: C sharp part2

Introduction to Programming in .Net Environment

1-26 ©Masoud Milani

Inheritance

Person p = new Person("P1-F", "P1-L");p.Show();Console.WriteLine();

Student s=new Student("S1-F", "S1-L", "CS");s.Show();Console.WriteLine();

p=s;p.Show();

Name: P1-L, P1-F

Name: S1-L, S1-F

Name: S1-L, S1-F Major: CS

Page 27: C sharp part2

Introduction to Programming in .Net Environment

1-27 ©Masoud Milani

Virtual Function

A class can allow its subclasses to override its member functions by declaring them virtualpublic class Person

{…

public virtual void Show() { Console.Write("Name: {0}, {1}", lastName, firstName)}

}

public class Student : Inheritance.Person{

…public override void Show(){

base.Show();Console.Write("major: {0}",

major);}

}

using namespace

the override keyword is also required.

Page 28: C sharp part2

Introduction to Programming in .Net Environment

1-28 ©Masoud Milani

Virtual Function

Person p = new Person("P1-F", "P1-L");p.Show();Console.WriteLine();

Student s=new Student("S1-F", "S1-L", "CS");s.Show();Console.WriteLine();

p=s;p.Show();

Name: S1-L, S1-F Major: CS

Name: S1-L, S1-F Major: CS

Name: P1-L, P1-F

Page 29: C sharp part2

Introduction to Programming in .Net Environment

1-29 ©Masoud Milani

Sealed Modifier

A sealed class is a class that can not be the base of any other class

used to prevent inheritance from the class to facilitate future class modification

A sealed method overrides an inherited virtual method with the same signature

Used to prevent further overriding of the method

Page 30: C sharp part2

Introduction to Programming in .Net Environment

Exampleusing System;

sealed class MyClass

{

public int x;

public int y;

}

class MainClass

{

public static void Main()

{

MyClass mC = new MyClass();

mC.x = 110;

mC.y = 150;

Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);

}

}1-30 ©Masoud Milani

Page 31: C sharp part2

Introduction to Programming in .Net Environment

Example

class MyDerivedC: MyClass {

}

1-31 ©Masoud Milani

Complation error!

Page 32: C sharp part2

Introduction to Programming in .Net Environment

1-32 ©Masoud Milani

Abstract Classes

An abstract class is a class that can not be instantiated

Abstract classes are used for reuse and structural organization of the program

Abstract classes can have abstract or specified methods

Non-abstract subclasses must override the abstract methods that they inherit

Page 33: C sharp part2

Introduction to Programming in .Net Environment

1-33 ©Masoud Milani

Abstract Classes

Software requirement is given: There is no object that is only a person.

Each person is either a student or a graduate student

Page 34: C sharp part2

Introduction to Programming in .Net Environment

1-34 ©Masoud Milani

Abstract Classes

public abstract class Person{

public Person(string fn, string ln){

firstName=fn;lastName=ln;

}

private string firstName;private string lastName;

public virtual void Show(){

Console.Write("Name: {0}, {1}", lastName, firstName);

}}

Error:Abstract classes can not be instantiated

Person p(“FN-1”, “LN-1”);

Page 35: C sharp part2

Introduction to Programming in .Net Environment

1-35 ©Masoud Milani

Exercise

Courses

exam1exam2exam3

Average

take

sClass Grad Student

GradStudent( … )bool pass // >80void override Show()

class Student

string majordouble Average

Student( … )bool Pass // >60void override Show()

Abstract class Person

string fNamestring lName

Person(string fn, string ln)

void virtual Show()

isA

isA

Page 36: C sharp part2

Introduction to Programming in .Net Environment

1-36 ©Masoud Milani

Exercise Ask the number of students

For each student ask First Name

Last Name

Major

Scores for each of three exams

Whether or not this is a graduate student

Create an appropriate student object and store it in an array

Call Show member of each array entry

Page 37: C sharp part2

Introduction to Programming in .Net Environment

1-37 ©Masoud Milani

Person class

public abstract class Person{

public Person(string fn, string ln){

…}private string firstName;private string lastName;

public virtual void Show(){

…}

}

Page 38: C sharp part2

Introduction to Programming in .Net Environment

1-38 ©Masoud Milani

Student class

public class Student : Inheritance.Person{

public Student(string fn, string ln, string mj,

int ex1, int ex2, int ex3):base(fn, ln)

{…

}private string major;

public override void Show(){

…}

public virtual bool Pass{

get{

}}protected Exams scores;

public double Average{

get{

…}

}}

Page 39: C sharp part2

Introduction to Programming in .Net Environment

1-39 ©Masoud Milani

GradStudent class

public class GradStudent : Inheritance.Student{

public GradStudent(string fn, string ln, string mj,

int ex1, int ex2, int ex3): base(fn, ln, mj, ex1, ex2, ex3)

{…

}

public override bool Pass{

get{

…}

}}

Page 40: C sharp part2

Introduction to Programming in .Net Environment

1-40 ©Masoud Milani

Files A file is a sequential sequence of bytes

Applicable classes Text Input

StreamReader

Text Output StreamWriter

Input/Output FileStream

NameSpace System.IO

Page 41: C sharp part2

Introduction to Programming in .Net Environment

1-41 ©Masoud Milani

StreamWriter

void WriteText(){

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

StreamWriter outFile=new StreamWriter("myOutFile.txt");

for(int i=0; i<data.Length; i++)outFile.WriteLine("data[{0}]={1}", i, data[i]);

outFile.Close();

}

myOutFile:data[0]=1data[1]=2data[2]=3data[3]=4data[4]=5

Page 42: C sharp part2

Introduction to Programming in .Net Environment

1-42 ©Masoud Milani

StreamReader Similar to StreamWriter

Check for end of stream using the method Peek()

StreamReader inpTextFile=new StreamReader("myOutFile.txt");

while(inpTextFile.Peek() >=0){

string nextLine=inpTextFile.ReadLine();Console.WriteLine(int.Parse(nextLine.Substring(nextLine.IndexOf("=")

+1)));} inpTextFile.Close();

Page 43: C sharp part2

Introduction to Programming in .Net Environment

1-43 ©Masoud Milani

Exercise

Modify the previous program to save and retrieve information

Page 44: C sharp part2

Introduction to Programming in .Net Environment

1-44 ©Masoud Milani

FileStream

To open a FileStream, we need to specify

Physical path

File Mode

File Access

Page 45: C sharp part2

Introduction to Programming in .Net Environment

1-45 ©Masoud Milani

FileMode Enumeration

Append Opens the file if it exists and seeks to the

end of the file, or creates a new file

Create A new file should be created. If the file

already exists, it will be overwritten.

Open An existing file should be opened

Page 46: C sharp part2

Introduction to Programming in .Net Environment

1-46 ©Masoud Milani

FileAccess Enumeration

Read Read access

ReadWrite Read and write access

Write Write access

Page 47: C sharp part2

Introduction to Programming in .Net Environment

1-47 ©Masoud Milani

Formatter

Direct reading to and Writing from FileStreams is very difficult

Must read and write byte by byte

Use a formatter to format objects that are to be written to the FileStream

BinaryFormatter Formats objects in binary

Page 48: C sharp part2

Introduction to Programming in .Net Environment

1-48 ©Masoud Milani

Formatter

Methods Writing

Serialize

Reading Deserialize

Exceptions: SerializationException

Page 49: C sharp part2

Introduction to Programming in .Net Environment

1-49 ©Masoud Milani

Serialization

string myString="string1";int myInt=16;int[] myData=new int[5]{1,2,3,4,5};

FileStream f=new FileStream("bFile", FileMode.Create, FileAccess.Write);

BinaryFormatter formatter=new BinaryFormatter();

formatter.Serialize(f, myString);formatter.Serialize(f, myInt);formatter.Serialize(f, myData);

f.Close();

Page 50: C sharp part2

Introduction to Programming in .Net Environment

1-50 ©Masoud Milani

[Serializable()]

Page 51: C sharp part2

Introduction to Programming in .Net Environment

1-51 ©Masoud Milani

Deserialization

string myString="string1";int myInt=16;int[] myData=new int[5]{1,2,3,4,5};

f=new FileStream("bFile", FileMode.Open, FileAccess.Read);

myString=(string)formatter.Deserialize(f);myInt=(int)formatter.Deserialize(f);newdata=(int[])formatter.Deserialize(f);

Console.WriteLine("myString={0}", myString);Console.WriteLine("myInt={0}", myInt);

Page 52: C sharp part2

Introduction to Programming in .Net Environment

1-52 ©Masoud Milani

Exercise

Modify the previous program to save and retrieve information using a Binary Formatter

Page 53: C sharp part2

Introduction to Programming in .Net Environment

1-53 ©Masoud Milani

Exception Handling

Exceptions are raised when a program encounters an illegal computation

Division by zero

Array index out of range

Read beyond end of file

….

Page 54: C sharp part2

Introduction to Programming in .Net Environment

1-54 ©Masoud Milani

Exception Handling A method that is unable to perform a

computation throws an exception object

Exceptions can be caught by appropriate routines called exception handlers

Exception handlers receive the exception object containing information regarding the error

Exception objects are instances of classes that are derived from Exception class

Page 55: C sharp part2

Introduction to Programming in .Net Environment

1-55 ©Masoud Milani

Exception Handling try statement allows for catching exceptions

in a block of code

try statement has one or more catch clauses to catch exceptions that are raised in the protected block

int[] a= new int[20];

try{

Console.WriteLine(a[20]);}catch (Exception e){

Console.WriteLine(e.Message);}

Index was outside the bounds of the array

Page 56: C sharp part2

Introduction to Programming in .Net Environment

1-56 ©Masoud Milani

Exception Handling

A try block can have multiple catch clauses

The catch clauses are searched to find the first clause with a parameter that matches the thrown exception

The program continues execution with the first statement that follows the try-catch-finally construct

Page 57: C sharp part2

Introduction to Programming in .Net Environment

1-57 ©Masoud Milani

Exception Handling

try statement has an optional finally clause that executes

When an exception is thrown and the corresponding catch clause is executed

When the protected block executes without raising throwing exception

Page 58: C sharp part2

Introduction to Programming in .Net Environment

1-58 ©Masoud Milani

Exception Handling

int[] a= new int[20];

try{

Console.WriteLine(a[2]);}catch (Exception e){

Console.WriteLine(e.Message);}finally{ Console.WriteLine(“Finally we are done!");}

Finally we are done!

Page 59: C sharp part2

Introduction to Programming in .Net Environment

1-59 ©Masoud Milani

Exception Handling

Exception classes IndexOutOfRangeException Class 

when an attempt is made to access an element of an array with an index that is outside the bounds of the array. This class cannot be inherited

DivideByZeroException Class The exception that is thrown when there is

an attempt to divide an integral or decimal value by zero.

Page 60: C sharp part2

Introduction to Programming in .Net Environment

1-60 ©Masoud Milani

Exception Handling Exception classes

InvalidCastException Class The exception that is thrown for invalid

casting or explicit conversion

EndOfStreamException Class The exception that is thrown when

reading is attempted past the end of a stream

For a list of Exception classes search for “SystemException Hierarchy” in MSDN.Net

Page 61: C sharp part2

Introduction to Programming in .Net Environment

1-61 ©Masoud Milani

Programmer Defined Exceptions

Programmer defined exception classes must inherit from

ApplicationException class

Provide at least one constructor to set the message property

public class MyException : System.ApplicationException{

public MyException(string message):base(message){}

}

Page 62: C sharp part2

Introduction to Programming in .Net Environment

1-62 ©Masoud Milani

Programmer Defined Exceptions

public static int g(int a, int b){ // adds positive numbers

if (a <0){

MyException e=new MyException("1st parameter is negative");

throw(e);}if (b <0){

MyException e=new MyException("2nd dparameter is negative");

throw(e);}return a+b;

} try{

Console.WriteLine("g(4, -5)={0}", g(4, -5));}catch (Exception e)

Console.WriteLine(e.Message);}

Page 63: C sharp part2

Introduction to Programming in .Net Environment

1-63 ©Masoud Milani

Delegates

A delegate is a class that has only one or more methods

Allows methods to be treated like objects

delegate int D1(int i, int j);

Page 64: C sharp part2

Introduction to Programming in .Net Environment

1-64 ©Masoud Milani

Delegates

delegate int D1(int i, int j);

public static int add(int a, int b){

Console.WriteLine(a+b);return a+b;

}

public static int mult(int a, int b){

Console.WriteLine(a*b);return a*b

}

static void Main(string[] args){

D1 d1=new D1(add);D1 d2=new D1(mult);

d1=d1 + d2;d1(5, 5);

}

1025

Page 65: C sharp part2

Introduction to Programming in .Net Environment

1-65 ©Masoud Milani

Delegates

delegate int D1(int i, int j);

public static int add(int a, int b){

Console.WriteLine(a+b);return a+b;

}

public static int mult(int a, int b){

Console.WriteLine(a*b);return a*b

}

static void Main(string[] args){

D1 d1=new D1(add);D1 d2=new D1(mult);

d1=d1 + d2;

f(d1);}

1025

public static void f(D1 d){

d(5,5);}

Page 66: C sharp part2

Introduction to Programming in .Net Environment

1-66 ©Masoud Milani

Exercise Write a sort method that accepts an array of

integer and a boolean delegate, compare, and sorts the array according to the delegate

public static void sort(int[] data, CompareDelegate Compare){

for (int i=0; i<data.Length; ++i)for(int j=i+1; j<data.Length; j++)

if (Compare(data[i],data[j])){

int t=data[i];data[i]=data[j];data[j]=t;

}}

Page 67: C sharp part2

Introduction to Programming in .Net Environment

1-67 ©Masoud Milani

Interfaces

An interface specifies the members that must be provided by classes that implement them

An Interface can define methods, properties, events, and indexers

The interface itself does not provide implementations for the members that it defines

Page 68: C sharp part2

Introduction to Programming in .Net Environment

1-68 ©Masoud Milani

Interfaces

To add an interface, add a class and change it in the editor

interface IPublication{

string Title{

get;set;

}

string Publisher{

get;set;

}

void Display();}

Page 69: C sharp part2

Introduction to Programming in .Net Environment

1-69 ©Masoud Milani

Interfaces

public class Book: IPublication{

public Book(string title, string author,

string publisher){

Title=title;Author=author;Publisher=publisher;

}

private string author;private string title;private string publisher;

public string Author{

…}

public string Title{

…}

public string Publisher{

…}

public void Display(){

…}

}

Page 70: C sharp part2

Introduction to Programming in .Net Environment

1-70 ©Masoud Milani

Interfaces

static public void Display(IPublication[] p){

for (int i=0; i<p.Length; ++i)p[i].Display();

}

static void Main(string[] args){IPublication[] publications= new

IPublication[2];

publications[0] = new Book("t0", "a0", "p0");

publications[1] = new Magazine("t1", "a1");

Display(publications);}

public class Magazine : Interfaces.IPublication{

…}

Page 71: C sharp part2

Introduction to Programming in .Net Environment

1-71 ©Masoud Milani

Interfaces

An interface can have only public members

A class that is implementing an interface must implement all its members

A class can implement multiple interfaces