Top Banner
Mohammad Shaker mohammadshaker.com C# Programming Course @ZGTRShaker 2011, 2012, 2013, 2014 C# Starter L03 – Utilities
92
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C# Starter L03-Utilities

Mohammad Shakermohammadshaker.com

C# Programming Course@ZGTRShaker

2011, 2012, 2013, 2014

C# StarterL03 – Utilities

Page 2: C# Starter L03-Utilities

Today’s Agenda

• const and readonly

• Casting– Direct Casting

– as Keyword

• is Keyword

• enums

• Exception Handling

• UnSafe Code

• Nullable Types

• using Keyword

• Files

• Class Diagram

• Windows Forms

Page 3: C# Starter L03-Utilities

const and readonly

Page 4: C# Starter L03-Utilities

const and readonly

• const

– Must be initialized in the time of declaration

• readonly

– keyword is a modifier that you can use on fields. When a field declaration includes

a readonly modifier, assignments to the fields introduced by the declaration can only occur as

part of the declaration or in a constructor in the same class.

public const int WEIGHT = 1000;

public readonly int y = 5;

Page 5: C# Starter L03-Utilities

const and readonly

• const

– Must be initialized in the time of declaration

• readonly

– keyword is a modifier that you can use on fields. When a field declaration includes

a readonly modifier, assignments to the fields introduced by the declaration can only occur as

part of the declaration or in a constructor in the same class.

public const int WEIGHT = 1000;

public readonly int y = 5;

public readonly int y = 5;

public readonly int y;

Page 6: C# Starter L03-Utilities

const and readonly

• const

– Must be initialized in the time of declaration

• readonly

– keyword is a modifier that you can use on fields. When a field declaration includes

a readonly modifier, assignments to the fields introduced by the declaration can only occur as

part of the declaration or in a constructor in the same class.

public const int WEIGHT = 1000;

public readonly int y = 5;

public readonly int y = 5;

public readonly int y;

Page 7: C# Starter L03-Utilities

Casting

Page 8: C# Starter L03-Utilities

Casting

Direct Casting “as” Keyword

Page 9: C# Starter L03-Utilities

void Example(object o){

// Castingstring s = (string)o; // 1 (Direct Casting)// -OR-string s = o as string; // 2 (Casting with “as” Keyword)// -OR-string s = o.ToString(); // 3 Calling a method

}

Casting

• What’s the difference? Output?

Page 10: C# Starter L03-Utilities

void Example(object o){

// Castingstring s = (string)o; // 1 (Direct Casting)// -OR-string s = o as string; // 2 (Casting with “as” Keyword)// -OR-string s = o.ToString(); // 3 Calling a method

}

Casting

• What’s the difference? Output?

Number (“1”)• If (o is not a string) Throws InvalidCastException if o is not a string. • Otherwise, assigns o to s, even if o is null.

Page 11: C# Starter L03-Utilities

void Example(object o){

// Castingstring s = (string)o; // 1 (Direct Casting)// -OR-string s = o as string; // 2 (Casting with “as” Keyword)// -OR-string s = o.ToString(); // 3 Calling a method

}

Casting

• What’s the difference? Output?

Number (“2”)• Assigns null to s if o is not a string or if o is null. • Otherwise assign to s “CAN’T BE A NULL VALUE”For this reason, you cannot use it with value types.

Page 12: C# Starter L03-Utilities

void Example(object o){

// Castingstring s = (string)o; // 1 (Direct Casting)// -OR-string s = o as string; // 2 (Casting with “as” Keyword)// -OR-string s = o.ToString(); // 3 Calling a method

}

Casting

• What’s the difference? Output?

Number(“3”)• Causes a NullReferenceException of o is null.• Assigns whatever o.ToString() returns to s, no matter what type o is.

Page 13: C# Starter L03-Utilities

void Example(object o){

// Castingstring s = (string)o; // 1 (Direct Casting)// -OR-string s = o as string; // 2 (Casting with “as” Keyword)// -OR-string s = o.ToString(); // 3 Calling a method

}

Casting

• What’s the difference? Output?

