C# Language Overview (Part II)

Download Report

Transcript C# Language Overview (Part II)

C# Language Overview (Part II)

Creating and Using Objects, Exceptions, Strings, Generics, Collections, Attributes Svetlin Nakov Telerik Corporation www.telerik.com

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 Objects

Using the Built-In .NET Framework Classes

The formal definition of class :

What is Class?

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.

Definition by Google

4

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

Class Name Account +Owner: Person +Ammount: double +Suspend() +Deposit(sum:double) +Withdraw(sum:double) Attributes (Properties and Fields) Operations (Methods)

6

Objects

An object class is a concrete instance of a particular

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

Class Account +Owner: Person +Ammount: double +Suspend() +Deposit(sum:double) +Withdraw(sum:double)

Objects – Example

Object ivanAccount +Owner="Ivan Kolev" +Ammount=5000.0

peterAccount +Owner="Peter Kirov" +Ammount=1825.33

Object kirilAccount +Owner="Kiril Kirov" +Ammount=25.0

Object

8

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: using System; ...

// Define two variables of type DateTime DateTime today; DateTime halloween;

Instances cannot be used if they are not initialized // Declare and initialize a structure instance DateTime today = DateTime.Now;

11

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: // Accessing read-only field String empty = String.Empty; // Accessing constant field int maxInt = Int32.MaxValue;

13

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

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));

16

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 of a class are common for all instances

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

Calling Instance Methods – Examples

Calling instance methods of String : String sampleLower = new String('a', 5); String sampleUpper = sampleLower.ToUpper(); Console.WriteLine(sampleLower); // aaaaa Console.WriteLine(sampleUpper); // AAAAA

Calling instance methods of DateTime : DateTime now = DateTime.Now; DateTime later = now.AddHours(8); Console.WriteLine("Now: {0}", now); Console.WriteLine("8 hours later: {0}", later);

21

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

Calling Static Methods – Examples

using System; Constant field Static method double radius = 2.9; double area = Math.PI * Math.Pow(radius, 2); Console.WriteLine("Area: {0}", area); // Area: 26,4207942166902 Static method double precise = 8.7654321; double round3 = Math.Round(precise, 3); double round1 = Math.Round(precise, 1); Console.WriteLine( Static method "{0}; {1}; {2}", precise, round3, round1); // 8,7654321; 8,765; 8,8

23

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 = new ()

Examples: String s = new String("Hello!"); // s = "Hello!" 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

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 public enum Color { Red, Green, Blue, Black } … Color color = Color.Red; Console.WriteLine(color); // Red color = 5; // Compilation error!

27

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

Including Namespaces

The using directive in C#: using

Allows using types in a namespace, without specifying their full name

Example: using System; DateTime date; instead of System.DateTime date;

30

Common Type System (CTS)

CTS defines all data types Framework supported in .NET

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

31

CTS and Different Languages

CTS is common for all .NET languages

C#, VB.NET, J#, JScript.NET, ...

CTS type mappings: CTS Type System.Int32

System.Single

System.Boolean

System.String

System.Object

C# Type int float bool string object VB.NET Type Integer Single Boolean String Object

32

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 Handling

The 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 try { // Do some work that can raise an exception } catch (SomeException) { // Handle the caught exception }

catch blocks can be used multiple times to process different exception types

37

Handling Exceptions – Example

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!"); } }

38

The System.Exception

Class

Exceptions in .NET are objects

The System.Exception

exceptions in CLR class is base for all

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 current exception (if any)

39

Exception Properties – Example

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); } } }

40

Exception Properties

The Message problem property gives brief description of the

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.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

41

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: 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)

42

Exception Hierarchy

Exceptions in .NET Framework are organized in a hierarchy

