Download presentation
Presentation is loading. Please wait.
Published byLionel Booth Modified over 9 years ago
1
Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation www.telerik.com
2
1. Creating and Using Objects 2. Exceptions Handling 3. Strings and Text Processing 4. Generics 5. Collection Classes 6. Attributes 2
3
Using the Standard.NET Framework Classes
4
The formal definition of class: Definition by Google Classes act as templates from which an instance of an object is created at run time. Classes define the properties of the object and the methods used to control the object's behavior. 4
5
Classes provide the structure for objects Define their prototype, act as template Classes define: Set of attributes Represented by fields and properties Hold their state Set of actions (behavior) Represented by methods A class defines the methods and types of data associated with an object 5
6
Account +Owner: Person +Ammount: double +Suspend()+Deposit(sum:double)+Withdraw(sum:double) Class Name Attributes (Properties and Fields) Operations(Methods) 6
7
An object is a concrete instance of a particular class Creating an object from a class is called instantiation Objects have state Set of values associated to their attributes Example: Class: Account Objects: Ivan's account, Peter's account 7
8
Account +Owner: Person +Ammount: double +Suspend()+Deposit(sum:double)+Withdraw(sum:double) Class ivanAccount +Owner="Ivan Kolev" +Ammount=5000.0 peterAccount +Owner="Peter Kirov" +Ammount=1825.33 kirilAccount +Owner="Kiril Kirov" +Ammount=25.0 Object Object Object 8
9
Basic units that compose programs Implementation is encapsulated (hidden) Classes in C# can contain: Fields (member variables) Properties Methods Constructors Inner types Etc. (events, indexers, operators, …) 9
10
Example of classes: System.Console System.String ( string in C#) System.Int32 ( int in C#) System.Array System.Math System.Random 10
11
An instance of a class or structure can be defined like any other variable: Instances cannot be used if they are not initialized using System;... // Define two variables of type DateTime DateTime today; DateTime halloween; // Declare and initialize a structure instance DateTime today = DateTime.Now; 11
12
Fields are data members of a class Can be variables and constants Accessing a field doesn’t invoke any actions of the object Example: String.Empty (the "" string) 12
13
Constant fields can be only read Variable fields can be read and modified Usually properties are used instead of directly accessing variable fields Examples: // Accessing read-only field String empty = String.Empty; // Accessing constant field int maxInt = Int32.MaxValue; 13
14
Properties look like fields (have name and type), but they can contain code, executed when they are accessed Usually used to control access to data fields (wrappers), but can contain more complex logic Can have two components (and at least one of them) called accessors get for reading their value set for changing their value 14
15
According to the implemented accessors properties can be: Read-only (get accessor only) Read and write (both get and set accessors) Write-only (set accessor only) Example of read-only property: String.Length 15
16
using System;... DateTime christmas = new DateTime(2009, 12, 25); int day = christmas.Day; int month = christmas.Month; int year = christmas.Year; Console.WriteLine( "Christmas day: {0}, month: {1}, year: {2}", "Christmas day: {0}, month: {1}, year: {2}", day, month, year); day, month, year);Console.WriteLine( "Day of year: {0}", christmas.DayOfYear); "Day of year: {0}", christmas.DayOfYear); Console.WriteLine("Is {0} leap year: {1}", year, DateTime.IsLeapYear(year)); year, DateTime.IsLeapYear(year)); 16
17
Fields, properties and methods can be: Instance (or object members) Static (or class members) Instance members are specific for each object Example: different dogs have different name Static members are common for all instances of a class Example: DateTime.MinValue is shared between all instances of DateTime 17
18
Example of instance member String.Length Each string object has different length Example of static member Console.ReadLine() The console is only one (global for the program) Reading from the console does not require to create an instance of it 18
19
Methods manipulate the data of the object to which they belong or perform other tasks Examples: Console.WriteLine(…) Console.ReadLine() String.Substring(index, length) Array.GetLength(index) 19
20
Instance methods manipulate the data of a specified object or perform any other tasks If a value is returned, it depends on the particular class instance Syntax: The name of the instance, followed by the name of the method, separated by dot <object_name>.<method_name>(<parameters>) 20
21
Calling instance methods of String : Calling instance methods of DateTime : String sampleLower = new String('a', 5); String sampleUpper = sampleLower.ToUpper(); Console.WriteLine(sampleLower); // aaaaa Console.WriteLine(sampleUpper); // AAAAA DateTime now = DateTime.Now; DateTime later = now.AddHours(8); Console.WriteLine("Now: {0}", now); Console.WriteLine("8 hours later: {0}", later); 21
22
Static methods are common for all instances of a class (shared between all instances) Returned value depends only on the passed parameters No particular class instance is available Syntax: The name of the class, followed by the name of the method, separated by dot <class_name>.<method_name>(<parameters>) 22
23
using System; double radius = 2.9; double area = Math.PI * Math.Pow(radius, 2); Console.WriteLine("Area: {0}", area); // Area: 26,4207942166902 double precise = 8.7654321; double round3 = Math.Round(precise, 3); double round1 = Math.Round(precise, 1); Console.WriteLine( "{0}; {1}; {2}", precise, round3, round1); "{0}; {1}; {2}", precise, round3, round1); // 8,7654321; 8,765; 8,8 Constant field Static method 23
24
Constructors are special methods used to assign initial values of the fields in an object Executed when an object of a given type is being created Have the same name as the class that holds them Do not return a value A class may have several constructors with different set of parameters 24
25
Constructor is invoked by the new operator Examples: String s = new String("Hello!"); // s = "Hello!" = new ( ) = new ( ) String s = new String('*', 5); // s = "*****" DateTime dt = new DateTime(2009, 12, 30); DateTime dt = new DateTime(2009, 12, 30, 12, 33, 59); Int32 value = new Int32(1024); 25
26
Structures are similar to classes Structures are usually used for storing data structures, without any other functionality Structures can have fields, properties, etc. Using methods is not recommended Structures are value types, and classes are reference types (this will be discussed later) Example of structure System.DateTime – represents a date and time 26
27
Namespaces are used to organize the source code into more logical and manageable way Namespaces can contain Definitions of classes, structures, interfaces and other types and other namespaces Namespaces can contain other namespaces For example: System namespace contains Data namespace The name of the nested namespace is System.Data 27
28
A full name of a class is the name of the class preceded by the name of its namespace Example: Array class, defined in the System namespace The full name of the class is System.Array <namespace_name>.<class_name> 28
29
The using directive in C#: Allows using types in a namespace, without specifying their full name Example: instead of using using using System; DateTime date; System.DateTime date; 29
30
CTS defines all data types supported in.NET Framework Primitive types (e.g. int, float, object ) Classes (e.g. String, Console, Array ) Structures (e.g. DateTime ) Arrays (e.g. int[], string[,] ) Etc. Object-oriented by design 30
31
CTS is common for all.NET languages C#, VB.NET, J#, JScript.NET,... CTS type mappings: CTS Type C# Type VB.NET Type System.Int32intInteger System.SinglefloatSingle System.BooleanboolBoolean System.StringstringString System.ObjectobjectObject 31
32
In CTS there are two categories of types Value types Reference types Placed in different areas of memory Value types live in the execution stack Freed when become out of scope Reference types live in the managed heap (dynamic memory) Freed by the garbage collector 32
33
Value types Most of the primitive types Structures Examples: int, float, bool, DateTime Reference types Classes and interfaces Strings Arrays Examples: string, Random, object, int[] 33
34
The Paradigm of Exceptions in OOP
35
The exceptions in.NET Framework are classic implementation of the OOP exception model Deliver powerful mechanism for centralized handling of errors and unusual events Substitute procedure-oriented approach, in which each function returns error code Simplify code construction and maintenance Allow the problematic situations to be processed at multiple levels 35
36
In C# the exceptions can be handled by the try-catch-finally construction catch blocks can be used multiple times to process different exception types try{ // Do some work that can raise an exception // Do some work that can raise an exception} catch (SomeException) { // Handle the caught exception // Handle the caught exception} 36
37
static void Main() { string s = Console.ReadLine(); string s = Console.ReadLine(); try try { Int32.Parse(s); Int32.Parse(s); Console.WriteLine( Console.WriteLine( "You entered valid Int32 number {0}.", s); "You entered valid Int32 number {0}.", s); } catch (FormatException) catch (FormatException) { Console.WriteLine("Invalid integer number!"); Console.WriteLine("Invalid integer number!"); } catch (OverflowException) catch (OverflowException) { Console.WriteLine( Console.WriteLine( "The number is too big to fit in Int32!"); "The number is too big to fit in Int32!"); }} 37
38
Exceptions in.NET are objects The System.Exception class is base for all exceptions in CLR Contains information for the cause of the error or the unusual situation Message – text description of the exception StackTrace – the snapshot of the stack at the moment of exception throwing InnerException – exception caused the current exception (if any) 38
39
class ExceptionsTest { public static void CauseFormatException() public static void CauseFormatException() { { string s = "an invalid number"; string s = "an invalid number"; Int32.Parse(s); Int32.Parse(s); } } static void Main() static void Main() { { try try { { CauseFormatException(); CauseFormatException(); } } catch (FormatException fe) catch (FormatException fe) { { Console.Error.WriteLine("Exception caught: {0}\n{1}", fe.Message, fe.StackTrace); Console.Error.WriteLine("Exception caught: {0}\n{1}", fe.Message, fe.StackTrace); } }} 39
40
The Message property gives brief description of the problem The StackTrace property is extremely useful when identifying the reason caused the exception The Message property gives brief description of the problem The StackTrace property is extremely useful when identifying the reason caused the exception Exception caught: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Int32.Parse(String s) at System.Int32.Parse(String s) at ExceptionsTest.CauseFormatException() in c:\consoleapplication1\exceptionstest.cs:line 8 at ExceptionsTest.CauseFormatException() in c:\consoleapplication1\exceptionstest.cs:line 8 at ExceptionsTest.Main(String[] args) in c:\consoleapplication1\exceptionstest.cs:line 15 at ExceptionsTest.Main(String[] args) in c:\consoleapplication1\exceptionstest.cs:line 15 40
41
File names and line numbers are accessible only if the compilation was in Debug mode When compiled in Release mode, the information in the property StackTrace is quite different: File names and line numbers are accessible only if the compilation was in Debug mode When compiled in Release mode, the information in the property StackTrace is quite different: Exception caught: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at ExceptionsTest.Main(String[] args) at ExceptionsTest.Main(String[] args) 41
42
Exceptions in.NET Framework are organized in a hierarchy 42
43
All.NET exceptions inherit from System.Exception The system exceptions inherit from System.SystemException, e.g. System.ArgumentException System.NullReferenceException System.OutOfMemoryException System.StackOverflowException User-defined exceptions should inherit from System.ApplicationException 43
44
When catching an exception of a particular class, all its inheritors (child exceptions) are caught too Example: Handles ArithmeticException and its successors DivideByZeroException and OverflowException try{ // Do some works that can raise an exception // Do some works that can raise an exception} catch (System.ArithmeticException) { // Handle the caught arithmetic exception // Handle the caught arithmetic exception} 44
45
All exceptions thrown by.NET managed code inherit the System.Exception exception Unmanaged code can throw other exceptions For handling all exceptions (even unmanaged) use the construction: try{ // Do some works that can raise any exception // Do some works that can raise any exception}catch{ // Handle the caught exception // Handle the caught exception} 45
46
Exceptions are thrown (raised) by throw keyword in C# Used to notify the calling code in case of error or unusual situation When an exception is thrown: The program execution stops The exception travels over the stack until a suitable catch block is reached to handle it Unhandled exceptions display error message 46
47
47 Main() Method 1 Method 2 Method N 2. Method call 3. Method call 4. Method call … Main() Method 1 Method 2 Method N 8. Find handler 7. Find handler 6. Find handler … 5. Throw an exception.NET CLR 1. Execute the program 9. Find handler 10. Display error message
48
Throwing an exception with error message: Exceptions can take message and cause: Note: if the original exception is not passed the initial cause of the exception is lost throw new ArgumentException("Invalid amount!"); try{ Int32.Parse(str); Int32.Parse(str);} catch (FormatException fe) { throw new ArgumentException("Invalid number", fe); throw new ArgumentException("Invalid number", fe);} 48
49
public static double Sqrt(double value) { if (value < 0) if (value < 0) throw new System.ArgumentOutOfRangeException( throw new System.ArgumentOutOfRangeException( "Sqrt for negative numbers is undefined!"); "Sqrt for negative numbers is undefined!"); return Math.Sqrt(value); return Math.Sqrt(value);} static void Main() { try try { Sqrt(-1); Sqrt(-1); } catch (ArgumentOutOfRangeException ex) catch (ArgumentOutOfRangeException ex) { Console.Error.WriteLine("Error: " + ex.Message); Console.Error.WriteLine("Error: " + ex.Message); throw; throw; }} 49
51
Strings are sequences of characters Each character is a Unicode symbol Represented by the string data type in C# ( System.String ) Example: string s = "Hello, C#"; Hello, C#s 51
52
Strings are represented by System.String objects in.NET Framework String objects contain an immutable (read-only) sequence of characters Strings use Unicode in to support multiple languages and alphabets Strings are stored in the dynamic memory (managed heap) System.String is reference type 52
53
String objects are like arrays of characters ( char[] ) Have fixed length ( String.Length ) Elements can be accessed directly by index The index is in the range [ 0... Length-1 ] string s = "Hello!"; int len = s.Length; // len = 6 char ch = s[1]; // ch = 'e' 012345Hello! index = s[index] = 53
54
static void Main() { string s = string s = "Stand up, stand up, Balkan Superman."; "Stand up, stand up, Balkan Superman."; Console.WriteLine("s = \"{0}\"", s); Console.WriteLine("s = \"{0}\"", s); Console.WriteLine("s.Length = {0}", s.Length); Console.WriteLine("s.Length = {0}", s.Length); for (int i = 0; i < s.Length; i++) for (int i = 0; i < s.Length; i++) { Console.WriteLine("s[{0}] = {1}", i, s[i]); Console.WriteLine("s[{0}] = {1}", i, s[i]); }} 54
55
There are two ways of declaring string variables: Using the C# keyword string Using the.NET's fully qualified class name System.String The above three declarations are equivalent string str1; System.String str2; String str3; 55
56
Before initializing a string variable has null value Strings can be initialized by: Assigning a string literal to the string variable Assigning the value of another string variable Assigning the result of operation of type string 56
57
Not initialized variables has value of null Assigning a string literal Assigning from another string variable Assigning from the result of string operation string s; // s is equal to null string s = "I am a string literal!"; string s2 = s; string s = 42.ToString(); 57
58
Reading strings from the console Use the method Console.ReadLine() string s = Console.ReadLine(); Console.Write("Please enter your name: "); string name = Console.ReadLine(); Console.Write("Hello, {0}! ", name); Console.WriteLine("Welcome to our party!"); Printing strings to the console Use the methods Write() and WriteLine() 58
59
A number of ways exist to compare two strings: Dictionary-based string comparison Case-insensitive Case-sensitive int result = string.Compare(str1, str2, true); // result == 0 if str1 equals str2 // result < 0 if str1 if before str2 // result > 0 if str1 if after str2 string.Compare(str1, str2, false); 59
60
Finding the first string in a lexicographical order from a given list of strings: string[] towns = {"Sofia", "Varna", "Plovdiv", "Pleven", "Bourgas", "Rousse", "Yambol"}; string firstTown = towns[0]; for (int i=1; i<towns.Length; i++) { string currentTown = towns[i]; string currentTown = towns[i]; if (String.Compare(currentTown, firstTown) < 0) if (String.Compare(currentTown, firstTown) < 0) { firstTown = currentTown; firstTown = currentTown; }} Console.WriteLine("First town: {0}", firstTown); 60
61
There are two ways to combine strings: Using the Concat() method Using the + or the += operators Any object can be appended to string string str = String.Concat(str1, str2); string str = str1 + str2 + str3; string str += str1; string name = "Peter"; int age = 22; string s = name + " " + age; // "Peter 22" 61
62
Finding a character or substring within given string First occurrence First occurrence starting at given position Last occurrence IndexOf(string str) IndexOf(string str, int startIndex) LastIndexOf(string) 62
63
string str = "C# Programming Course"; int index = str.IndexOf("C#"); // index = 0 index = str.IndexOf("Course"); // index = 15 index = str.IndexOf("COURSE"); // index = -1 // IndexOf is case-sensetive. -1 means not found index = str.IndexOf("ram"); // index = 7 index = str.IndexOf("r"); // index = 4 index = str.IndexOf("r", 5); // index = 7 index = str.IndexOf("r", 8); // index = 18 012345678910111213…C# Programming… index = s[index] = 63
64
Extracting substrings str.Substring(int startIndex, int length) str.Substring(int startIndex) string filename = @"C:\Pics\Rila2009.jpg"; string name = filename.Substring(8, 8); // name is Rila2009 string filename = @"C:\Pics\Summer2009.jpg"; string nameAndExtension = filename.Substring(8); // nameAndExtension is Summer2009.jpg 012345678910111213141516171819C:\Pics\Rila2005.jpg 64
65
To split a string by given separator(s) use the following method: Example: string[] Split(params char[]) string listOfBeers = "Amstel, Zagorka, Tuborg, Becks."; "Amstel, Zagorka, Tuborg, Becks."; string[] beers = listOfBeers.Split(' ', ',', '.'); listOfBeers.Split(' ', ',', '.'); Console.WriteLine("Available beers are:"); foreach (string beer in beers) { Console.WriteLine(beer); Console.WriteLine(beer);} 65
66
Replace(string, string) – replaces all occurrences of given string with another The result is new string (strings are immutable) Remove(index, length) – deletes part of a string and produces new string as result string cocktail = "Vodka + Martini + Cherry"; string replaced = cocktail.Replace("+", "and"); // Vodka and Martini and Cherry string price = "$ 1234567"; string lowPrice = price.Remove(2, 3); // $ 4567 66
67
Using method ToLower() Using method ToUpper() string alpha = "aBcDeFg"; string lowerAlpha = alpha.ToLower(); // abcdefg Console.WriteLine(lowerAlpha); string alpha = "aBcDeFg"; string upperAlpha = alpha.ToUpper(); // ABCDEFG Console.WriteLine(upperAlpha); 67
68
Using method Trim() Using method Trim(chars) Using TrimStart() and TrimEnd() string s = " example of white space "; string clean = s.Trim(); Console.WriteLine(clean); string s = " \t\nHello!!! \n"; string clean = s.Trim(' ', ',','!', '\n','\t'); Console.WriteLine(clean); // Hello string s = " C# "; string clean = s.TrimStart(); // clean = "C# " 68
69
Strings are immutable Concat(), Replace(), Trim(),... return new string, do not modify the old one Do not use " + " for strings in a loop! It runs very, very inefficiently! public static string DupChar(char ch, int count) { string result = ""; string result = ""; for (int i=0; i<count; i++) for (int i=0; i<count; i++) result += ch; result += ch; return result; return result;} Very bad practice. Avoid this! 69
70
Use the System.Text.StringBuilder class for modifiable strings of characters: Use StringBuilder if you need to keep adding characters to a string public static string ReverseString(string s) { StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder(); for (int i = s.Length-1; i >= 0; i--) for (int i = s.Length-1; i >= 0; i--) sb.Append(s[i]); sb.Append(s[i]); return sb.ToString(); return sb.ToString();} 70
71
StringBuilder keeps a buffer memory, allocated in advance Most operations use the buffer memory and do not allocate new objects Hello,C#! StringBuilder : Length=9 Capacity=15 Capacity used buffer (Length) unused buffer 71
72
Extracting all capital letters from a string public static string ExtractCapitals(string s) { StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder(); for (int i = 0; i<s.Length; i++) for (int i = 0; i<s.Length; i++) { if (Char.IsUpper(s[i])) if (Char.IsUpper(s[i])) { result.Append(s[i]); result.Append(s[i]); } } return result.ToString(); return result.ToString();} 72
73
All classes have public virtual method ToString() Returns a human-readable, culture-sensitive string representing the object Most.NET Framework types have own implementation of ToString() int, float, bool, DateTime int number = 5; string s = "The number is " + number.ToString(); Console.WriteLine(s); // The number is 5 73
74
We can apply specific formatting when converting objects to string ToString(formatString) method int number = 42; string s = number.ToString("D5"); // 00042 s = number.ToString("X"); // 2A // Consider the default culture is Bulgarian s = number.ToString("C"); // 42,00 лв double d = 0.375; s = d.ToString("P2"); // 37,50 % 74
75
The formatting strings are different for the different types Some formatting strings for numbers: D – number (for integer types) C – currency (according to current culture) E – number in exponential notation P – percentage X – hexadecimal number F – fixed point (for real numbers) 75
76
Applies templates for formatting strings Placeholders are used for dynamic text Like Console.WriteLine(…) string template = "If I were {0}, I would {1}."; string sentence1 = String.Format( template, "developer", "know C#"); template, "developer", "know C#");Console.WriteLine(sentence1); // If I were developer, I would know C#. string sentence2 = String.Format( template, "elephant", "weigh 4500 kg"); template, "elephant", "weigh 4500 kg");Console.WriteLine(sentence2); // If I were elephant, I would weigh 4500 kg. 76
77
The placeholders in the composite formatting strings are specified as follows: Examples: {index[,alignment][:formatString]} double d = 0.375; s = String.Format("{0,10:F5}", d); // s = " 0,37500" int number = 42; Console.WriteLine("Dec {0:D} = Hex {1:X}", number, number); number, number); // Dec 42 = Hex 2A 77
78
Dates have their own formatting strings d, dd – day (with/without leading zero) M, MM – month yy, yyyy – year (2 or 4 digits) h, HH, m, mm, s, ss – hour, minute, second DateTime now = DateTime.Now; Console.WriteLine( "Now is {0:d.MM.yyyy HH:mm:ss}", now); "Now is {0:d.MM.yyyy HH:mm:ss}", now); // Now is 31.11.2009 11:30:32 78
79
Lists, Trees, Dictionaries
80
Generics allow defining parameterized classes that process data of unknown (generic) type The class can be instantiated with several different particular types Example: List List / List / List Example: List List / List / List Generics are also known as "parameterized types" or "template types" Similar to the templates in C++ Similar to the generics in Java 80
81
Implements the abstract data structure list using an array All elements are of the same type T T can be any type, e.g. List, List, List T can be any type, e.g. List, List, List Size is dynamically increased as needed Basic functionality: Count – returns the number of elements Add(T) – appends given element at the end 81
82
static void Main() { List list = new List (); List list = new List (); list.Add("C#"); list.Add("C#"); list.Add("Java"); list.Add("Java"); list.Add("PHP"); list.Add("PHP"); foreach (string item in list) foreach (string item in list) { Console.WriteLine(item); Console.WriteLine(item); } // Result: // Result: // C# // C# // Java // Java // PHP // PHP} 82
83
list[index] – access element by index Insert(index, T) – inserts given element to the list at a specified position Remove(T) – removes the first occurrence of given element RemoveAt(index) – removes the element at the specified position Clear() – removes all elements Contains(T) – determines whether an element is part of the list 83
84
IndexOf() – returns the index of the first occurrence of a value in the list (zero-based) Reverse() – reverses the order of the elements in the list or a portion of it Sort() – sorts the elements in the list or a portion of it ToArray() – converts the elements of the list to an array TrimExcess() – sets the capacity to the actual number of elements 84
85
static List FindPrimes(int start, int end) { List primesList = new List (); List primesList = new List (); for (int num = start; num <= end; num++) for (int num = start; num <= end; num++) { bool prime = true; bool prime = true; for (int div = 2; div <= Math.Sqrt(num); div++) for (int div = 2; div <= Math.Sqrt(num); div++) { if (num % div == 0) if (num % div == 0) { prime = false; prime = false; break; break; } } if (prime) if (prime) { primesList.Add(num); primesList.Add(num); } } return primesList; return primesList;} 85
86
Implements the stack data structure using an array Elements are of the same type T T can be any type, e.g. Stack T can be any type, e.g. Stack Size is dynamically increased as needed Basic functionality: Push(T) – inserts elements to the stack Pop() – removes and returns the top element from the stack 86
87
Using Push(), Pop() and Peek() methods static void Main() { Stack stack = new Stack (); Stack stack = new Stack (); stack.Push("1. Ivan"); stack.Push("1. Ivan"); stack.Push("2. Nikolay"); stack.Push("2. Nikolay"); stack.Push("3. Maria"); stack.Push("3. Maria"); stack.Push("4. George"); stack.Push("4. George"); Console.WriteLine("Top = {0}", stack.Peek()); Console.WriteLine("Top = {0}", stack.Peek()); while (stack.Count > 0) while (stack.Count > 0) { string personName = stack.Pop(); string personName = stack.Pop(); Console.WriteLine(personName); Console.WriteLine(personName); }} 87
88
Implements the queue data structure using a circular resizable array Elements are from the same type T T can be any type, e.g. Stack T can be any type, e.g. Stack Size is dynamically increased as needed Basic functionality: Enqueue(T) – adds an element to the end of the queue Dequeue() – removes and returns the element at the beginning of the queue 88
89
Using Enqueue() and Dequeue() methods static void Main() { Queue queue = new Queue (); Queue queue = new Queue (); queue.Enqueue("Message One"); queue.Enqueue("Message One"); queue.Enqueue("Message Two"); queue.Enqueue("Message Two"); queue.Enqueue("Message Three"); queue.Enqueue("Message Three"); queue.Enqueue("Message Four"); queue.Enqueue("Message Four"); while (queue.Count > 0) while (queue.Count > 0) { string message = queue.Dequeue(); string message = queue.Dequeue(); Console.WriteLine(message); Console.WriteLine(message); }} 89
90
Implements the abstract data type "Dictionary" as hash table Size is dynamically increased as needed Contains a collection of key-and-value pairs arranged by the hash code of the key – h(key) = value Collisions are resolved by chaining Dictionary class relies on Object.Equals() method for comparing elements 90
91
Object.GetHashCode() method for calculating the hash codes of the elements Major operations: Add(TKey,TValue) – adds an element with the specified key and value into the dictionary Remove(TKey) – removes the element with the specified key Clear() – removes all elements this[] – returns element by key 91
92
Count – returns the number of elements ContainsKey(TKey) – determines whether the dictionary contains given key ContainsValue(TValue) – determines whether the dictionary contains given value Keys – returns a collection of the keys Values – returns a collection of the values TryGetValue(TKey,out TValue ) – if the key is found, returns it in the TValue, otherwise returns the default value for the TValue type 92
93
Dictionary studentsMarks = new Dictionary (); studentsMarks.Add("Ivan", 4); studentsMarks.Add("Peter", 6); studentsMarks.Add("Maria", 6); studentsMarks.Add("George", 5); int peterMark = studentsMarks["Peter"]; Console.WriteLine("Peter's mark: {0}", peterMark); Console.WriteLine("Is Peter in the hash table: {0}", studentsMarks.ContainsKey("Peter")); studentsMarks.ContainsKey("Peter")); Console.WriteLine("Students and grades:"); foreach (var pair in studentsMarks) { Console.WriteLine("{0} --> {1} ", pair.Key, pair.Value); Console.WriteLine("{0} --> {1} ", pair.Key, pair.Value);} 93
94
string text = "Welcome to our C# course. In this " + "course you will learn how to write simple " + "course you will learn how to write simple " + "programs in C# and Microsoft.NET"; "programs in C# and Microsoft.NET"; string[] words = text.Split(new char[] {' ', ',', '.'}, StringSplitOptions.RemoveEmptyEntries); StringSplitOptions.RemoveEmptyEntries); var wordsCount = new Dictionary (); foreach (string word in words) { if (wordsCount.ContainsKey(word)) if (wordsCount.ContainsKey(word)) wordsCount[word]++; wordsCount[word]++; else else wordsCount.Add(word, 1); wordsCount.Add(word, 1);} foreach (var pair in wordsCount) { Console.WriteLine("{0} --> {1}", pair.Key, pair.Value); Console.WriteLine("{0} --> {1}", pair.Key, pair.Value);} 94
95
Balanced Binary Search Trees Ordered binary search trees that have height of log 2 (n) where n is the number of their nodes Searching costs about log 2 (n) comparisons .NET Framework has built-in implementations of balanced search trees, e.g.: SortedDictionary SortedDictionary Red-black tree based map of key-value pairs External libraries like "Wintellect Power Collections for.NET" are more flexible 95
96
96 string text = "Welcome to our C# course. In this " + "course you will learn how to write simple " + "course you will learn how to write simple " + "programs in C# and Microsoft.NET"; "programs in C# and Microsoft.NET"; string[] words = text.Split(new char[] {' ', ',', '.'}, StringSplitOptions.RemoveEmptyEntries); StringSplitOptions.RemoveEmptyEntries); var wordsCount = new SortedDictionary (); foreach (string word in words) { if (wordsCount.ContainsKey(word)) if (wordsCount.ContainsKey(word)) wordsCount[word]++; wordsCount[word]++; else else wordsCount.Add(word, 1); wordsCount.Add(word, 1);} foreach (var pair in wordsCount) { Console.WriteLine("{0} --> {1}", pair.Key, pair.Value); Console.WriteLine("{0} --> {1}", pair.Key, pair.Value);}
97
What They Are? How and When to Use Them?
98
Special declarative tags for attaching descriptive information (annotations) to the declarations in the code At compile time attributes are saved in the assembly's metadata Can be extracted from the metadata and can be manipulated by different tools Instances of classes derived from System.Attribute 98
99
Attribute's name is surrounded by square brackets and is placed before the declaration which it refers to: [Flags] attribute indicates that the enum type can be treated like a set of bit flags Attribute's name is surrounded by square brackets and is placed before the declaration which it refers to: [Flags] attribute indicates that the enum type can be treated like a set of bit flags [Flags] // System.FlagsAttribute public enum FileAccess { Read = 1, Read = 1, Write = 2, Write = 2, ReadWrite = Read | Write ReadWrite = Read | Write} 99
100
Attributes use parameters for initialization: In the example the [DllImport] attribute is instantiated by the compiler as follows: An object of System.Runtime. InteropServices.DllImportAttribute class is created and initialized [DllImport("user32.dll", EntryPoint="MessageBox")] public static extern int ShowMessageBox(int hWnd, string text, string caption, int type); string text, string caption, int type);... ShowMessageBox(0, "Some text", "Some caption", 0); 100
101
Questions? http://academy.telerik.com
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.