1. Throws InvalidCastException if o is not a string. Otherwise, assigns o to s, even if o is null.2. Assigns null to s if o is not a string or if o is null. Otherwise, assigns o to s. For this reason, you cannot use it with

value types.3. Causes a NullReferenceException of o is null. Assigns whatever o.ToString() returns to s, no matter what type o is.

Page 14: C# Starter L03-Utilities

void Example(object o){

// I swear o is a string, C# compiler! I’m ordering you to cast, I know what am doing!string s = (string)o; // 1 (Direct Casting)// I Donna know whether o is a string or not, try a cast and tell me!string s = o as string; // 2 (Casting with “as” Keyword)// Am programming badly with this code!string s = o.ToString(); // 3 Calling a method

}

Casting

• Meaning!

Page 15: C# Starter L03-Utilities

void Example(object o){

// I swear o is a string, C# compiler! I’m ordering you to cast, I know what am doing!string s = (string)o; // 1 (Direct Casting)// I Donna know whether o is a string or not, try a cast and tell me!string s = o as string; // 2 (Casting with “as” Keyword)// Am programming badly with this code!string s = o.ToString(); // 3 Calling a method

}

Casting

• Meaning!

“as” casting will never throw an exception, while “Direct cast” can.

Page 16: C# Starter L03-Utilities

void Example(object o){

// I swear o is a string, C# compiler! I’m ordering you to cast, I know what am doing!string s = (string)o; // 1 (Direct Casting)// I Donna know whether o is a string or not, try a cast and tell me!string s = o as string; // 2 (Casting with “as” Keyword)// Am programming badly with this code!string s = o.ToString(); // 3 Calling a method

}

Casting

• Meaning!

“as” casting will never throw an exception, while “Direct cast” can.

“as” cannot be used with value types (non-nullable types).

Page 17: C# Starter L03-Utilities

using System;class MyClass1{}

class MyClass2{}

public class IsTest{

public static void Main(){

object[] myObjects = new object[6];myObjects[0] = new MyClass1();myObjects[1] = new MyClass2();myObjects[2] = "hello";myObjects[3] = 123;myObjects[4] = 123.4;myObjects[5] = null;

for (int i = 0; i < myObjects.Length; ++i){

string s = myObjects[i] as string;Console.Write("{0}:", i);if (s!= null)

Console.WriteLine("'" + s + "'");else

Console.WriteLine("not a string");}

}}

Casting

Page 18: C# Starter L03-Utilities

using System;class MyClass1{}

class MyClass2{}

public class IsTest{

public static void Main(){

object[] myObjects = new object[6];myObjects[0] = new MyClass1();myObjects[1] = new MyClass2();myObjects[2] = "hello";myObjects[3] = 123;myObjects[4] = 123.4;myObjects[5] = null;

for (int i = 0; i < myObjects.Length; ++i){

string s = myObjects[i] as string;Console.Write("{0}:", i);if (s!= null)

Console.WriteLine("'" + s + "'");else

Console.WriteLine("not a string");}

}}

Casting

0:not a string1:not a string2:'hello'3:not a string4:not a string5:not a string

Page 19: C# Starter L03-Utilities

is Keyword

Page 20: C# Starter L03-Utilities

“is” Keyword

• The is operator is used to check whether the run-time type of an object is

compatible with a given type.

• The is operator is used in an expression of the form:

expression is type

Page 21: C# Starter L03-Utilities

“is” Keyword

• Let’s have the following example

class Class1{}class Class2{}

Page 22: C# Starter L03-Utilities

“is” Keywordpublic class IsTest{

public static void Test(object o){

Class1 a;Class2 b;if (o is Class1){

Console.WriteLine("o is Class1");a = (Class1)o;// do something with a

}else if (o is Class2){

Console.WriteLine("o is Class2");b = (Class2)o;// do something with b

}else{

Console.WriteLine("o is neither Class1 nor Class2.");}

}public static void Main(){

Class1 c1 = new Class1();Class2 c2 = new Class2();Test(c1);Test(c2);Test("a string");

}}

Page 23: C# Starter L03-Utilities