43

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: try { // Do some works that can raise an exception } catch (System.ArithmeticException) { // Handle the caught arithmetic exception }

Handles ArithmeticException DivideByZeroException and and its successors OverflowException

45

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: try { // Do some works that can raise any exception } catch { // Handle the caught exception }

46

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

Method N … Method 2 Method 1 Main()

How Exceptions Work?

5. Throw an exception 4. Method call 3. Method call 2. Method call Method N … Method 2 Method 1 Main() 6. Find handler 7. Find handler 8. Find handler .NET CLR

48

Using throw Keyword

Throwing an exception with error message: throw new ArgumentException("Invalid amount!");

Exceptions can take message and cause: try { Int32.Parse(str); } catch (FormatException fe) { throw new ArgumentException("Invalid number", fe); }

Note: if the original exception is not passed the initial cause of the exception is lost

49

Throwing Exceptions – Example

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; } }

50

Strings and Text Processing

What Is String?

Strings are sequences of characters

Each character is a Unicode symbol

Represented by the string ( System.String

) data type in C#

Example: string s = "Hello, C#"; s H e l l o , C #

52

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 type

53

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 ] string s = "Hello!"; int len = s.Length; // len = 6 char ch = s[1]; // ch = 'e' index = s[index] = 0 H 1 e 2 l 3 l 4 o 5 !

54

Strings – Example

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]); } }

55

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

string str1; System.String str2; String str3;

The above three declarations are equivalent

56

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 string s; // s is equal to null

Assigning a string literal string s = "I am a string literal!";

Assigning from another string variable string s2 = s;

Assigning from the result of string operation string s = 42.ToString();

58

Reading and Printing Strings

Reading strings from the console

Use the method Console.ReadLine() string s = Console.ReadLine();

Printing strings to the console

Use the methods Write() and WriteLine() Console.Write("Please enter your name: "); string name = Console.ReadLine(); Console.Write("Hello, {0}! ", name); Console.WriteLine("Welcome to our party!");

59

Comparing Strings

A number of ways exist to compare two strings:

Dictionary-based string comparison

Case-insensitive 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

Case-sensitive string.Compare(str1, str2, false);

60

Comparing Strings – Example

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

61

Concatenating Strings

There are two ways to combine strings:

Using the Concat() method string str = String.Concat(str1, str2);

Using the + or the += operators string str = str1 + str2 + str3; string str += str1;

Any object can be appended to a string string name = "Peter"; int age = 22; string s = name + " " + age; //

"Peter 22"

62

Searching in Strings

Finding a character or substring within given string

First occurrence IndexOf(string str)

First occurrence starting at given position IndexOf(string str, int startIndex)

Last occurrence LastIndexOf(string)

63

Searching in Strings – Example

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 index = s[index] = 0 1 C # 2 3 4 5 6 P r o g 7 8 9 r a m 10 11 12 13 … m i n g …

64

Extracting Substrings

Extracting substrings

str.Substring(int startIndex, int length) string filename = @"C:\Pics\Rila2009.jpg"; string name = filename.Substring(8, 8); // name is Rila2009

str.Substring(int startIndex) 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

65

Splitting Strings

To split a string by given separator(s) use the following method: string[] Split(params char[])

Example: string listOfBeers = "Amstel, Zagorka, Tuborg, Becks."; string[] beers = listOfBeers.Split(' ', ',', '.'); Console.WriteLine("Available beers are:"); foreach (string beer in beers) { Console.WriteLine(beer); }

66

Replacing and Deleting Substrings

Replace(string, string) – replaces all occurrences of given string with another

The result is new string (strings are immutable) string cocktail = "Vodka + Martini + Cherry"; string replaced = cocktail.Replace("+", "and"); // Vodka and Martini and Cherry

Remove(index, length) – deletes part of a string and produces a new string as result string price = "$ 1234567"; string lowPrice = price.Remove(2, 3); // $ 4567

67

Changing Character Casing

Using method ToLower() string alpha = "aBcDeFg"; string lowerAlpha = alpha.ToLower(); // abcdefg Console.WriteLine(lowerAlpha);

