View
1.571
Download
2
Category
Preview:
Citation preview
C# Language Overview
(Part II)Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes
Table of Contents
1.Creating and Using Objects
2.Namespaces
3.Exceptions Handling
4.Strings and Text Processing
5.Generics
6.Collection Classes
7.Attributes
2
Using Classes and ObjectsUsing the Built-In .NET Framework
Classes
What is Class? The formal definition of class:
Definition by Google
4
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.
Classes 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
Classes – Example
6
Account
+Owner: Person+Ammount: double
+Suspend()+Deposit(sum:double)+Withdraw(sum:double)
Class Name
Attributes
(Properties and Fields)
Operations
(Methods)
Objects 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
account7
Objects – Example
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
Classes in C# 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
Classes in C# – Examples
Example of classes: System.Console System.String (string in C#) System.Int32 (int in C#) System.Array System.Math System.Random
10
Declaring Objects An instance of a class or structure can be defined like any other variable:
Instances cannot be used if they are not initialized
11
using System;...// Define two variables of type DateTimeDateTime today; DateTime halloween;
// Declare and initialize a structure instanceDateTime today = DateTime.Now;
Fields 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
Accessing Fields Constant fields can be only read Variable fields can be read and modified
Usually properties are used instead of directly accessing variable fields
Examples:
13
// Accessing read-only fieldString empty = String.Empty;
// Accessing constant fieldint maxInt = Int32.MaxValue;
Properties 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
Properties (2) 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
Accessing Properties and Fields – Example
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}", day, month, year);
Console.WriteLine( "Day of year: {0}", christmas.DayOfYear);
Console.WriteLine("Is {0} leap year: {1}", year, DateTime.IsLeapYear(year));
Instance and Static Members
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
Instance and Static Members
– Examples 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
Methods 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
Instance Methods 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
20
<object_name>.<method_name>(<parameters>)
Calling Instance Methods – Examples
Calling instance methods of String:
Calling instance methods of DateTime:
21
String sampleLower = new String('a', 5);String sampleUpper = sampleLower.ToUpper();
Console.WriteLine(sampleLower); // aaaaaConsole.WriteLine(sampleUpper); // AAAAA
DateTime now = DateTime.Now;DateTime later = now.AddHours(8);
Console.WriteLine("Now: {0}", now);Console.WriteLine("8 hours later: {0}", later);
Static Methods 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 22
<class_name>.<method_name>(<parameters>)
Calling Static Methods – Examples
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);// 8,7654321; 8,765; 8,8
Constant field
Static metho
d
Static meth
odStatic meth
od
Constructors 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
Constructors (2) Constructor is invoked by the new operator
Examples:
25
String s = new String("Hello!"); // s = "Hello!"
<instance_name> = new <class_name>(<parameters>)
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);
Structures 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
Enumerations Enumerations in C# are types whose values are limited to a predefined set of values E.g. the days of week
Declared by the keyword enum in C#
Hold values from a predefined set
27
public enum Color { Red, Green, Blue, Black }
…
Color color = Color.Red;Console.WriteLine(color); // Red
color = 5; // Compilation error!
What is a Namespace? 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, e.g. System namespace contains Data
namespace The name of the nested namespace
is System.Data
28
Full Class Names 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
29
<namespace_name>.<class_name>
Including Namespaces The using directive in C#:
Allows using types in a namespace, without specifying their full name
Example:
instead of
30
using <namespace_name>
using System;DateTime date;
System.DateTime date;
Common Type System (CTS)
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 design31
CTS and Different Languages
CTS is common for all .NET languages C#, VB.NET, J#, JScript.NET, ...
CTS type mappings:
32
CTS Type C# Type VB.NET Type
System.Int32 int Integer
System.Single float Single
System.Boolean bool Boolean
System.String string String
System.Object object Object
Value and Reference Types
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
33
Value and Reference Types –
Examples 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[] 34
Exceptions HandlingThe Paradigm of Exceptions in
OOP
What are Exceptions? 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
36
Handling Exceptions 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
37
try{ // Do some work that can raise an exception}catch (SomeException){ // Handle the caught exception}
Handling Exceptions – Example
38
static void Main(){ string s = Console.ReadLine(); try { Int32.Parse(s); Console.WriteLine( "You entered valid Int32 number {0}.", s); } catch (FormatException) { Console.WriteLine("Invalid integer number!"); } catch (OverflowException) { Console.WriteLine( "The number is too big to fit in Int32!"); }}
The System.Exception Class
Exceptions in .NET are objects The System.Exception class is base for all exceptions in CLR Holds 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 currentexception (if any)
39
Exception Properties – Example
40
class ExceptionsTest{ public static void CauseFormatException() { string s = "an invalid number"; Int32.Parse(s); } static void Main() { try { CauseFormatException(); } catch (FormatException fe) { Console.Error.WriteLine("Exception caught: {0}\n{1}", fe.Message, fe.StackTrace); } }}
Exception Properties 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
41
Exception caught: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Int32.Parse(String s) at ExceptionsTest.CauseFormatException() in c:\consoleapplication1\exceptionstest.cs:line 8 at ExceptionsTest.Main(String[] args) in c:\consoleapplication1\exceptionstest.cs:line 15
Exception Properties (2)
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:
42
Exception caught: Input string was not in a correct format. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at ExceptionsTest.Main(String[] args)
Exception Hierarchy
Exceptions in .NET Framework are organized in a hierarchy
43
System.Exception
System.SystemException System.ApplicationException
System.NullReferenceException System.FormatException
System.ArithmeticException
System.DivideByZeroException System.OverflowException
SofiaUniversity.InvalidStudentException
Types of Exceptions 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
44
Handling Exceptions
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 45
try{ // Do some works that can raise an exception}catch (System.ArithmeticException){ // Handle the caught arithmetic exception}
Handling All Exceptions 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:
46
try{ // Do some works that can raise any exception}catch{ // Handle the caught exception}
Throwing Exceptions
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
47
How Exceptions Work?
48
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 theprogram 9. Find handler
10. Display error message
Using throw Keyword 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
49
throw new ArgumentException("Invalid amount!");
try{ Int32.Parse(str);}catch (FormatException fe){ throw new ArgumentException("Invalid number", fe);}
Throwing Exceptions – Example
50
public static double Sqrt(double value){ if (value < 0) throw new System.ArgumentOutOfRangeException( "Sqrt for negative numbers is undefined!"); return Math.Sqrt(value);}static void Main(){ try { Sqrt(-1); } catch (ArgumentOutOfRangeException ex) { Console.Error.WriteLine("Error: " + ex.Message); throw; }}
Strings and Text Processing
What Is String? Strings are sequences of characters
Each character is a Unicode symbol Represented by the string data type in C# (System.String)
Example:
52
string s = "Hello, C#";
H e l l o , C #s
The System.String Class 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 type53
The System.String Class (2)
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]
54
string s = "Hello!";int len = s.Length; // len = 6char ch = s[1]; // ch = 'e'
0 1 2 3 4 5
H e l l o !index =
s[index] =
Strings – Example
55
static void Main(){ string s = "Stand up, stand up, Balkan Superman."; Console.WriteLine("s = \"{0}\"", s); Console.WriteLine("s.Length = {0}", s.Length); for (int i = 0; i < s.Length; i++) { Console.WriteLine("s[{0}] = {1}", i, s[i]); }}
Declaring Strings 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
56
string str1;System.String str2;String str3;
Creating Strings 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
57
Creating Strings (2) Not initialized variables has value of null
Assigning a string literal
Assigning from another string variable
Assigning from the result of string operation
58
string s; // s is equal to null
string s = "I am a string literal!";
string s2 = s;
string s = 42.ToString();
Reading and Printing Strings
Reading strings from the console Use the method Console.ReadLine()
59
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()
Comparing Strings A number of ways exist to compare two strings: Dictionary-based string comparison
Case-insensitive
Case-sensitive
60
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);
Comparing Strings – Example
Finding the first string in a lexicographical order from a given list of strings:
61
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]; if (String.Compare(currentTown, firstTown) < 0) { firstTown = currentTown; }}Console.WriteLine("First town: {0}", firstTown);
Concatenating Strings
There are two ways to combine strings: Using the Concat() method
Using the + or the += operators
Any object can be appended to a string
62
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"
Searching in Strings
Finding a character or substring within given string First occurrence
First occurrence starting at given position
Last occurrence
63
IndexOf(string str)
IndexOf(string str, int startIndex)
LastIndexOf(string)
Searching in Strings – Example
64
string str = "C# Programming Course";int index = str.IndexOf("C#"); // index = 0index = str.IndexOf("Course"); // index = 15index = str.IndexOf("COURSE"); // index = -1// IndexOf is case-sensetive. -1 means not foundindex = str.IndexOf("ram"); // index = 7index = str.IndexOf("r"); // index = 4index = str.IndexOf("r", 5); // index = 7index = str.IndexOf("r", 8); // index = 18
0 1 2 3 4 5 6 7 8 9 10 11 12 13 …
C # P r o g r a m m i n g …
index = s[index] =
Extracting Substrings Extracting substrings
str.Substring(int startIndex, int length)
str.Substring(int startIndex)
65
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
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
C : \ P i c s \ R i l a 2 0 0 5 . j p g
Splitting Strings To split a string by given separator(s)
use the following method:
Example:
66
string[] Split(params char[])
string listOfBeers = "Amstel, Zagorka, Tuborg, Becks.";string[] beers = listOfBeers.Split(' ', ',', '.');Console.WriteLine("Available beers are:");foreach (string beer in beers){ Console.WriteLine(beer);}
Replacing and Deleting Substrings
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 a new string as result
67
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
Changing Character Casing
Using method ToLower()
Using method ToUpper()
68
string alpha = "aBcDeFg";string lowerAlpha = alpha.ToLower(); // abcdefgConsole.WriteLine(lowerAlpha);
string alpha = "aBcDeFg";string upperAlpha = alpha.ToUpper(); // ABCDEFGConsole.WriteLine(upperAlpha);
Trimming White Space Using method Trim()
Using method Trim(chars)
Using TrimStart() and TrimEnd()
69
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# "
Constructing Strings 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
(slowly)!
70
public static string DupChar(char ch, int count){ string result = ""; for (int i=0; i<count; i++) result += ch; return result;}
Very bad practice.
Avoid this!
Changing the Contents of a String –
StringBuilder Use the System.Text.StringBuilder
class for modifiable strings of characters:
Use StringBuilder if you need to keep adding characters to a string
71
public static string ReverseString(string s){ StringBuilder sb = new StringBuilder(); for (int i = s.Length-1; i >= 0; i--) sb.Append(s[i]); return sb.ToString();}
The StringBuilder Class
StringBuilder keeps a buffer memory, allocated in advance Most operations use the buffer
memory and do not allocate new objects
72
H e l l o , C # !StringBuilder:
Length=9Capacity=15
Capacity
used buffer(Length)
unused buffer
StringBuilder – Example
Extracting all capital letters from a string
73
public static string ExtractCapitals(string s){ StringBuilder result = new StringBuilder(); for (int i = 0; i<s.Length; i++) {
if (Char.IsUpper(s[i])) { result.Append(s[i]); } } return result.ToString();}
Method ToString() 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
74
int number = 5;string s = "The number is " + number.ToString();Console.WriteLine(s); // The number is 5
Method ToString(format)
We can apply specific formatting when converting objects to string ToString(formatString) method
75
int number = 42;string s = number.ToString("D5"); // 00042
s = number.ToString("X"); // 2A
// Consider the default culture is Bulgarians = number.ToString("C"); // 42,00 лв
double d = 0.375;s = d.ToString("P2"); // 37,50 %
Formatting Strings 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)76
Method String.Format()
Applies templates for formatting strings Placeholders are used for dynamic
text Like Console.WriteLine(…)
77
string template = "If I were {0}, I would {1}.";string sentence1 = String.Format( template, "developer", "know C#");Console.WriteLine(sentence1);// If I were developer, I would know C#.
string sentence2 = String.Format( template, "elephant", "weigh 4500 kg");Console.WriteLine(sentence2);// If I were elephant, I would weigh 4500 kg.
Composite Formatting The placeholders in the composite
formatting strings are specified as follows:
Examples:
78
{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);// Dec 42 = Hex 2A
Formatting Dates Dates use 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
79
DateTime now = DateTime.Now;Console.WriteLine( "Now is {0:d.MM.yyyy hh:mm:ss}", now);// Now is 31.11.2009 11:30:32
Collection ClassesLists, Trees, Dictionaries
What are Generics? Generics allow defining parameterized classes that process data of unknown (generic) type The class can be instantiated with
several different particular types Example: List<T> List<int> / List<string> / List<Student>
Generics are also known as "parameterized types" or "template types" Similar to the templates in C++ Similar to the generics in Java
81
The List<T> Class Implements the abstract data structure list using an auto-extensible array All elements are of the same type T T can be any type, e.g. List<int>, List<string>, List<DateTime>
Size is dynamically increased as needed
Basic functionality: Count – returns the number of
elements Add(T) – appends given element at
the end
82
List<T> – Simple Example
83
static void Main(){ List<string> list = new List<string>();
list.Add("C#"); list.Add("Java"); list.Add("PHP");
foreach (string item in list) { Console.WriteLine(item); }
// Result: // C# // Java // PHP}
List<T> – Functionality 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 list84
List<T> – Functionality (2)
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 85
Primes in an Interval – Example
86
static List<int> FindPrimes(int start, int end){ List<int> primesList = new List<int>();
for (int num = start; num <= end; num++) { bool prime = true; for (int div = 2; div <= Math.Sqrt(num); div++) { if (num % div == 0) { prime = false; break; } } if (prime) { primesList.Add(num); } } return primesList;}
The Stack<T> Class Implements the stack data structure using an array Elements are of the same type T T can be any type, e.g. Stack<int> 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
87
Stack<T> – Example Using Push(), Pop() and Peek()
methods
88
static void Main(){ Stack<string> stack = new Stack<string>();
stack.Push("1. Ivan"); stack.Push("2. Nikolay"); stack.Push("3. Maria"); stack.Push("4. George");
Console.WriteLine("Top = {0}", stack.Peek());
while (stack.Count > 0) { string personName = stack.Pop(); Console.WriteLine(personName); }}
The Queue<T> Class 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<int> 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
89
Queue<T> – Example Using Enqueue() and Dequeue()
methods
90
static void Main(){ Queue<string> queue = new Queue<string>(); queue.Enqueue("Message One"); queue.Enqueue("Message Two"); queue.Enqueue("Message Three"); queue.Enqueue("Message Four");
while (queue.Count > 0) { string message = queue.Dequeue(); Console.WriteLine(message); }}
Dictionary<TKey,TValue> Class
Implements the abstract data type "Dictionary" as hash table Size is dynamically increased as
needed Contains a collection of key-value
pairs arranged by the hash code of the key: h(key) = value
Collisions are resolved by chaining Dictionary<TKey,TValue> class relies on Object.Equals() method for
comparing the elements
91
Dictionary<TKey,TValue> Class (2)
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
92
Dictionary<TKey,TValue> Class (3)
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
93
Dictionary<TKey,TValue> – Example
94
Dictionary<string, int> studentsMarks = new Dictionary<string, int>();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"));Console.WriteLine("Students and grades:");
foreach (var pair in studentsMarks){ Console.WriteLine("{0} --> {1} ", pair.Key, pair.Value);}
Counting Words in Given Text
95
string text = "Welcome to our C# course. In this " + "course you will learn how to write simple " + "programs in C# and Microsoft .NET";string[] words = text.Split(new char[] {' ', ',', '.'}, StringSplitOptions.RemoveEmptyEntries);var wordsCount = new Dictionary<string, int>();
foreach (string word in words){ if (wordsCount.ContainsKey(word)) wordsCount[word]++; else wordsCount.Add(word, 1);}
foreach (var pair in wordsCount){ Console.WriteLine("{0} --> {1}", pair.Key, pair.Value);}
Balanced Trees in .NET Balanced Binary Search Trees
Ordered binary search trees that have height of log2(n) where n is the number of their nodes
Searching costs about log2(n) comparisons
.NET Framework has built-in implementations of balanced search trees, e.g.: SortedDictionary<K,V>
Red-black tree based map of key-value pairs
External libraries like "Wintellect Power Collections for .NET" are more flexible
96
Sorted Dictionary – Example
97
string text = "Welcome to our C# course. In this " + "course you will learn how to write simple " + "programs in C# and Microsoft .NET";string[] words = text.Split(new char[] {' ', ',', '.'}, StringSplitOptions.RemoveEmptyEntries);var wordsCount = new SortedDictionary<string, int>();
foreach (string word in words){ if (wordsCount.ContainsKey(word)) wordsCount[word]++; else wordsCount.Add(word, 1);}
foreach (var pair in wordsCount){ Console.WriteLine("{0} --> {1}", pair.Key, pair.Value);}
AttributesWhat Attributes Are? How and When to Use Them?
What Are Attributes? Attributes are special declarative tags Used 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
at run-time and can be manipulated by different tools
Instances of classes derived from System.Attribute
99
Attributes Applying – Example
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
100
[Flags] // System.FlagsAttributepublic enum FileAccess { Read = 1, Write = 2, ReadWrite = Read | Write}
Attributes With Parameters
Attributes use parameters for initialization:
In this example the [DllImport] attribute is instantiated by the compiler A System.Runtime.InteropServices. DllImportAttribute object is created, initialized and put into the assembly metadata
101
[DllImport("user32.dll", EntryPoint="MessageBox")]public static extern int ShowMessageBox(int hWnd, string text, string caption, int type);…
ShowMessageBox(0, "Some text", "Some caption", 0);
C# Language Overview(Part II)
Questions? ??
? ? ???
?
?
http://schoolacademy.telerik.com
Recommended