“is” Keywordpublic class IsTest{

public static void Test(object o){

Class1 a;Class2 b;if (o is Class1){

Console.WriteLine("o is Class1");a = (Class1)o;// do something with a

}else if (o is Class2){

Console.WriteLine("o is Class2");b = (Class2)o;// do something with b

}else{

Console.WriteLine("o is neither Class1 nor Class2.");}

}public static void Main(){

Class1 c1 = new Class1();Class2 c2 = new Class2();Test(c1);Test(c2);Test("a string");

}}

o is Class1o is Class2o is neither Class1 nor Class2.Press any key to continue...

Page 24: C# Starter L03-Utilities

enum

Page 25: C# Starter L03-Utilities

enum

• As easy as:

• And that’s it!

// You define enumerations outside of other classes.public enum DaysOfWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

DaysOfWeek dayOfWeek = DaysOfWeek.Monday;

if(dayOfWeek == Wednesday){

// Do something here}

Page 26: C# Starter L03-Utilities

Exception Handling

Page 27: C# Starter L03-Utilities

Exception Hierarchy

Page 28: C# Starter L03-Utilities

Exception Handling

using System;using System.IO;

class tryCatchDemo{

static void Main(string[] args){

try{

File.OpenRead("NonExistentFile");}catch(Exception ex){

Console.WriteLine(ex.ToString());}

}}

The output?

Page 29: C# Starter L03-Utilities

Exception Handling

using System;using System.IO;

class tryCatchDemo{

static void Main(string[] args){

try{

File.OpenRead("NonExistentFile");}catch(Exception ex){

Console.WriteLine(ex.ToString());}

}}

The output?

Page 30: C# Starter L03-Utilities

Exception Handling

using System;using System.IO;

class tryCatchDemo{

static void Main(string[] args){

try{

File.OpenRead("NonExistentFile");}catch(Exception ex){

Console.WriteLine(ex.ToString());}

}}

The output?

Page 31: C# Starter L03-Utilities

Exception Handling – Multiple “catch”s

try{

int number = Convert.ToInt32(userInput);}catch (FormatException e){

Console.WriteLine("You must enter a number.");}catch (OverflowException e){

Console.WriteLine("Enter a smaller number.");}catch (Exception e){

Console.WriteLine("An unknown error occurred.");}

Page 32: C# Starter L03-Utilities

Exception Handling

• Multiple catch statement?!

catch(FileNotFoundException e){

Console.WriteLine(e.ToString());}catch(Exception ex){

Console.WriteLine(ex.ToString());}

Page 33: C# Starter L03-Utilities

Exception Handling – finally keywordclass FinallyDemo{

static void Main(string[] args){

FileStream outStream = null;FileStream inStream = null;

try{

outStream = File.OpenWrite("DestinationFile.txt");inStream = File.OpenRead("BogusInputFile.txt");

}catch(Exception ex){

Console.WriteLine(ex.ToString());}finally{

if (outStream!= null){

outStream.Close();Console.WriteLine("outStream closed.");

}if (inStream!= null){

inStream.Close();Console.WriteLine("inStream closed.");

}}

}}

Page 34: C# Starter L03-Utilities

Throwing Exceptions

Page 35: C# Starter L03-Utilities

Throwing Exceptions

• Like this:

• But why?

public void CauseProblemsForTheWorld() //always up to no good...{

throw new Exception("Just doing my job!");}

Page 36: C# Starter L03-Utilities

Searching for a catch

• Caller chain is traversed backwards until a method with a matching catch clause is

found.

• If none is found => Program is aborted with a stack trace

• Exceptions don't have to be caught in C# (in contrast to Java)

Page 37: C# Starter L03-Utilities

Creating Exceptions

Page 38: C# Starter L03-Utilities

Creating Exceptions

• Let’s throw an exception when you over-eat Hamburgers!

• Now you can say:

public class AteTooManyHamburgersException : Exception {

public int HamburgersEaten { get; set; }

public AteTooManyHamburgersException(int hamburgersEaten){

HamburgersEaten = hamburgersEaten;}

}

try{

EatSomeHamburgers(32);}catch(AteTooManyHamburgersException hamburgerException){

Console.WriteLine(hamburgerException.HamburgersEaten + " is too many hamburgers.");}

