Your SlideShare is downloading. ×
C# Starter L03-Utilities
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

C# Starter L03-Utilities

514
views

Published on

Published in: Technology, Business

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
514
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
110
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Mohammad Shaker mohammadshaker.com C# Programming Course @ZGTRShaker 2011, 2012, 2013, 2014 C# Starter L03 – Utilities
  • 2. 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
  • 3. const and readonly
  • 4. 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;
  • 5. 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;
  • 6. 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;
  • 7. Casting
  • 8. Casting Direct Casting “as” Keyword
  • 9. void Example(object o) { // Casting string 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?
  • 10. void Example(object o) { // Casting string 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.
  • 11. void Example(object o) { // Casting string 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.
  • 12. void Example(object o) { // Casting string 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.
  • 13. void Example(object o) { // Casting string 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.
  • 14. 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!
  • 15. 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.
  • 16. 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).
  • 17. 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
  • 18. 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 string 1:not a string 2:'hello' 3:not a string 4:not a string 5:not a string
  • 19. is Keyword
  • 20. “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
  • 21. “is” Keyword • Let’s have the following example class Class1{} class Class2{}
  • 22. “is” Keyword public 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"); } }
  • 23. “is” Keyword public 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 Class1 o is Class2 o is neither Class1 nor Class2. Press any key to continue...
  • 24. enum
  • 25. 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 }
  • 26. Exception Handling
  • 27. Exception Hierarchy
  • 28. 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?
  • 29. 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?
  • 30. 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?
  • 31. 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."); }
  • 32. Exception Handling • Multiple catch statement?! catch(FileNotFoundException e) { Console.WriteLine(e.ToString()); } catch(Exception ex) { Console.WriteLine(ex.ToString()); }
  • 33. Exception Handling – finally keyword class 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."); } } } }
  • 34. Throwing Exceptions
  • 35. Throwing Exceptions • Like this: • But why? public void CauseProblemsForTheWorld() //always up to no good... { throw new Exception("Just doing my job!"); }
  • 36. 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)
  • 37. Creating Exceptions
  • 38. 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."); }
  • 39. Unsafe Code!
  • 40. 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; }
  • 41. Nullable Types
  • 42. Nullable Types - The Concept
  • 43. Nullable Types • Declaration DateTime? startDate;
  • 44. Nullable Types • Declaration DateTime? startDate; // You can assign a normal value to startDate like this: startDate = DateTime.Now;
  • 45. 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;
  • 46. Nullable Types • Declaration // Here's another example that declares and initializes a nullable int: int? unitsInStock = 5;
  • 47. Nullable Types class Program { static void Main() { DateTime? startDate = DateTime.Now; bool isNull = startDate == null; Console.WriteLine("isNull: " + isNull); } }
  • 48. Nullable Types class Program { static void Main() { DateTime? startDate = DateTime.Now; bool isNull = startDate == null; Console.WriteLine("isNull: " + isNull); } } isNull: False Press any key to continue...
  • 49. Nullable Types class Program { static void Main() { int i = null; } }
  • 50. Nullable Types class Program { static void Main() { int i = null; } } Compiler error, Can’t convert from null to type int
  • 51. using keyword using Directive - using statement
  • 52. using Directive
  • 53. 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;
  • 54. using Directive namespace PC { // Define an alias for the nested namespace. using Project = PC.MyCompany.Project; class A { void M() { // Use the alias Project.MyClass mc = new Project.MyClass(); } } namespace MyCompany { namespace Project { public class MyClass { } } } }
  • 55. using Directive namespace PC { // Define an alias for the nested namespace. using Project = PC.MyCompany.Project; class A { void M() { // Use the alias Project.MyClass mc = new Project.MyClass(); } } namespace MyCompany { namespace Project { public class MyClass { } } } }
  • 56. using Directive namespace PC { // Define an alias for the nested namespace. using Project = PC.MyCompany.Project; class A { void M() { // Use the alias Project.MyClass mc = new Project.MyClass(); } } namespace MyCompany { namespace Project { public class MyClass { } } } }
  • 57. using Directive namespace PC { // Define an alias for the nested namespace. using Project = PC.MyCompany.Project; class A { void M() { // Use the alias Project.MyClass mc = new Project.MyClass(); } } namespace MyCompany { namespace Project { public class MyClass { } } } }
  • 58. using statement
  • 59. 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.
  • 60. 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 }
  • 61. 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. }
  • 62. using Directive class 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(); } }
  • 63. using Directive class 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(); } }
  • 64. using Directive class 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(); } }
  • 65. using Directive class 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(); } }
  • 66. using Directive class 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(); } }
  • 67. using Directive class 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(); } }
  • 68. using Directive class 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.
  • 69. Type Aliases
  • 70. 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");
  • 71. Files
  • 72. 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);
  • 73. 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);
  • 74. Files Reading and Writing on a Text-based Files
  • 75. Files • StreamWriter – Object for writing a stream down • StreamReader – Object for reading a stream up
  • 76. using System; using System.IO; public partial class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } }
  • 77. using System; using System.IO; public partial class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } } Hello And Welcome Press any key to continue...
  • 78. using System; using System.IO; public partial class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } } Hello And Welcome Press any key to continue...
  • 79. using System; using System.IO; class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } }
  • 80. using System; using System.IO; class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } }
  • 81. using System; using System.IO; class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } }
  • 82. using System; using System.IO; class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } }
  • 83. using System; using System.IO; class Test { public static void Main() { string path = @"c:tempMyTest.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); } } } }
  • 84. Reading and Writing on a Binary Files BinaryWriter 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();
  • 85. Class Diagram
  • 86. Class Diagram
  • 87. Windows Forms
  • 88. Windows Forms
  • 89. To learn more about Windows Forms, visit my C++.NET course @ http://www.slideshare.net/ZGTRZGTR/ exactly the same as C#
  • 90. That’s it for today!