Using method ToUpper() string alpha = "aBcDeFg"; string upperAlpha = alpha.ToUpper(); // ABCDEFG Console.WriteLine(upperAlpha);

68

Trimming White Space

Using method Trim() string s = " example of white space "; string clean = s.Trim(); Console.WriteLine(clean);

Using method Trim(chars) string s = " \t\nHello!!! \n"; string clean = s.Trim(' ', ',' ,'!', '\n','\t'); Console.WriteLine(clean); // Hello

Using TrimStart() and TrimEnd() string s = " C# "; string clean = s.TrimStart(); // clean = "C# "

69

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)!

public static string DupChar(char ch, int count) { string result = ""; for (int i=0; i

70

Changing the Contents of a String – StringBuilder

Use the System.Text.StringBuilder

modifiable strings of characters: class for 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(); }

Use StringBuilder characters to a string if you need to keep adding

71

The StringBuilder Class

Capacity StringBuilder : Length =9 Capacity =15 H e l l o , C # !

used buffer ( Length ) unused buffer

StringBuilder keeps a buffer memory, allocated in advance

Most operations use the buffer memory and do not allocate new objects

72

StringBuilder – Example

Extracting all capital letters from a string public static string ExtractCapitals(string s) { StringBuilder result = new StringBuilder(); for (int i = 0; i

73

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 int number = 5; string s = "The number is " + number.ToString(); Console.WriteLine(s); // The number is 5

74

Method ToString(format)

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 %

75

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(…) 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.

77

Composite Formatting

The placeholders in the composite formatting strings are specified as follows: {index[,alignment][:formatString]}

Examples: 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

78

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 DateTime now = DateTime.Now; Console.WriteLine( "Now is {0:d.MM.yyyy hh:mm:ss}", now); // Now is 31.11.2009 11:30:32

79

Collection Classes

Lists, 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 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

81

The List 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 , List , List

Size is dynamically increased as needed

Basic functionality:

Count – returns the number of elements

Add(T) – appends given element at the end

82

List – Simple Example

static void Main() { List list = new List(); list.Add("C#"); list.Add("Java"); list.Add("PHP"); foreach (string item in list) { Console.WriteLine(item); } // Result: // C# // Java // PHP }

83

List – 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) specified position – removes the element at the

Clear() – removes all elements

Contains(T) – determines whether an element is part of the list

84

List – 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() an array – converts the elements of the list to

TrimExcess() – sets the capacity to the actual number of elements

85

Primes in an Interval – Example

static List FindPrimes(int start, int end) { List primesList = new List(); 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; }

86

The Stack Class

Implements the stack array data structure using an

Elements are of the same type T

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

87

Stack – Example

Using Push() , Pop() and Peek() methods static void Main() { Stack stack = new Stack(); 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); } }

88

The Queue 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

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 – Example

Using Enqueue() and Dequeue() methods static void Main() { Queue queue = new Queue(); 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); } }

90

Dictionary 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 class relies on

Object.Equals() elements method for comparing the

91

Dictionary 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 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 – Example

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")); Console.WriteLine("Students and grades:"); foreach (var pair in studentsMarks) { Console.WriteLine("{0} --> {1} ", pair.Key, pair.Value); }

94

Counting Words in Given Text

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(); 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); }

95

Balanced Trees in .NET

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

Red-black tree based map of key-value pairs

External libraries like "Wintellect Power Collections for .NET" are more flexible

96

Sorted Dictionary – Example

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(); 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); }

97

Attributes

What 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] // System.FlagsAttribute

public enum FileAccess { Read = 1, Write = 2, ReadWrite = Read | Write }

[Flags] attribute indicates that the enum type can be treated like a set of bit flags

100

Attributes With Parameters

Attributes use parameters for initialization: [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);

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

C# Language Overview (Part II)

Questions?

http://schoolacademy.telerik.com