Page 39: C# Starter L03-Utilities

Unsafe Code!

Page 40: C# Starter L03-Utilities

Unsafe Code!

• unsafe code == (code using explicit pointers and memory allocation) in C#

// The following fixed statement pins the location of// the src and dst objects in memory so that they will// not be moved by garbage collection. fixed (byte* pSrc = src, pDst = dst){

byte* ps = pSrc;byte* pd = pDst;

// Loop over the count in blocks of 4 bytes, copying an// integer (4 bytes) at a time:for (int n =0; n < count/4; n++){

*((int*)pd) = *((int*)ps);pd += 4;ps += 4;

}

Page 41: C# Starter L03-Utilities

Nullable Types

Page 42: C# Starter L03-Utilities

Nullable Types - The Concept

Page 43: C# Starter L03-Utilities

Nullable Types

• Declaration

DateTime? startDate;

Page 44: C# Starter L03-Utilities

Nullable Types

• Declaration

DateTime? startDate;

// You can assign a normal value to startDate like this:startDate = DateTime.Now;

Page 45: C# Starter L03-Utilities

Nullable Types

• Declaration

DateTime? startDate;

// You can assign a normal value to startDate like this:startDate = DateTime.Now;

// or you can assign null, like this:startDate = null;

Page 46: C# Starter L03-Utilities

Nullable Types

• Declaration

// Here's another example that declares and initializes a nullable int:int? unitsInStock = 5;

Page 47: C# Starter L03-Utilities

Nullable Types

class Program{

static void Main(){

DateTime? startDate = DateTime.Now;bool isNull = startDate == null;Console.WriteLine("isNull: " + isNull);

}}

Page 48: C# Starter L03-Utilities

Nullable Types

class Program{

static void Main(){

DateTime? startDate = DateTime.Now;bool isNull = startDate == null;Console.WriteLine("isNull: " + isNull);

}}

isNull: FalsePress any key to continue...

Page 49: C# Starter L03-Utilities

Nullable Types

class Program{

static void Main(){

int i = null;}

}

Page 50: C# Starter L03-Utilities

Nullable Types

class Program{

static void Main(){

int i = null;}

}

Compiler error, Can’t convert from null to type int

Page 51: C# Starter L03-Utilities

using keywordusing Directive - using statement

Page 52: C# Starter L03-Utilities

using Directive

Page 53: C# Starter L03-Utilities

using Directive

• The using Directive has two uses:

– To permit the use of types in a namespace so you do not have to qualify the use of a type in

that namespace:

– To create an alias for a namespace or a type:

using System.Text;

using Project = PC.MyCompany.Project;

Page 54: C# Starter L03-Utilities

using Directive

namespace PC{

// Define an alias for the nested namespace.using Project = PC.MyCompany.Project;class A{

void M(){

// Use the aliasProject.MyClass mc = new Project.MyClass();

}}namespace MyCompany{

namespace Project{

public class MyClass { }}

}}

Page 55: C# Starter L03-Utilities

using Directive

namespace PC{

// Define an alias for the nested namespace.using Project = PC.MyCompany.Project;class A{

void M(){

// Use the aliasProject.MyClass mc = new Project.MyClass();

}}namespace MyCompany{

namespace Project{

public class MyClass { }}

}}

Page 56: C# Starter L03-Utilities

using Directive

namespace PC{

// Define an alias for the nested namespace.using Project = PC.MyCompany.Project;class A{

void M(){

// Use the aliasProject.MyClass mc = new Project.MyClass();

}}namespace MyCompany{

namespace Project{

public class MyClass { }}

}}

Page 57: C# Starter L03-Utilities

using Directive

namespace PC{

// Define an alias for the nested namespace.using Project = PC.MyCompany.Project;class A{

void M(){

// Use the aliasProject.MyClass mc = new Project.MyClass();

}}namespace MyCompany{

namespace Project{

public class MyClass { }}

}}

Page 58: C# Starter L03-Utilities

using statement

Page 59: C# Starter L03-Utilities

using statement

• C#, through the.NET Framework common language runtime (CLR), automatically

releases the memory used to store objects that are no longer required.

• The release of memory is non-deterministic; memory is released whenever the

CLR decides to perform garbage collection. However, it is usually best to release

limited resources such as file handles and network connections as quickly as

possible.

Page 60: C# Starter L03-Utilities

using Directive

• Defines a scope, outside of which an object or objects will be disposed.

using (Font font1 = new Font("Arial", 10.0f)) {

// Use font1}

Page 61: C# Starter L03-Utilities

using Directive

• Defines a scope, outside of which an object or objects will be disposed.

using (Font font1 = new Font("Arial", 10.0f)) {

// Use font1}

using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f)) {

// Use font3 and font4. }

Page 62: C# Starter L03-Utilities

using Directiveclass C : IDisposable{

public void UseLimitedResource(){

Console.WriteLine("Using limited resource...");}

void IDisposable.Dispose(){

Console.WriteLine("Disposing limited resource.");}

}

class Program{

static void Main(){

using (C c = new C()){

c.UseLimitedResource();}Console.WriteLine("Now outside using statement.");Console.ReadLine();

}}

Page 63: C# Starter L03-Utilities

using Directiveclass C : IDisposable{

public void UseLimitedResource(){

Console.WriteLine("Using limited resource...");}

void IDisposable.Dispose(){

Console.WriteLine("Disposing limited resource.");}

}

class Program{

static void Main(){

using (C c = new C()){

c.UseLimitedResource();}Console.WriteLine("Now outside using statement.");Console.ReadLine();

}}

Page 64: C# Starter L03-Utilities

using Directiveclass C : IDisposable{

public void UseLimitedResource(){

Console.WriteLine("Using limited resource...");}

void IDisposable.Dispose(){

Console.WriteLine("Disposing limited resource.");}

}

class Program{

static void Main(){

using (C c = new C()){

c.UseLimitedResource();}Console.WriteLine("Now outside using statement.");Console.ReadLine();

}}

Page 65: C# Starter L03-Utilities

using Directiveclass C : IDisposable{

public void UseLimitedResource(){

Console.WriteLine("Using limited resource...");}

void IDisposable.Dispose(){

Console.WriteLine("Disposing limited resource.");}

}

class Program{

static void Main(){

using (C c = new C()){

c.UseLimitedResource();}Console.WriteLine("Now outside using statement.");Console.ReadLine();

}}

Page 66: C# Starter L03-Utilities

using Directiveclass C : IDisposable{

public void UseLimitedResource(){

Console.WriteLine("Using limited resource...");}

void IDisposable.Dispose(){

Console.WriteLine("Disposing limited resource.");}

}

class Program{

static void Main(){

using (C c = new C()){

c.UseLimitedResource();}Console.WriteLine("Now outside using statement.");Console.ReadLine();

}}

Page 67: C# Starter L03-Utilities

using Directiveclass C : IDisposable{

public void UseLimitedResource(){

Console.WriteLine("Using limited resource...");}

void IDisposable.Dispose(){

Console.WriteLine("Disposing limited resource.");}

}

class Program{

static void Main(){

using (C c = new C()){

c.UseLimitedResource();}Console.WriteLine("Now outside using statement.");Console.ReadLine();

}}

Page 68: C# Starter L03-Utilities

using Directiveclass C : IDisposable{

public void UseLimitedResource(){

Console.WriteLine("Using limited resource...");}

void IDisposable.Dispose(){

Console.WriteLine("Disposing limited resource.");}

}

class Program{

static void Main(){

using (C c = new C()){

c.UseLimitedResource();}Console.WriteLine("Now outside using statement.");Console.ReadLine();

}}

Using limited resource...Disposing limited resource.Now outside using statement.

Page 69: C# Starter L03-Utilities

Type Aliases

Page 70: C# Starter L03-Utilities

Type Aliases

• For instant naming we can use this for long type names:

• And then just using it as follow

using SB = System.Text.StringBuilder;

SB stringBuilder = new SB("InitialValue");

Page 71: C# Starter L03-Utilities

Files

Page 72: C# Starter L03-Utilities

Files, One Shot Reading

// Change the file path here to where you want it.String path = @”C:/Users/Mhd/Desktop/test1.txt”;

string fileContents = File.ReadAllText(path);

string[] fileContentsByLine = File.ReadAllLines(path);

Page 73: C# Starter L03-Utilities

Files, One Shot Writing

// Change the file path here to where you want it.String path = @”C:/Users/Mhd/Desktop/test1.txt”;

string informationToWrite = "Hello world!";File.WriteAllText(path, informationToWrite);

string[] arrayOfInformation = new string[2];arrayOfInformation[0] = "This is line 1";arrayOfInformation[1] = "This is line 2";File.WriteAllLines(path, arrayOfInformation);

Page 74: C# Starter L03-Utilities

FilesReading and Writing on a Text-based Files

Page 75: C# Starter L03-Utilities

Files

• StreamWriter

– Object for writing a stream down

• StreamReader

– Object for reading a stream up

Page 76: C# Starter L03-Utilities

using System;using System.IO;

public partial class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";

// Create a file to write to.using (StreamWriter sw = new StreamWriter(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}

// Open the file to read from.using (StreamReader sr = new StreamReader(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

Page 77: C# Starter L03-Utilities

using System;using System.IO;

public partial class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";

// Create a file to write to.using (StreamWriter sw = new StreamWriter(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}

// Open the file to read from.using (StreamReader sr = new StreamReader(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

HelloAndWelcomePress any key to continue...

Page 78: C# Starter L03-Utilities

using System;using System.IO;

public partial class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";

// Create a file to write to.using (StreamWriter sw = new StreamWriter(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}

// Open the file to read from.using (StreamReader sr = new StreamReader(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

HelloAndWelcomePress any key to continue...

Page 79: C# Starter L03-Utilities

using System;using System.IO;

class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";if (!File.Exists(path)){

// Create a file to write to.using (StreamWriter sw = File.CreateText(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}}

// Open the file to read from.using (StreamReader sr = File.OpenText(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

Page 80: C# Starter L03-Utilities

using System;using System.IO;

class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";if (!File.Exists(path)){

// Create a file to write to.using (StreamWriter sw = File.CreateText(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}}

// Open the file to read from.using (StreamReader sr = File.OpenText(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

Page 81: C# Starter L03-Utilities

using System;using System.IO;

class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";if (!File.Exists(path)){

// Create a file to write to.using (StreamWriter sw = File.CreateText(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}}

// Open the file to read from.using (StreamReader sr = File.OpenText(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

Page 82: C# Starter L03-Utilities

using System;using System.IO;

class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";if (!File.Exists(path)){

// Create a file to write to.using (StreamWriter sw = File.CreateText(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}}

// Open the file to read from.using (StreamReader sr = File.OpenText(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

Page 83: C# Starter L03-Utilities

using System;using System.IO;

class Test{

public static void Main(){

string path = @"c:\temp\MyTest.txt";if (!File.Exists(path)){

// Create a file to write to.using (StreamWriter sw = File.CreateText(path)){

sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");

}}

// Open the file to read from.

using (StreamReader sr = File.OpenText(path)){

string s = "";while ((s = sr.ReadLine())!= null){

Console.WriteLine(s);}

}}

}

Page 84: C# Starter L03-Utilities

Reading and Writing on a Binary FilesBinaryWriter and BinaryReader

// Change the file path here to where you want it.String path = @”C:/Users/Mhd/Desktop/test1.txt”;

FileStream fileStream = File.OpenWrite(path);BinaryWriter binaryWriter = new BinaryWriter(fileStream);

binaryWriter.Write(2);binaryWriter.Write("Hello");

binaryWriter.Flush();binaryWriter.Close();

Page 85: C# Starter L03-Utilities

Class Diagram

Page 86: C# Starter L03-Utilities

Class Diagram

Page 87: C# Starter L03-Utilities
Page 88: C# Starter L03-Utilities
Page 89: C# Starter L03-Utilities

Windows Forms

Page 90: C# Starter L03-Utilities

Windows Forms

Page 91: C# Starter L03-Utilities

To learn more about Windows Forms,visit my C++.NET course @

http://www.slideshare.net/ZGTRZGTR/exactly the same as C#

Page 92: C# Starter L03-Utilities

That’s it for today!